技術

【Docker初心者必見!】Dockerfileの作り方と使い方

広告

Dockerfileとは、Dockerイメージを作成するためのテキストファイルです。Dockerfileにはコンテナのデプロイに必要な手順やコマンドが記述されています。

当記事はDockerfileを初めて使うユーザー向けにDockerfileの作り方と使い方を解説します。

Dockerのインストール方法(mac版)は別記事で解説しているので、こちらをご覧ください。
https://www.engineer-gari.tech/mac-docker-install/

Dockerfileの例

以下でDockerfileの例を示します。以下を実行することで、コンテナ内にpython3,pip3をインストールし、ローカル環境で開発しているtest.pyを実行できます。

Dockerfileのコマンド

Dockerifileはコマンド 引数の形式で記述します。以下が主なコマンドです。

コマンド説明
FROMベースとなるDockerイメージを指定します。Dockerfileで必須です。FROM ubuntu:22.04
RUNdocker build時に指定したコマンドを実行します。RUN apt-get update && apt-get install -y python3
COPYローカルのファイルやディレクトリをコンテナ内にコピーします。COPY test.py /app/test.py
ADDCOPY に似ていますが、ローカルにないファイル(URLなど)からのダウンロードやアーカイブ展開ができます。
セキュリティ面を考えるとCOPYがおすすめです。
ADD https://example.com/file.tar.gz /app/
CMDコンテナ起動時に実行されるデフォルトのコマンドを指定します。
docker build時には実行されません。
Dockerfile内で1つのみ記述可能です(複数ある場合は最後のみ)。
CMD ["python3", "app.py"]
ENTRYPOINT引数を上書きせず、常に実行されるコマンドを指定します。
CMDと併用した場合はENTRYPOINTが先に実行され、CMDは引数として利用される。
ENTRYPOINT ["python3"]
WORKDIRコンテナ内の作業ディレクトリを指定します。WORKDIR /app
ENV環境変数を設定します。ENV APP_ENV production
EXPOSEコンテナがリッスンするネットワークポートを指定します(公開には-pオプションが必要)。EXPOSE 8080
VOLUMEデータを永続化するためのボリュームを指定します。VOLUME /data
ARGビルド時に使用する引数を定義します。docker buildで値を渡せます。ARG APP_VERSION=1.0

Dockerfileを利用することのメリット

Dockerfileの利用により以下を実現可能です。

イメージ作成の自動化

Dockerfileを使用することで、コンテナイメージの作成プロセスを自動化できます。Dockerfileを作成し、docker buildコマンドを実行すればDockerイメージが作成され、利用が可能になります。

管理が容易

テキストファイルであるため、作成や編集、バージョン管理が簡単にできます。例として利用したいOSやアプリのDockerイメージがEOSを迎えても、バージョンアップ時は新しいバージョンに数字を入れ替えるのみでDockerイメージの編集が完了です。

またlatestを指定しておけば、いつでも最新のDockerイメージを利用できます。

再現性が高い

同じDockerfileを使用することで、Dockerが利用できる環境であれば、異なるデバイス、OSでもでも同一のコンテナを利用可能です。

例としてWindows環境で実行したいアプリをLinux環境で開発するとします。それぞれでDockerが使えるのであればLinuxで開発したDockerfileを移動すれば同じアプリの実行、挙動が可能です。

Dockerfileを別環境で利用するパターン

Dockerfileは上記のメリットを活かし、以下2つのパターンで別環境での利用が想定されます。

Dockerfileを持って行き、docker build でイメージ化して使う

Dockerfileそのものを移動させて、移動先でイメージ化を行って利用するパターンです。

このパターンは移動させるのはDockerfileのみのため、テキストのみの小さいサイズのファイルを移動させるのみで済みます。
また移動先で、Dockerfileを修正して利用することも可能であり、柔軟性が高いです。

Dockerfileを作った環境でdocker build をし、docker save でイメージとして持ち運ぶ

もう一つのパターンはイメージファイルを持っていくパターンです。

先述したDockerfileを移動する方法に比べて、ファイルサイズが大きいことや移動先で開発ができないデメリットがあります。
しかし、ネットワーク環境などの要因でdocker buildが満足に行えない環境では有効です。また、イメージをそのまま利用してほしいケースなどでは優れたパターンといえます。

-技術
-