おれさまラボ

実際に手を動かして理解を深めるブログ。

Dockerを試す - 仕組み編

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

もとのイメージにはファイルが存在しません。

まとめ

なるほどねぇ。