Dockerfileについて
今回は、Dockerfileを使ってイメージをビルドする方法を確認していきます。
Dockerfileとは、Dockerイメージをビルドする指示を記載したプレーンテキストファイルです。開発環境におけるMakefileのように、Dockerで定義されている書式に従って記述します。
ファイルには、ベースとするイメージの取得やコンテナ内部で処理を行うコマンド等を記載していきます。
Dockerfileを使用するメリットとして、以下が挙げられます。
・ファイルを配布することで同一の環境を複製できる。常に同じ構成で環境構築することができる。
・ファイルの記述を読むことで、アプリケーション構成や構築手順などの情報を確認することができる。
・ビルドコマンド1つでコンテナが生成できるため、構築作業の省力化や作業ミスの低減にも役立つ。
Dockerfileの作成とビルド
それでは早速Dockerfileを作成していきます。
まず任意の場所(今回はユーザーディレクトリ直下に「docker」ディレクトリを用意しました)に、「Dockerfile_httpd_build」という名前でファイルを作成します。
$ touch Dockerfile_httpd_build
そして、以下の様にファイルを編集してみます。
#-------------------------------------------------------- # ベースイメージを指定 #-------------------------------------------------------- FROM httpd:latest #-------------------------------------------------------- # イメージの作成者 #-------------------------------------------------------- MAINTAINER PublicRelations #-------------------------------------------------------- # 環境変数 #-------------------------------------------------------- ENV DIRPATH /usr/local/apache2 #-------------------------------------------------------- # ワークディレクトリ指定 #-------------------------------------------------------- WORKDIR $DIRPATH/htdocs #-------------------------------------------------------- # コマンド実行 #-------------------------------------------------------- RUN echo "Hello Dockerfile!" > index.html #-------------------------------------------------------- # 特定のネットワーク・ポートをコンテナ実行時にリッスンさせる #-------------------------------------------------------- EXPOSE 80
FROM:ベースとなるイメージを指定します。一番始めに書かれていなくてはなりません。
MAINTAINER:生成するイメージの製作者(Author)を指定します。
ENV:環境変数を「<変数名> <値>」で指定します。
WORKDIR:作業ディレクトリを指定します。
RUN:シェル形式のコマンドを実行します。
EXPOSE:コンテナが接続用にリッスンするポートを指定します。
ファイルを保存したら、以下のコマンドでイメージのビルドを実行します。
$ docker build -f ./Dockerfile_httpd_build -t httpd_build .
・「-f」でDockerfileを指定、「-t」で生成するイメージ名を指定します。
・最後の「ピリオド」はDockerfileのあるディレクトリを指定しますが、今回はカレントに置いてあるので「ピリオド」のみとしています。
実行結果は、以下の様に出力されます。ファイルに記載した順に処理されていることがわかります。
Sending build context to Docker daemon 13.82kB Step 1/6 : FROM httpd:latest ---> 2a51bb06dc8b Step 2/6 : MAINTAINER PublicRelations ---> Running in 558f1e018691 Removing intermediate container 558f1e018691 ---> 93d34029e7e7 Step 3/6 : ENV DIRPATH /usr/local/apache2 ---> Running in 17542615cdac Removing intermediate container 17542615cdac ---> 37eef9269e57 Step 4/6 : WORKDIR $DIRPATH/htdocs Removing intermediate container 84eaaa186787 ---> 03c5a1c592e6 Step 5/6 : RUN echo "Hello Dockerfile!" > index.html ---> Running in 17558656d5c9 Removing intermediate container 17558656d5c9 ---> 78182fc7a199 Step 6/6 : EXPOSE 80 ---> Running in fb5f11bf5232 Removing intermediate container fb5f11bf5232 ---> 964f919a9e9a Successfully built 964f919a9e9a Successfully tagged httpd_build:latest
ビルドが完了したら、imagesコマンドで生成されたイメージを確認してみます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd_build latest 8671262c1b7a About a minute ago 132MB
httpd latest 2a51bb06dc8b 2 months ago 132MB
イメージを起動し、Webページにアクセスしてみましょう。
$ docker run -d -p 8080:80 httpd_build
Dockerfile上で指定したRUNの内容「Hello Dockerfile!」が表示されているでしょうか。
前回行った作業である「コンテナ内のファイルを編集し、イメージをcommitする」ことと同等のことが「Dockerfileに構築手順をコーディングし、ビルドする」という手順で実行することができました。
今回はDockerfileからコンテナイメージをビルドするところまででした。
次回は引き続きDockerfileを使って、ホストマシン上のボリュームをコンテナ内にマウントする方法を確認していきます。
株式会社 パブリックリレーションズ 〒064-0807 北海道札幌市中央区南7条西1丁目13番地 弘安ビル5階 011-520-1800 011-520-1802