見出し画像

LinuC LV2資格学習52日目

教本:LinuC レベル2

公式資料

早い方では、明日からゴールデンウィークですね。

私的にコロナのおかげでテレワーク主軸になってからそういった概念がないです。

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

昨日学んだ通りコンテナは展開起動や停止廃棄が極めて早いです。

明日は、コンテナのネットワーク利用について勉強します。

それではまた明日、ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?