GAGA LIFE.

インフラエンジニアブログ

スポンサーリンク

Dockerコンテナ操作

Dockerコンテナライフサイクル

f:id:undercovergeek:20181017101841j:plain

docker container run(コンテナ生成/起動)

docker container run [オプション] イメージ名[:タグ名] [引数]
Options Description
--attach,-a 標準入力(STDIN)/標準出力(STDOUT)/標準エラー出力(STDERR)にアタッチする
--cidfile コンテナIDをファイルに出力する
--detach,-d コンテナを生成し、バックグラウンドで実行する
--interactive,-l コンテナの標準入力を開く
--tty,-t 端末デバイスを使う

コンテナの対話的実行

docker container run -it --name "test1" centos /bin/cal
-------------------- --- -------------- ------ --------
         ①            ②         ③          ④       ⑤

①コンテナを作成/実行
②コンソールに結果を出すオプション
③コンテナ名
④イメージ名
⑤コンテナで実行するコマンド

実行例:calコマンドの実行によるカレンダー表示

docker@LesPaul:~$ docker container run -it --name "test" centos /bin/cal
    October 2018    
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

実行例:bash実行

docker@LesPaul:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
docker@LesPaul:~$ docker container run -it --name "test3" centos /bin/bash
[root@941f4d465cc1 /]# 

docker container run(コンテナのバックグラウンド実行)

docker container run [実行オプション] イメージ名[:タグ名] [引数]
Options Description
--detach,-d バックグラウンドで実行する
--user,-u ユーザー名を指定
--restart=[no on-failure|on-failure:回数n|always|unless-stopped]|コマンドの実行結果によって再起動を行うオプション
--rm コマンド実行完了後にコンテナを自動で削除
docker container run -d centos /bin/ping localhost
-------------------- -- ------ -------------------
         ①           ②    ③            ④

①コンテナを作成/実行
②バックグラウンドで実行するオプション
③イメージ名
④コンテナで実行するコマンド

実行例:pingコマンド実行によるコンテナのバックグラウンド実行

docker@LesPaul:~$ docker container run -d centos /bin/ping localhost
2e797e7808541fc4cab1955428fbce0b7043aad0d4b69052b94f5de326af5e8c
docker@LesPaul:~$ docker container logs -t 2e797e7808541
2018-10-15T12:38:30.878982432Z PING localhost (127.0.0.1) 56(84) bytes of data.
2018-10-15T12:38:30.879017086Z 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.031 ms
2018-10-15T12:38:31.902770242Z 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.056 ms
2018-10-15T12:38:32.967861509Z 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.187 ms
2018-10-15T12:38:33.987876299Z 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.047 ms
2018-10-15T12:38:35.007728824Z 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.039 ms
2018-10-15T12:38:36.133118054Z 64 bytes from localhost (127.0.0.1): icmp_seq=6 ttl=64 time=0.055 ms
2018-10-15T12:38:37.158863576Z 64 bytes from localhost (127.0.0.1): icmp_seq=7 ttl=64 time=0.056 ms
2018-10-15T12:38:38.174602788Z 64 bytes from localhost (127.0.0.1): icmp_seq=8 ttl=64 time=0.041 ms
2018-10-15T12:38:39.198465303Z 64 bytes from localhost (127.0.0.1): icmp_seq=9 ttl=64 time=0.042 ms
2018-10-15T12:38:40.222391461Z 64 bytes from localhost (127.0.0.1): icmp_seq=10 ttl=64 time=0.036 ms
2018-10-15T12:38:41.248841629Z 64 bytes from localhost (127.0.0.1): icmp_seq=11 ttl=64 time=0.034 ms
~中略~

--restartオプション

Options Description
no 再起動しない
on-failure 終了ステータスが0でないときに再起動する
on-failure:回数n 終了ステータスが0でないときにn回再起動する
always 常に再起動する
unless-stopped 直近のコンテナが停止状態でなければ、常に再起動する

実行例:コンテナの常時再起動

