サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

コンテナに追加したファイルはdocker commitとdocker exportで生まれた新イメージに含まれていますか

tin
tin
2023-03-05 / 0 コメント / 5 いいね! / 153 読み / 1,096 文字

背景

前回の記事では
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:/# 
5
  • 5

コメント欄