【Docker】コンテナを更新して直接イメージを作成するDocker Commitを紹介

2023.01.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回のテーマ

明けましておめでとうございます、AWS事業本部コンサルティング部のこーへいです。

今回のテーマは「コンテナから直接イメージを作成するDocker Commitコマンドの紹介」です。

背景

Dockerイメージの作成方法はDockerfileを用意してビルドすることが一般的ですが、イメージから立ち上げたコンテナを直接編集してコンテナからイメージを作成する方法があることを知り、今回メモとして記事にまとめることにしました。

結論

$ docker commit {対象のコンテナID(コンテナ名)} {作成したいイメージ名}

イメージからコンテナを立ち上げて、上記コマンドを実行することでコンテナからイメージを作成することができます。

実際の流れを紹介

ローカルにイメージを用意する

今回自分はDocker Hubにて公開されているhttpdのDockerイメージを利用しました。

$ docker image pull httpd

上記コマンドを実行し、ローカルにDockerイメージを落とします。

コンテナを起動する

続けて、下記コマンドを実行しhttpdイメージからコンテナを起動します。

$ docker container run -d -p 8080:80 httpd

上記コマンド実行後に、http://localhost:8080にアクセスすると以下画面が表示されます。

今回はこのindex.htmlを更新します。

コンテナを更新する

下記コマンドを実行してコンテナIDを確認し、コンテナにログインしてみます。

$ docker container ps
$ docker container exec -it {対象のコンテナID} bash

以下のコマンドはコンテナ環境で実行し、index.htmlファイルを確認します。

※コンテナ内にて実行
$ cd htdocs
$ cat index.html 
<h1>It works!</h1>
$ vi index.html 
bash: vi: command not found

index.htmlファイルを修正したいですが、vimがインストールされていないため下記でインストールしましょう

※コンテナ内にて実行
$ apt-get update
$ apt-get install vim -y

改めてindex.htmlファイルを修正し、exitでコンテナからログアウトします。

※コンテナ内にて実行
$ vi index.html
$ cat index.html
<h1>It works! v1</h1>
$ exit

再びhttp://localhost:8080にアクセスすると以下の画面が表示されます。
※画面表示が変わらない場合はcmd(ctrl)+shift+rで更新すると変わると思います

上記を確認できたら、一旦コンテナを停止しましょう。

$ docker stop {対象のコンテナID}

コンテナからイメージを作成する

$ docker commit {対象のコンテナID} httpd:v1
$ docker images
$ docker container run -d -p 8080:80 httpd:v1

それではコンテナで直接index.htmlファイルを修正したので、この修正分を反映したイメージを作成してみましょう。

commitコマンドを実行し、イメージ一覧を表示すると新しくイメージが追加されているのが確認できます。

その後、実際にこのイメージが修正を反映できているか確かめるためコンテナを起動します。

三度http://localhost:8080にアクセスすると以下の画面が表示されます。

無事成功しました!

結果

Docker Commitを使用すれば簡単にコンテナからイメージを作成できますね。

今までDockerfileからしかイメージの作成方法を知らなかった方は、知っておくとどこかで役に立つかもしれません。