LoginSignup
12

More than 5 years have passed since last update.

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

Posted at

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

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は確かに便利そう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12