稼働しているコンテナの操作
第二弾。 今回は稼働しているコンテナを操作する方法について。
- 事前準備 - コンテナを起動しておく
- 稼働中のコンテナに接続
- 稼働中のコンテナでコマンド(プロセス)を実行
- 稼働中のコンテナのプロセス確認
- 稼働中のコンテナのポート転送確認
- コンテナの名前変更
- コンテナ内のファイルをホストにコピー
- コンテナ操作の差分確認
事前準備 - コンテナを起動しておく
適当に起動しておく。(今回は単純にbashを起動しておく。)
$ sudo docker container run -dit --name "ponteru-sample" centos /bin/bash f317ce1511fd24548e75dc9780bb0c7718005762d82ea169bc8cc98fb8304f1d $ sudo docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f317ce1511fd centos "/bin/bash" 3 seconds ago Up 3 seconds ponteru-sample
稼働中のコンテナに接続
docker container attach
をすればOK。
$ sudo docker container attach ponteru-sample [root@f317ce1511fd /]#
Ctrl-C
で抜けるとコンテナごと終了してしまうため、今回は Ctrl-P / Ctrl-Q
で抜ける。
稼働中のコンテナでコマンド(プロセス)を実行
docker container exec
で実行可能。
$ sudo docker container exec -it ponteru-sample /bin/echo "Hello, World" Hello, World
稼働中のコンテナのプロセス確認
docker container top
すればOK。
$ sudo docker container top ponteru-sample UID PID PPID C STIME TTY TIME CMD root 15570 15551 0 14:07 pts/0 00:00:00 /bin/bash
稼働中のコンテナのポート転送確認
コンテナ内で実行されているプロセスが転送されているポートを確認する際に利用。
# nginxのコンテナを起動 $ sudo docker container run -d --name "ponteru-nginx" -p 8080:80 nginx $ sudo docker container port ponteru-nginx 80/tcp -> 0.0.0.0:8080
コンテナの名前変更
docker container rename
で名前変更可能。
$ sudo docker container rename ponteru-sample ponteru # ponteru-sample -> ponteru $ sudo docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f317ce1511fd centos "/bin/bash" 9 minutes ago Up 9 minutes ponteru
コンテナ内のファイルをホストにコピー
docker container cp
でコンテナのファイルをホスト側にコピー可能。
$ sudo docker container cp ponteru-nginx:/etc/nginx/nginx.conf /tmp/nginx.conf $ ls -l /tmp/nginx.conf -rw-r--r-- 1 root root 643 Apr 16 22:08 /tmp/nginx.conf
ちなみにホストのファイルをコンテナにコピーすることも可能。
$ sudo docker container cp ./test.txt ponteru-nginx:/tmp/test.txt
コンテナ操作の差分確認
docker container diff
で、コンテナ内で何かしらの操作(ファイル作ったり、ユーザ追加したり)をした場合の差分を確認可能。
# 適当にファイルを作成 $ sudo docker container exec ponteru touch /tmp/test.txt $ sudo docker container exec ponteru ls -l /tmp/test.txt -rw-r--r-- 1 root root 0 May 2 05:26 /tmp/test.txt # 差分確認 $ sudo docker container diff ponteru C /run D /run/secrets C /tmp A /tmp/test.txt
各ディレクトリやファイルの前に記述されている「A」、「C」、「D」は変更区分であり、
- A … 追加
- C … 更新
- D … 削除
のこと。