LinuC LV2資格学習52日目
早い方では、明日からゴールデンウィークですね。
私的にコロナのおかげでテレワーク主軸になってからそういった概念がないです。
Dockerコンテナの管理
Dockerの導入方法は、ディストリビューションのパッケージ管理コマンドで導入可能です。
CentOS7()
yum install docker
Ubuntu20.04
apt install docker.io
Dockerサービスを起動
systemctl enable --now docker
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 水 2021-04-28 19:26:36 JST; 54s ago
Docs: http://docs.docker.com
Main PID: 20890 (dockerd-current)
CGroup: /system.slice/docker.service
├─20890 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=system...
└─20898 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run...
バージョンを確認します。
docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-204.git0be3e21.el7.x86_64
Go version: go1.10.3
Git commit: 0be3e21/1.13.1
Built: Fri Mar 19 13:57:09 2021
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-204.git0be3e21.el7.x86_64
Go version: go1.10.3
Git commit: 0be3e21/1.13.1
Built: Fri Mar 19 13:57:09 2021
OS/Arch: linux/amd64
Experimental: false
Dockerの操作には、dockerコマンドがあるのでそちらで行います。
dockerコマンド実行するはRoot権限が必要でが、dockerグループに所属させれば一般ユーザーでのコマンドを実行可能です。
groupadd docker
getent group | grep docker
# Dockerグループが作成されました。
dockerroot:x:991:
docker:x:1002:
# dockerを実行したい一般ユーザーをグループに追加します。
usermod -aG docker linuc
# サービスを再起動させます。
systemctl restart dokcer
グループに追加したらユーザーを切り替えたコンテナイメージをダウンロードしてみます。
su - linuc
docker pull centos:8
# ダウンロードが開始されます。
Trying to pull repository docker.io/library/centos ...
8: Pulling from docker.io/library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for docker.io/centos:8
取得したイメージを確認してみます。
docker images
# 先ほど取得したCentOS8のイメージが確認できます。
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 8 300e315adb2f 4 months ago 209 MB
コンテナの生成
取得したDockerイメージからdocker create コマンドでコンテナを生成します。
docker create --name mycentos centos:8
# 実行するとコンテナの識別文字列(ID)が出力されます。
deaed2ea57bbe417158975b403123d7a65676d337929ab75bca64ee251b8a222
コンテナの起動
生成したコンテナを起動します。
docker start mycentos
# コンテナ名が出力されます。
mycentos
起動に指定するのは、コンテナ名とコンテナ生成次に出力されたIDも使えます。
先程のコマンドでは、コンテナは一瞬起動して即時終了してしまいます。docker psコマンドで現在稼働中のコンテナを確認できるので確認してみます。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
一つもコンテナが稼働していないため項目だ表示されます
一連の動作を一つのコマンドで
これまで行ってきたdocker pull/create/startは、docker runコマンドで集約する事が可能です。
docker runコマンドは、引数にコマンドを指定する事が可能です。次の例では、docker runコマンドで起動したコンテナイメージないの/etc/redhat-releaseファイルを確認します。
cat /etc/redhat-release
# local実行結果
CentOS Linux release 7.9.2009 (Core)
docker run centos:8 cat /etc/redhat-release
# Docker runを使った実行結果
CentOS Linux release 8.3.2011
上記の様に最初の実行では,CentSO7になりますがdocker runを使った実行では、CnetOS8の値が出力されました。
docker runで実行した環境も即時終了します。先ほどdocker psコマンドで稼働中のコンテナを確認しましたが、-aオプションを指定する事で終了したコンテナも確認する事ができます。
docker ps -a
# 実行結果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70bdb0e71c17 centos:8 "cat /etc/redhat-r..." 3 minutes ago Exited (0) 3 minutes ago confident_pasteur
deaed2ea57bb centos:8 "/bin/bash" 17 minutes ago Exited (0) 15 minutes ago mycentos
実行結果のSTATUSのあたいがExited (0) になっているので正常に終了した事がわかります。
コンテナの削除
不要になったコンテナの削除には、docker rmコマンドを使います。
コンテナの削除にはコンテナ名は使えず、コンテナIDのみが使えます。コンテナIDの指定は、前方一致で一部分だけ指定で消す事ができます。
先ほどdocker ps -aで確認したコンテナのうち70bdb0e71c17・・で始まる方を削除します。
docker rm 70bd
#削除実行されたIDが出力されます。
70bd
docker ps -aで削除されているか確認てみましょう。
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
deaed2ea57bb centos:8 "/bin/bash" 25 minutes ago Exited (0) 23 minutes ago mycentos
コンテナへの接続
コンテナは、その中にログインしてコマンドを実行する事も可能です。
コンテナの標準入力に接続する-i(--interactive)オプションと、擬似端末を割り当てる-t(--tty)オプションを指定する事でコンテナ内部のシェルに接続する事ができます。
コマンドラインは以下となります。
docker run -it --name <コンテナ名> イメージ名:タグ シェル
すでに生成したmycentosコンテナにbashで接続してみます。
docker run -it --name mycentos centos:8 /bin/bash
[root@c277e2104e94 /]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
ログインできました。
昨日学んだ通りコンテナは、仮想マシンと違いカーネルを共有しているので見た目上はCnetOS8となっていますがカーネルは、ホストのCnetOSのものになります。
uname -r
3.10.0-1160.el7.x86_64
コンテナから一時離脱(コンテナを停止しないでホストへ戻る)する場合は、ctrlキーを押しながらPQを押します。
docker ps
# コンテナを停止させていないのでバックグラウンド稼働中となります。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c277e2104e94 centos:8 "/bin/bash" 3 minutes ago Up 3 minutes mycentos
バックグラウンド稼働中のコンテナに再接続する場合は、docker attachコマンド使います。引数には、コンテナ名とコンテナIDが使えます。
docker attach c277e2104e94
[root@c277e2104e94 /]#
コンテナにログインした状態でexitコマンドを実行するとコンテナから離脱しコンテナも終了します。
[root@c277e2104e94 /]# exit
exit
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
昨日学んだ通りコンテナは展開起動や停止廃棄が極めて早いです。
明日は、コンテナのネットワーク利用について勉強します。
それではまた明日、ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?