【Docker】第4回 Dockerfileを使ってイメージをビルドする


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階
メールでのお問い合わせはこちら

  • この記事をシェアする