docker@LesPaul:~$ docker container run -it --restart=always centos /bin/bash
[root@793322f1986e /]# exit
exit
docker@LesPaul:~$ docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
793322f1986e        centos              "/bin/bash"         11 seconds ago      Up 5 seconds                            dazzling_williams

docker container run(ネットワーク設定)

docker container run [ネットワークオプション] イメージ名[:タグ名] [引数]
Options Description
--add-host=[ホスト名:IPアドレス] コンテナの/etc/hostsにホスト名とIPアドレスを定義
--dns=[IPアドレス] コンテナ用のDNSサーバのIPアドレス指定
--expose 指定したレンジのポート番号を割り当てる
--mac-address=[MACアドレス] コンテナのMACアドレスを指定する
--net=[bridge none|container:<name|id>|host|NETWORK]|コンテナのネットワークを指定する
--hostname,-h コンテナ自身のホスト名を指定する
--publish,-p[ホストのポート番号]:[コンテナのボート番号] ホストとコンテナのポートマッピング
--publish-all,-p ホストの任意のポートをコンテナに割り当てる

例:コンテナのポートマッピング

$ docker container run -d -p 8080:80 nginx

例:コンテナのDNSサーバ指定

$ docker container run -d --dns 192.168.1.1 nginx

実行例:MACアドレスの指定

docker@LesPaul:~$ docker container run -d --mac-address="92:d0:c6:0a:29:33" centos
63eda262189afa50cd888bc8a2f5f0d86aefb753cc47ad2305e1b5d83ae7bbb0
docker@LesPaul:~$ docker container inspect --format="{{.Config.MacAddress}}" 63eda
92:d0:c6:0a:29:33

例:ホスト名とIPアドレス定義

$ docker container run -it--add-host test.com:192.168.1.1 centos

実行例:ホスト名指定(/etc/hosts)

docker@LesPaul:~$ docker container run -it --hostname www.test.com --add-host node1.test.com:192.168.1.1 centos
[root@www /]# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.1.1     node1.test.com
172.17.0.2      www.test.com www
Options Description
bridge ブリッジ接続(デフォルト)を使う
none ネットワークに接続しない
container:[ name / id ] 他のコンテナのネットワークを使う
host コンテナがホストOSのネットワークを使う
NETWORK ユーザー定義ネットワークを使う

例:ユーザー定義ネットワークの作成

$ docker network create -d bridge webapp-net
$ docker container run --net=webap-net -it centos

docker container run(リソースを指定してコンテナ生成/実行)

docker container run [リソースオプション] イメージ名[:タグ名][引数]
Options Description
--cpu-shares,-c CPU使用の配分(比率)
--memory,-m 使用するメモリを制限して実行する(単位はb,k,m,gのいずれか)
--volume=[ホストのディレクトリ]:[コンテナのディレクトリ],-v ホストとコンテナのディレクトリを共有

例:CPU時間の相対割合とメモリ使用量を指定

$ docker container run --cpu-shares=512 --memory=1g centos

例:ディレクトリ共有(host:/home/docker/webap<->container:/usr/share/nginx/html)

docker container run -v /home/docker/webap:/usr/share/nginx/html nginx

docker container run(コンテナを生成/起動する環境を指定)

$ docker container run [環境設定オプション] イメージ名[:タグ名][引数]
Options Description
--env=[環境変数],-e 環境変数を設定する
--env-file=[ファイル名] 環境変数をファイルから設定する
--read-only=[true/false] コンテナのファイルシステムを読み込み専用にする
--workdir=[パス],-w コンテナの作業ディレクトリを指定する
-u,--user=[ユーザー名] ユーザー名をまたはUIDを指定する

実行例:環境変数設定

docker@LesPaul:~$ docker container run -it -e foo=bar centos /bin/bash
[root@22c2c9986493 /]# set | grep foo
foo=bar

実行例:環境変数一括設定

docker@LesPaul:~$ cat env_list 
hoge=fuga
foo=bar
docker@LesPaul:~$ docker container run -it --env-file=env_list centos /bin/bash
[root@7b4076d18618 /]# set | grep -e foo -e hoge 
foo=bar
hoge=fuga

