docker
commit

docker commit コマンドを使ってみる

More than 1 year has passed since last update.

メモ。
使ったことなかったので使ってみる

docker commit

試す

# そんなファイルは存在しない
$docker run  ubuntu:14.04 /bin/bash /etc/hoge.sh
/bin/bash: /etc/hoge.sh: No such file or directory

# /bin/bash コマンドを実行する
$docker run -it ubuntu:14.04 /bin/bash

# init.sh では echo するだけのシェル・スクリプトを作成
$docker run -it ubuntu:14.04 /bin/bash
root@844d3317394f:/# vi /usr/local/init.sh
root@844d3317394f:/# chmod a+x /usr/local/init.sh
root@844d3317394f:/# ./usr/local/init.sh
test!!!
root@844d3317394f:/# exit
exit

# exit コマンドによって対象のイメージは実行が終わっているのでファイルが残っている訳ではない
$docker run ubuntu:14.04 /bin/bash /usr/local/init.sh
/bin/bash: /usr/local/init.sh: No such file or directory

# -n 2オプションを付与して直近で実行した2つのコンテナを表示。した方が終了ステータスコード0で終わっており、実際に作業をしたコンテナ
$docker ps -a -n=2
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
1160cbb03c21        ubuntu:14.04        "/bin/bash /etc/ho..."   18 seconds ago      Exited (127) 17 seconds ago                       sleepy_bose
844d3317394f        ubuntu:14.04        "/bin/bash"              2 minutes ago       Exited (0) 57 seconds ago                         relaxed_spence

# 該当操作のイメージを作成
$docker commit 844d3317394f custom-ubuntu
sha256:2c21dcdbba917c735ad261aa46d0c14d8b79c8a62211774d2a8f8028c970e2a8

# イメージの作成を確認
$docker images |grep custom
custom-ubuntu                                                      latest              2c21dcdbba91        12 seconds ago      188MB

# 実行してみる
$docker run custom-ubuntu /bin/bash /usr/local/init.sh
test!!!

出来た。
ただし、これだとどのような操作をしたか分からないというのが厳しい。
なのでやはりというか Dockerfile に書き起こしたほうがベターな気がする。

と以下のような記事が

効率的に安全な Dockerfile を作るには

なるほど。

Dockerfile でやってみる

今回の場合だと、以下のようなDockerfile を作っておけば良さそう

FROM ubuntu:14.04

# ファイルをコピー
COPY script/init.sh /usr/local/init.sh
$tree .
.
├── Dockerfile
└── script
    └── init.sh

1 directory, 2 files


# カレントディレクトリの Dockerfile をビルド
$docker build -t toshihirock/committest .
Sending build context to Docker daemon  3.584kB
Step 1/2 : FROM ubuntu:14.04
 ---> 2ff3b426bbaa
Step 2/2 : COPY script/init.sh /usr/local/init.sh
 ---> 6fe4407e494d
Removing intermediate container ee3df85437e0
Successfully built 6fe4407e494d
Successfully tagged toshihirock/committest:latest

# 確認
$docker images|grep commit
toshihirock/committest                                             latest              6fe4407e494d        58 seconds ago      188MB

# 実行
$docker run toshihirock/committest /bin/bash /usr/local/init.sh
test!!!

OK.
これをGitリポジトリにコミットすればCIも出来るし、可視化されていて良い。
ただ、さくっと色々試したい時とかにはdocker commitは確かに便利そう。