今回は前回の記事に続いて、Dockerfileについてまとめていきたいと思います。
前回の記事はこちら。
Dockerコンテナはレジストリから用途に合ったイメージを取得して作成する方法の他に、自分でカスタムしたイメージから作成…
Dockerfileの記述方法
Dockerfileの基本構造
Dockerfileはカスタムイメージを定義するファイルですが、基本的に以下のような構造になっています。
大文字のコマンド [パラメータ...]
例えば、前回の記事の例で実際に記述したFROM ubuntu:20.04
は、FROM
という大文字のコマンドにubuntu:20.04
というパラメータを指定しています。
このようなコマンドを記述していくことでカスタムイメージを作成していくのが基本となっています。
FROMでベースイメージを指定
まず最初に、前回の記事でも出てきたベースイメージを指定するFROM
コマンドから紹介していきます。FROM
コマンドは基本的にDockerfileの一番最初に記述されます。
FROM [ベースイメージ]
例
FROM ubuntu:20.04
RUNで任意のコマンドを実行
RUN
コマンドは任意のコマンドを実行します。FROM
コマンドによるベースイメージのダウンロード後にライブラリのインストールを実施する場合などに利用されます。
RUN [任意のコマンド]
例
RUN npm ci
RUN apt update
etc...
COPYでファイルをイメージに配置する
COPYコマンドはファイルをイメージに配置するためのコマンドです。
COPY [配置元] [配置先]
例
COPY ./hoge.txt /app/
COPY ./hoge/ /app/
上記の例のように、配置元はファイル単体でもフォルダでもどちらでも大丈夫です。
また、イメージに配置したファイルはdocker image build
を実施した時点の内容がイメージに保持されるため、その後にホストマシン上のファイルを編集してもイメージ上のファイルに影響はありません。
CMDでデフォルトコマンドを設定
CMD
コマンドはコンテナ実行時のデフォルトコマンドを設定するためのコマンドです。
そのため、Dockerfile内で1回だけ実行可能で、複数指定されていた場合は最後のもののみが実行されるようになっています。
CMD ["実行コマンド", "パラメータ1", "パラメータ2", ... ]
例
CMD ["ls", "-la"]
CMD ["echo", "Hello World!"]
ENVで環境変数を設定
ENV
コマンドはイメージの環境変数を設定することができます。
ENV KEY1=value1 KEY2=value2...
例
ENV HELLO="Hello World"
ENV DEV_HOST=localhost TEST_HOST=https://test/
環境変数はコンテナ起動後も有効であり、実行中に利用する設定値などを環境変数で定義する際などに使用します。
ARGでイメージビルド時に変数を利用する
ARG
コマンドはイメージビルド時に利用する変数を宣言することができます。
宣言した変数は、Dockerfile内で値の代入もできますし、宣言だけしておいてビルド時に値を代入することもできます。
# 宣言と代入をDockerfileで行う場合
ARG arg1=value1 arg2=value2...
# 宣言のみ行う場合
ARG arg3
docker image build
コマンドで変数に値を代入するときは以下のようなオプションをつけます。
例として、宣言のみ行ったarg3
という変数に対してvalue3
を代入しています。
docker image build --build-arg arg3=value3 [ビルドコンテキストのパス]
ARG
コマンドで定義された変数は環境変数と違い、ビルド時のみ有効な一時的なものになります。
WORKDIRでワーキングディレクトリを変更する
WORKDIR
コマンドはイメージビルド中の作業ディレクトリの変更を行うことができます。
ディレクトリが存在しない場合は新たにディレクトリを作成してから作業ディレクトリの変更を行います。RUN
コマンドでls
やtouch
コマンドなどを行うときに、WORKDIR
コマンドで指定した作業ディレクトリ上でコマンドが実行されることになります。
また、イメージビルド時に最後に指定されていた作業ディレクトリが、コンテナ起動時のデフォルトのディレクトリになります。
何も指定していない場合、作業ディレクトリはルートディレクトリ(’/’)になります。
WORKDIR ディレクトリパス
例
WORKDIR /app/
コメントアウト
Dockerfileの記述をコメントアウトする場合は、先頭に#
を付けます。
例
# RUN npm i react
まとめ
Dockerfileの具体的な内容についてまとめました。
こちらに記載されている以外にも多くのオプションが存在するので、必要であれば都度調べて適した設定を行うようにしましょう。
ここまで読んでいただきありがとうございました。
それでは、また。