実行例:作業ディレクトリの設定

docker@LesPaul:~$ docker container run -it -w=/tensorflow centos /bin/bash
[root@611d4e932f83 tensorflow]# pwd
/tensorflow

docker container ls(稼働コンテナの一覧表示)

docker container ls [オプション]
Options Description
--all,-a 起動中/停止中も含めてすべてのコンテナを表示する
--filter,-f 表示するコンテナのフィルタリング
--format 表示フォーマットを指定
--last,-n 最後に起動されてからn件のコンテナのみ表示
--latest,-l 最後に起動されたコンテナのみ表示
--no-trunc 情報を省略しないで表示する
--quiet,-q コンテナIDのみ表示
--size,-s ファイルサイズの表示

実行例:コンテナ一覧表示

docker@LesPaul:~$ docker container run -d -p 8080:80 nginx
4b86652223ba69970a8beb0474f99c7133551a8f182af55b1ef2bf8c4f657647
docker@LesPaul:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
4b86652223ba        nginx               "nginx -g 'daemon of…"   2 seconds ago       Up 1 second         0.0.0.0:8080->80/tcp   serene_hamilton

docker image lsコマンド結果

Item Description
CONTAINER ID コンテナいID
IMAGE コンテナの基になっているイメージ
COMMAND コンテナ内で実行されているコマンド
CREATED コンテナ作成からの経過
STATUS コンテナの状態(restarting/runnning/paused/exited)
PORTS 割り当てられたポート
NAMES コンテナの名前

実行例:コマンドのフィルタリング

docker@LesPaul:~$ docker container ls -a -f name=test1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
895e28d7f4da        centos              "/bin/cal"          7 seconds ago       Exited (0) 6 seconds ago                       test1

実行例:コマンドのフィルタリング2

docker@LesPaul:~$ docker container ls -a -f exited=0
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
895e28d7f4da        centos              "/bin/cal"               47 seconds ago      Exited (0) 46 seconds ago                       test1
4b86652223ba        nginx               "nginx -g 'daemon of…"   3 minutes ago       Exited (0) 2 minutes ago                        serene_hamilton
611d4e932f83        centos              "/bin/bash"              4 minutes ago       Exited (0) 4 minutes ago                        reverent_curie
5a7b851453cc        centos              "/bin/bash"              5 minutes ago       Exited (0) 5 minutes ago                        epic_haibt
7b4076d18618        centos              "/bin/bash"              12 minutes ago      Exited (0) 6 minutes ago                        upbeat_roentgen
Placeholder Description
.ID コンテナID
.Image イメージID
.Command 実行コマンド
.CreateAt コンテナが作成された時間
.RunningFor コンテナの稼働時間
.Ports 公開ポート
.Status コンテナの状態
.Size コンテナのディスクサイズ
.Names コンテナ名
.Mounts ボリュームマウント
.Networks ネットワーク名

実行例:コマンドの出力形式の指定

docker@LesPaul:~$ docker container ls -a --format "{{.Names}}: {{.Status}}"
test1: Exited (0) 2 minutes ago

実行例:コマンドを表形式にする

docker@LesPaul:~$ docker container ls -a --format "table {{.Names}}\t{{.Status}}\t{{.Mounts}}"
NAMES               STATUS                        MOUNTS
test1               Exited (0) 2 minutes ago      

docker container stats(コンテナの稼働確認)

$ docker container stats [コンテナ識別子]

実行例:コンテナ稼働確認

docker@LesPaul:~$ docker container stats webserver
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
43e7fd9aabb6        webserver           0.00%               0B / 0B             0.00%               0B / 0B             0B / 0B             0
Options Description
CONTAINER ID コンテナ識別子
NAME コンテナ名
CPU % CPU使用率
MEM USAGE/LIMIT メモリ使用量/コンテナで使用できるメモリ制限
MEM % メモリ使用率
NET I/O ネットワークI/O
BLOCK I/O ブロックI/O
PIDS PID(Windowsコンテナ除く)

