Dockerの仕組み
Dockerはコンテナ仮想イメージであり、独特の哲学があるそうです。
コンテナ内の変更はCommitしないと反映されない
dockerイメージに入り、ファイルを作ります。
[bargee@barge home]$ docker run -it centos /bin/bash [root@ea7c7e9518fe /]# cd ~ [root@ea7c7e9518fe ~]# ls anaconda-ks.cfg [root@ea7c7e9518fe ~]# touch test.txt [root@ea7c7e9518fe ~]# ls anaconda-ks.cfg test.txt
一度Dockerイメージから出て、もう一度入り直します。
[root@ea7c7e9518fe ~]# exit exit [bargee@barge home]$ docker run -it centos /bin/bash [root@2994b60bb548 /]# cd ~ [root@2994b60bb548 ~]# ls anaconda-ks.cfg [root@2994b60bb548 ~]#
作成したファイルがなくなっている。。。
これが、Dockerの挙動、「不変のインフラ」なようです。現在のバージョンに変更を加えたらcommitせねば保存されず、どう変更されたか管理される仕組みになっています。
[bargee@barge home]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2994b60bb548 centos "/bin/bash" 3 minutes ago Exited (0) 5 seconds ago evil_yonath ea7c7e9518fe centos "/bin/bash" 6 minutes ago Exited (0) 3 minutes ago focused_noether 43d42fe26085 centos "/bin/bash" About an hour ago Exited (0) About an hour ago distracted_yalow
ということで、もう一度ファイルを作って、commitします。commitするときには、CONTAINER ID を指定します。
[bargee@barge home]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1dfc85771f1 centos "/bin/bash" 36 seconds ago Exited (0) 12 seconds ago hopeful_lalande 2994b60bb548 centos "/bin/bash" 6 minutes ago Exited (0) 3 minutes ago evil_yonath ea7c7e9518fe centos "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago focused_noether 43d42fe26085 centos "/bin/bash" About an hour ago Exited (0) About an hour ago distracted_yalow [bargee@barge home]$ docker commit d1dfc85771f1 centos:test_20161031 sha256:3e6feca4a9f623bd051f9668fd9088bb55a9687a9488068b1182fbea569ec0fc [bargee@barge home]$ [bargee@barge home]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1dfc85771f1 centos "/bin/bash" About a minute ago Exited (0) 56 seconds ago hopeful_lalande 2994b60bb548 centos "/bin/bash" 7 minutes ago Exited (0) 4 minutes ago evil_yonath ea7c7e9518fe centos "/bin/bash" 10 minutes ago Exited (0) 7 minutes ago focused_noether 43d42fe26085 centos "/bin/bash" About an hour ago Exited (0) About an hour ago distracted_yalow [bargee@barge home]$ docker run -it centos:test_20161031 /bin/bash [root@5b571f829f61 /]# ls ~ anaconda-ks.cfg test.txt
commitしたバージョンにはファイルがちゃんと保存されていることがわかります。
[bargee@barge home]$ docker run -it centos /bin/bash [root@62510b166471 /]# cd ~ [root@62510b166471 ~]# ls anaconda-ks.cfg
もとのイメージにはファイルが存在しません。
まとめ
なるほどねぇ。