Docker コンテナを使って技術検証をしているときに、色々と試行錯誤している場面では、ある手順から作業をやり直したくなることがある。
すべての作業がすぐに終わるなら特に問題にはならないものの、時間がかかる場合には初めからやり直したときに大きなロスが生じる。
そんなときは、動作中の Docker コンテナから Docker イメージを作ることで時間の節約ができる。
具体的には docker commit
サブコマンドを使うことで実現できる。
今回、使った環境は次のとおり。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H15 $ docker version Client: Docker Engine - Community Cloud integration: 1.0.2 Version: 19.03.13 API version: 1.40 Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 16:58:31 2020 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.13 API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:07:04 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.3.7 GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
もくじ
作業中を模した Docker コンテナを用意する
とりあえず、何でも構わないのでコンテナを立ち上げておく。
$ docker container run \
--rm \
-it ubuntu:18.04 \
bash
立ち上げた以下のコンテナを、何らかの検証で作業中のコンテナに見立てる。
root@f499b0f5b72b:/#
たとえば、次のようにファイルを書き出しておこう。 このファイルがあることで、作業が途中まで完了していることの目印とする。
root@f499b0f5b72b:/# echo "Hello, World" > /var/tmp/greet.txt
動作中のコンテナからイメージを作る
Docker ホスト側で、お目当てのコンテナが動作していることを確認する。
別にコンテナが終了していても構わないんだけど、今回は --rm
オプションをつけているのでコンテナは終了すると消えてしまう。
$ docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f499b0f5b72b ubuntu:18.04 "bash" 31 seconds ago Up 29 seconds eloquent_keller
それでは、docker commit
コマンドを使って、コンテナからイメージを作ろう。
最初の引数にお目当てとなるコンテナの ID ないし名前を指定して、次の引数にコンテナを元ネタにしたイメージの名前を指定する。
$ docker commit f499b0f5b72b example sha256:0bbb09b0e9a30bfd0ba7a342eddb7bbcc6380b0542a1379c7c8e54587e24392a
イメージの一覧を確認すると、ちゃんと指定した名前でイメージができている。
$ docker image list | grep example example latest 0bbb09b0e9a3 14 seconds ago 64.2MB
作ったイメージからコンテナを起動する
上記のイメージを使ってコンテナを立ち上げてみよう。
$ docker container run \ --rm \ -it example \ bash
イメージの元ネタになったコンテナにあったはずのファイルを確認すると、次のようにちゃんとある。 つまり、作業の途中からやり直すことができている。
root@a05ba64a868b:/# cat /var/tmp/greet.txt
Hello, World
めでたしめでたし。
参考
- 作者:もみじあめ
- 発売日: 2020/02/29
- メディア: Kindle版