背景
前回の記事では
docker commit、docker export、docker saveの違いと使い分けを整理する際、
docker commitで生まれたイメージと「docker export⇒docker import」のコマンドで作成したイメージの違いはなんですか、の回答の中に、コンテナに追加したファイルは両方のイメージに存在しますって書いています。それに、注意事項も付いています。マウントしていない場合、ファイルは確かに存在しますが、一方、マウントする場合、結果はどうなるか、今回は質問回答の形でその話を続けます。
また、マウント(mount)について、詳しくはこの記事へ。
質問:
コンテナに追加したファイルは「docker commit」と「docker export ⇒ docker import」で生まれた新イメージに含まれていますか
回答:
場合によります。
マウント(mount)しているディレクトリに追加したファイルは新イメージに含まれていません、
マウント(mount)していないディレクトリに追加したファイルは新イメージに含まれています。
デモ:
①マウントしている・していないディレクトリにファイルを各自1個追加
[root@localhost home]# docker run --name nginx-1 \
> -v /home/demo/logs:/var/log/nginx -it nginx bash
root@815b232f2172:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
root@815b232f2172:/#
root@815b232f2172:/#
root@815b232f2172:/# echo "bind to commit" > /var/log/nginx/test1.txt //マウントしたディレクトリにファイルを1個追加
root@815b232f2172:/#
root@815b232f2172:/# ls -l /var/log/nginx
total 8
-rw-r--r--. 1 root root 0 Mar 6 07:13 access.log
-rw-r--r--. 1 root root 510 Mar 6 07:13 error.log
-rw-r--r--. 1 root root 15 Mar 6 07:16 test1.txt
root@815b232f2172:/#
root@815b232f2172:/# mkdir demo //マウントしてないディレクトリとファイルを1個追加
root@815b232f2172:/# echo "bind to cimmit again" > demo/test2.txt
root@815b232f2172:/# ls -l demo/test2.txt
-rw-r--r--. 1 root root 21 Mar 6 07:17 demo/test2.txt
②docker commitで新イメージを作成
⇒新イメージnginx-commit:1.1が生まれる。
root@815b232f2172:/#
root@815b232f2172:/# [root@localhost home]# //Ctrl + p + qでコンテナを出る
[root@localhost home]# docker commit -m="bind to commit" -a=tin nginx-1 nginx-commit:1.1
sha256:75e44e5400ea6e8955ce176e9473e4d835be181a86ff713bdab49a2af735ef22
②新イメージnginx-commit:1.1でコンテナを起動、ファイルの存在確認を行う
[root@localhost home]#
[root@localhost home]# docker images | grep nginx
nginx-commit 1.1 75e44e5400ea 10 seconds ago 142MB
nginx latest 904b8cb13b93 4 days ago 142MB
[root@localhost home]#
[root@localhost home]# docker run -it --name=nginx-12 nginx-commit:1.1 bash
root@c714bb59a4e2:/#
root@c714bb59a4e2:/# ls -l /var/log/nginx //追加したtest1.txtはなくなった
total 0
lrwxrwxrwx. 1 root root 11 Mar 1 18:43 access.log -> /dev/stdout
lrwxrwxrwx. 1 root root 11 Mar 1 18:43 error.log -> /dev/stderr
root@c714bb59a4e2:/#
root@c714bb59a4e2:/# ls -l demo //追加したtest2.txtは存在する
total 4
-rw-r--r--. 1 root root 21 Mar 6 07:17 test2.txt
root@c714bb59a4e2:/#
root@c714bb59a4e2:/#
③docker export⇒docker importで新イメージを作成
⇒新イメージnginx-export:2.1は作成した
[root@localhost home]# docker export nginx-1 > nginx-export.tar
[root@localhost home]# ls -l
合計 140984
-rw-r--r--. 1 root root 144359936 3月 6 16:49 nginx-export.tar
[root@localhost home]#
[root@localhost home]# docker import nginx-export.tar nginx-export:2.1
sha256:824b9c9aadc67c047deb2f2517cfc6280ec6bd4255c55dae52983c03b2b12a10
[root@localhost home]#
[root@localhost home]# docker images | grep nginx
nginx-export 2.1 824b9c9aadc6 13 seconds ago 140MB
nginx-commit 1.1 75e44e5400ea 29 minutes ago 142MB
nginx latest 904b8cb13b93 4 days ago 142MB
④新イメージnginx-export:2.1でコンテナを起動、ファイルの存在確認を行う
[root@localhost home]#
[root@localhost home]# docker run -it nginx-export:2.1 bash
root@72a6ad2c3f90:/#
root@72a6ad2c3f90:/# ls -l /var/log/nginx //追加したtest1.txtはなくなった
total 0
lrwxrwxrwx. 1 root root 11 Mar 1 18:43 access.log -> /dev/stdout
lrwxrwxrwx. 1 root root 11 Mar 1 18:43 error.log -> /dev/stderr
root@72a6ad2c3f90:/#
root@72a6ad2c3f90:/# ls -lR demo //追加したtest2.txtは存在する
demo:
total 4
-rw-r--r--. 1 root root 21 Mar 6 07:17 test2.txt
root@72a6ad2c3f90:/#
root@72a6ad2c3f90:/#
コメント欄