Dockerでアプリを立ち上げる際に必ず用意するのが、Dockerfileです。
今回は基本的な書き方、これだけでも押さえておきたい!点に絞って解説します。
Dockerfileとは?
Dockerfileは、Dockerイメージをビルドするための設定ファイルのことです。
主に下記のようなことを記述します。
- どのベースイメージを使用するか
- どのソフトウェアをインストールするか
- 起動時のコマンドは何か
基本構造
FROM
最初に記述するのがFROM
です。
ベースとなるDockerイメージを指定します。
FROM node:20
↑node.jsのversion20をベースイメージとして用いる例です。
ベースイメージは、基本的にDocker Hub から探してきます。
ちなみに、nodeのイメージはこちらになります。
WORKDIR
作業ディレクトリを指定する命令です。
後続のコマンドは、このディレクトリに対して(cdした状態で)実行されます。
WORKDIR /app
↑/app
ディレクトリを作業ディレクトリに設定しています。
COPY
ホスト(自分のPC)からコンテナ内にファイルやディレクトリをコピーするために使用します。
COPY package.json ./
ホストにあるpackage.json
ファイルを、コンテナ内の作業ディレクトリにコピーしています。
COPY . /var/www/html/
こちらは、ホストの作業ディレクトリ全てを、コンテナの/var/www/htmlディレクトリ配下にコピーしています。
RUN
コンテナ内でコマンドを実行するために使用します。ソフトウェアのインストールやビルドに使用されます。
RUN npm install
この例では、Node.jsのパッケージをインストールしています。
RUN apt-get update && apt-get install -y \
curl \
git
パッケージリストを更新した後、curlとgitをインストールしています。
&&で複数コマンドをつなげ、バックスラッシュで改行して書くことができます。
CMD
コンテナが起動された際に実行されるデフォルトのコマンドを指定します。CMD
は1つのDockerfile内で一度だけ使用します。
CMD ["npm", "start"]
この例では、npm start
コマンドが実行され、アプリケーションが起動されます。
ベストプラクティス
Dockerfileを記述する際のベストプラクティスを紹介します。
公式ドキュメントから、重要なものを解説しています。
小さなイメージを使う
軽量なベースイメージを選択することで、コンテナのサイズを最小限に抑えることができます。alpine
ベースのイメージは非常に軽量で、Docker公式も推奨しています。
FROM node:20-alpine
レイヤの数を減らす
Dockerでは、各命令がレイヤとして積み重ねられていきます。レイヤが増えると、イメージのサイズが大きくなり、ビルド時間が長くなる可能性があります。
# レイヤが増える例
RUN apt-get update
RUN apt-get install -y curl
# レイヤを最小化した例
RUN apt-get update && apt-get install -y curl
不要なファイルを含めない
.dockerignore
ファイルを使用して、ビルドに不要なファイルやディレクトリを除外しましょう。これにより、イメージサイズが増えるのを防ぎます。
node_modules
Dockerfile
.dockerignore
まとめ
Dockerfileは、コンテナ化されたアプリケーションを構築するための強力なツールです。今回取り上げた基本的なコマンドを理解できれば、効率的でスケーラブルな環境を構築できます。Dockerfileを活用して、是非あなたのプロジェクトに役立ててください!