実行例:プロセス確認

docker@LesPaul:~$ docker container start 43e7fd9aabb6
43e7fd9aabb6
docker@LesPaul:~$ docker container top webserver
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                15522               15499               0                   22:33               ?                   00:00:00            nginx: master process nginx -g daemon off;
systemd+            15576               15522               0                   22:33               ?                   00:00:00            nginx: worker process

docker container start(コンテナの起動)

$ docker container start[オプション] コンテナ識別子 [コンテナ識別子]
Options Description
--attach,-a 標準出力/標準エラー出力を開く
--intaractive,-i コンテナの標準入力を開く

例:Dockerコンテナ開始

$ docker container start 

docker container stop(コンテナの停止)

$ docker container stop [オプション] コンテナ識別子 [コンテナ識別子]
Options Description
--time,-t コンテナの停止時間を指定する(デフォルト10秒)

例:コンテナ停止(3秒後停止)

$ docker container stop -t 3 43e7fd9aabb6

docker container restart(コンテナの再起動)

$ docker container restart [オプション] コンテナ識別子 [コンテナ識別子]
Options Description
--time,-t コンテナの再起動時間を指定する(デフォルト10秒)

例:コンテナ再起動(3秒後再起動)

$ docker container restart -t 3 webserver

docker container rm(コンテナの削除)

docker container rm [オプション] コンテナ識別子 [コンテナ識別子]
Options Description
--force,-f 起動中のコンテナを強制的に削除する
--volumes,-v 割り当てたボリュームを削除する

例:コンテナ削除

$ docker container rm 43e7fd9aabb6

実行例:停止中のコンテナ削除

docker@LesPaul:~$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS                NAMES
895e28d7f4da        centos              "/bin/cal"               16 minutes ago      Exited (0) 16 minutes ago                             test1
43e7fd9aabb6        nginx               "nginx -g 'daemon of…"   12 days ago         Up 9 minutes                     0.0.0.0:80->80/tcp   webserver
docker@LesPaul:~$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
895e28d7f4dab18bd61d3989b460e5a426b449fe283e10579a6695c42b74ac7c
~中略~

Total reclaimed space: 215B
docker@LesPaul:~$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
43e7fd9aabb6        nginx               "nginx -g 'daemon of…"   12 days ago         Up 11 minutes       0.0.0.0:80->80/tcp   webserver

docker container pause/docker container unpause(コンテナの中断/再開)

$ docker container pause コンテナ識別子

実行例:コンテナ中断->再開

docker@LesPaul:~$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
43e7fd9aabb6        nginx               "nginx -g 'daemon of…"   12 days ago         Up 11 minutes       0.0.0.0:80->80/tcp   webserver
docker@LesPaul:~$ 
docker@LesPaul:~$ 
docker@LesPaul:~$ docker container pause webserver
webserver
docker@LesPaul:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES
43e7fd9aabb6        nginx               "nginx -g 'daemon of…"   12 days ago         Up 14 minutes (Paused)   0.0.0.0:80->80/tcp   webserver
docker@LesPaul:~$ docker container unpause webserver
webserver
docker@LesPaul:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
43e7fd9aabb6        nginx               "nginx -g 'daemon of…"   12 days ago         Up 15 minutes       0.0.0.0:80->80/tcp   webserver

参考資料

https://docs.docker.com/engine/reference/commandline/container_run/
https://docs.docker.com/engine/reference/commandline/container_ls/
https://docs.docker.com/engine/reference/commandline/container_stats/
https://docs.docker.com/engine/reference/commandline/container_start/
https://docs.docker.com/engine/reference/commandline/container_stop/
https://docs.docker.com/engine/reference/commandline/container_restart/
https://docs.docker.com/engine/reference/commandline/container_rm/
https://docs.docker.com/engine/reference/commandline/container_pause/
https://docs.docker.com/engine/reference/commandline/container_unpause/

スポンサーリンク