Chapter03 Docker File

はじめに

ここではDockerファイルの基本的な内容と記述方法をまとめます。Dockerでは、インフラ構成=コンテナの構成をDockerインストラクションに従って、Dockerファイルに記述することで、イメージを生成し、コンテナを構築します。Dockerファイルのベストプラクティスarrow-up-rightはこちら。

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 updateapt-get install nginxapt-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_hostadd_dirに保存されていることがわかります。

ADDコマンドと似たコマンドでCOPYコマンドがありますが、この例のようにコピーするだけの場合は、COPYコマンドを利用します。

以上でこのチャプターは終わりです。不要なイメージとコンテナを削除して次のチャプターに移動しましょう。

Last updated