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

ベースとなるイメージからコンテナを起動し、カスタマイズし、それをdocker commitコマンドで新イメージとして保存する流れ。

ベースがcentos:7イメージで、httpdを起動できる新イメージ作成の例。

CentOS7ベースのコンテナBash起動

docker run -it --name temp centos:7 bash

コンテナでhttpdインストール

yum install -y httpd

# index.html作成
echo 'Hello, myhttpd!' > /var/www/html/index.html

# コンテナ停止
exit

新イメージ作成

# tempコンテナから新イメージmyhttpdを作成
# --changeで設定変更
docker commit --change 'CMD ["httpd", "-D", "FOREGROUND"]' temp myhttpd

# tempコンテナ削除
docker rm temp

docker image ls myhttpd
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
myhttpd             latest              39db5bb3bc3e        About a minute ago   297MB

上記のCMDは、コンテナ起動時に実行するコマンドの指定。もともとのベースだったcentos:7では/bin/bashだったのを、httpdに変更。

新イメージからコンテナ起動

# コンテナ起動
docker run --rm -dit --name test --publish 80:80 myhttpd

# サーバ動作確認
curl localhost
Hello, myhttpd!

# コンテナ停止・削除
docker stop test

こんな感じで手動で新イメージを作ってもいいが、自動でビルドするならDockerfileを使う。