Chapter03 Docker File
はじめに
ここではDockerファイルの基本的な内容と記述方法をまとめます。Dockerでは、インフラ構成=コンテナの構成をDockerインストラクションに従って、Dockerファイルに記述することで、イメージを生成し、コンテナを構築します。Dockerファイルのベストプラクティスはこちら。
Dockerファイル
Dockerファイルは下記のDockerインストラクションによって記述されます。Dockerファイルはインフラ構成を記述するもので、ベースになるOSのイメージ、コンテナ内のコマンド、環境変数の設定などをDockerインストラクションなどを記述します。
インストラクション
説明
FROM
ベースイメージの指定
MAINTAINER
Dockerファイルのメンテナ
RUN
コマンド実行
CMD
コンテナの実行コマンド
LABEL
ラベルの設定
EXPOSE
ポートのエクスポート
ENV
環境変数の設定
ADD
ファイル/ディレクトリの追加。圧縮tarなどを解凍して追加したい場合。
COPY
ファイルのコピー
VOLUME
ボリュームのマウント
ENTRYPOINT
コンテナの実行コマンド
USER
ユーザの指定
WORKDIR
作業ディレクトリの
ONBUILD
ビルド完了後に実行されるコマンド
Dockerファイルの作成
それではDockerファイルを作成していきましょう。今回はデスクトップにdocker_contextというディレクトリを作成し、その中にDockerfileを作成します。
ベースとなるOSを記述するFROMは必須で先頭に記述します。今回はこれだけでイメージビルドして、Dockerイメージが作成されるか確認します。
buildコマンドでDockerfileがあるディレクトリを指定します。このDockerfileを格納している環境をビルドコンテキストなどと呼ばれます。
イメージが作成されているか確認すると、たしかに-tで指定したbuild_ubuntu:0.0というイメージが作成されている事がわかります。
Dockerイメージのレイヤー
さきほどubuntuのイメージを取得した際に、下記のように表示されたと思います。これは、ubuntuのイメージが4つのイメージレイヤーから構成されていることを意味します。
Dockerファイルからイメージを構成する場合、特定のDockerインストラクションごとにイメージレイヤーを構築しながらイメージを構成します。例えばRUNコマンドはイメージレイヤーを追加するコマンドです。下記のようにDockerイメージを書き換えて、
イメージビルドしてみるとわかります。-yはインストール中の選択肢でyesを選択するオプションです。Running inの部分でイメージレイヤーが構成されています。
ここでDockerファイルを作成する際に便利な知識としてキャッシュというものがあります。これは、再度同じコマンドを実行するのであれば、キャッシュを使うことで2回目以降は処理が速くおわります。curlというパッケージを更に追加して、
イメージビルドしてみます。Using cacheと表示され、先程インストールしていたものはキャッシュが利用されインストールがすぐに終了します。Dockerファイルを作成する際はこのキャッシュを使いながら作成することで効率化を図ることができます。
Dockerインストラクション
冒頭に紹介したDockerインストラクションの各役割について、基本的なコマンドについて、もう少し詳しくまとめていきます。
RUNコマンド
まずはRUNコマンドからです。RUNコマンドはDockerイメージを生成する際に実行したいコマンドがある場合に記述します。
下記のように記述すれば、Dockerイメージを生成する際に、apt-get update、apt-get install nginx、apt-get install curlが実行されます。
このままだと、Dockerファイルを構築する際に3つのイメージレイヤがRUNごとに生成されるので、まとめて記述します。
CMDコマンド
CMDコマンドはDockerイメージを生成したあとに、コンテナ内でコマンドを実行する場合に利用します。例えばubuntuのイメージのDockerファイルの最後には、コンテナに入るとbashが起動するように設定されています。
ENVコマンド
ENVコマンドは環境変数を設定するコマンドです。ENVコマンドで環境変数を指定しておけばコンテナを起動した際に環境変数を設定した状態で起動します。環境変数の指定の仕方はキーバリュー型で下記のように記述できます。
イメージビルドしてコンテナを起動してみます。コンテナの環境変数にDockerファイルで指定した環境変数が指定されていることがわかります。
WORKDIRコマンド
WORKDIRコマンドはコマンドを実行するディレクトリを指定するコマンドです。WORKDIRコマンドで作業ディレクトリを指定して、テキストファイルをDockerファイルから作ってみます。
イメージビルドしていきます。コンテナを起動するとWORKDIRコマンドで指定したディレクトリにアクセスすることになります。テキストファイルも問題なく生成されていることが確認できます。
ADDコマンド
ADDコマンドは、ビルドコンテキストにあるデータをイメージビルドの際に、tarなどの圧縮ファイルをコンテナで解凍して利用する場合になどに利用します。ここではビルドコンテキスト内に、data_in_hostというテキストファイルを保存して、これをコンテナに持っていきます。
Dockerファイルは下記のように記述します。ADD <ホストのファイルパス> <コンテナのファイルパス>です。この際に、コンテナに指定したディレクトリがない場合、作成してくれます。
イメージビルドしてコンテナの中で確認すると、data_in_hostがadd_dirに保存されていることがわかります。
ADDコマンドと似たコマンドでCOPYコマンドがありますが、この例のようにコピーするだけの場合は、COPYコマンドを利用します。
以上でこのチャプターは終わりです。不要なイメージとコンテナを削除して次のチャプターに移動しましょう。
Last updated