うさぎ好きエンジニアの備忘録

うさぎたちに日々癒されているエンジニアが業務で直面したもの & 個人的な学習メモを残していきます。

稼働しているコンテナの操作

第二弾。 今回は稼働しているコンテナを操作する方法について。

事前準備 - コンテナを起動しておく

適当に起動しておく。(今回は単純に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 … 削除

のこと。