オリジナルイメージ(1)イメージの作成 Docker入門-9
イメージの作り方
イメージの作り方には2種類ある。
- コンテナから作成
コンテナから作成する場合はベースコンテナに修正を加え、新しいイメージとしてアウトプットする。簡単ではあるが、どこにどう手を加えたかの履歴が残らない為、一般にこの方法は利用されない。 - Dockerfileから作成
ベースイメージに修正手順(Dockerfile)と修正ファイルを添付して、新しいイメージとしてビルドする。Dockerfileを修正することにより、イメージの修正が可能。
イメージの作成にあたりDockerの流儀に従うこと。主に次の6点である。
(1) 1つのコンテナは1つの処理しかしない
1つのコンテナは1つの処理しかしない
DBとappは分ける。ただ1つの処理といってもApacheとPHPは連携して動作するので分けられない。
(2) 利用するポートを明確にする
このイメージがどのポートを経由して外部と接続するかを明確にする(後述のEXPOSE参照)。
(3) 永続化すべき場所を明確にする
利用者がファイルを置く場所(マウントポイント)を明確にしておく(後述のVOLUME参照)。
設定は環境変数で渡す
(4) 設定を受け取るときは環境変数で受け渡しを行う。
(5) ログは標準出力に出す
標準出力に出しておけば利用者はdocker logsコマンドで確認できるようになる。
(6) メインプログラムが終了してしまうとコンテナも終了する
メインプログラムは終了せずに動き続けないといけない(後述のCMDやENTRYPOINT参照)。Dockerfileからイメージを作る
ApacheのDocumentRootにindex.htmlをいれたイメージを作ってみる。(1)作業用ディレクトリを作り必要なファイルを準備する
$ mkdir work $ cd work $ cp ../index.html .
Dockerfileをつくる
$ cat Dockerfile FROM httpd COPY index.html /usr/local/apache2/htdocs/
ビルドする
$ docker build -t myimage01 . ↑ container はつけない! Sending build context to Docker daemon 3.072kB Step 1/2 : FROM httpd latest: Pulling from library/httpd Digest: sha256:b7907df5e39a98a087dec5e191e6624854844bc8d0202307428dd90b38c10140 Status: Downloaded newer image for httpd:latest ---> faed93b28859 Step 2/2 : COPY index.html /usr/local/apache2/htdocs/ ---> c4aaa7d4ecb4 Successfully built c4aaa7d4ecb4 Successfully tagged myimage01:latest
できたイメージを確認する
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE myimage01 latest c4aaa7d4ecb4 3 minutes ago 144MB
docker history で詳細情報を確認してみる
$ docker history myimage01 IMAGE CREATED CREATED BY SIZE COMMENT c4aaa7d4ecb4 37 minutes ago /bin/sh -c #(nop) COPY file:0d571419f6b9efc0… 62B
できたイメージを利用する
$ docker container run -dit --name myimage -p 8080:80 myimage01
動作確認出来たらコンテナとイメージを削除
$ docker container stop myimage $ docker container rm myimage $ docker image rm myimage01
次の記事