メモ。
使ったことなかったので使ってみる
試す
# そんなファイルは存在しない
$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 を作っておけば良さそう
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
は確かに便利そう。