It’s now or never

IT系の技術ブログです。気になったこと、勉強したことを備忘録的にまとめて行きます。

独自のDockerImageを作成する

Dockerでは、自分で独自のimageを作成することが可能です。 独自のdocker imageを作成する方法は主に2つあります。

docker container commitコマンドを使う ② Dockerfileからビルドする

今回は、①の起動中のDockerコンテナから新しいイメージを作成する方法を試してみます。

※ 実行環境は、Docker for Macを使っています。 ※ 環境構築については過去記事のとおりです。

inon29.hateblo.jp

docker container commitコマンドを使う

ベースイメージの準備

今回はnginxのイメージを元に独自のイメージを作成してみます。 まずは、ベースとなるnginxのimageをDocker Hubからダウンロードします。

docker image pull nginx:latest
  • docker image pull <イメージ名>:<タグ名>
  • ※ タグ名をlatestにすると最新のバージョンを取得

イメージを確認してみます。

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              46102226f2fd        4 days ago          109 MB

取得したイメージからコンテナを起動します。

docker run -d -p 80:80 --name webserver nginx
  • docker run -d -p <ポート> --name <コンテナ名> <イメージ名>
  • -d: コンテナをバックグラウンドで起動する
  • -p: ポート指定、<ホストのポート>:<コンテナのポート>で割当を行う。 例: <80>:<12345> コンテナの12345ポートをホストの80ポートに割り当てる 
  • --name: コンテナに名前を割り当てる

localhostにアクセスして確認します。

スクリーンショット 2017-04-30 16.30.15.png

nginxが起動してデフォルトのindex.htmlファイルが表示されていることが確認できました。

コンテナの内容を編集

dockerのコンテナにアクセスしてこのindexファイルを編集してみます。

docker exec -it webserver /bin/bash
  • docker exec -it <コンテナ名> <コマンド>
  • -i: コマンド入力後にコンテナの標準入力をホストの標準入力と接続する
  • -t: コンテナ内の仮想端末と、Dockerホストの標準出力と接続する
cd /usr/share/nginx/html
echo "<h1>Welcome my nginx</h1>" > index.html

localhostに再度アクセスするとindex.htmlの内容が変更されていることが確認できます。

スクリーンショット 2017-04-30 17.03.54.png

docker imageを作成

index.htmlを編集した状態の今のコンテナからimageを作成します。

docker container commit webserver mynginx:latest
  • docker container commit <コンテナ名> <イメージ名>:<タグ>

イメージを確認してみます

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mynginx             latest              fa7dff65a5ba        5 seconds ago       109 MB
nginx               latest              46102226f2fd        4 days ago          109 MB

起動中のコンテナを削除して今作ったイメージからコンテナを起動します。

docker stop webserver
docker rm webserver
  • docker stop <コンテナ名>: コンテナを停止
  • docker rm <コンテナ名>: コンテナの削除
docker run -d -p 80:80 --name myserver mynginx

localhostにアクセスして確認します。

スクリーンショット 2017-04-30 17.03.54.png

先程に編集した状態でイメージが起動していることを確認できました。