Dockerfileの書き方

Docker

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を活用して、是非あなたのプロジェクトに役立ててください!