概要
ここでは、コンテナ構築の流れを示す。
アプリのコンテナを作成するためには、イメージ名を指定して、Docker CLI
からコンテナを起動する必要がある。
-
Dockerfile
を作成する - Dockerイメージを構築する
- Dockerコンテナを起動する
Dockerコンテナの構築
Dockerfile
の作成
まずは、イメージを構築するためのDockerfile
を作成する。
プロジェクトのルートディレクトリに移動し、Dockerfile
を用意する。
# プロジェクトのルートディレクトリに移動する。
cd project-root
# Dockerfileを作成する。
touch Dockerfile
Dockerfile
に以下の内容を追加する。
# syntax=docker/dockerfile:1
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Dockerイメージの構築
docker build
コマンドでDockerfile
を使用し、新たなイメージを構築する。
$ docker build -t getting-started .
コマンド詳細
-
-t
フラグ- イメージにタグを付与する。
-
.
- カレントディレクトリから
Dockerfile
を探すように指示する。
- カレントディレクトリから
コンテナの起動
先ほど作成したイメージ名を指定し、docker run
コマンドでコンテナを起動する。
$ docker run -dp 127.0.0.1:3000:3000 getting-started
コマンド詳細
-
-p
フラグについて- ホストとコンテナ間でポートの関連付けを作成する。
-
HOST:CONTAINER
と記載する。 -
127.0.0.1:3000:3000
では、コンテナのポート3000をlocalhostの3000に公開する。
Dockerfile
について
Dockerfile リファレンス — Docker-docs-ja 24.0 ドキュメント
Dockerは、Dockerfile
から自動的に命令を読み上げ、イメージを生成する。
docker build
コマンドを実行すると、順次コマンドライン命令を自動化した処理を行い、ビルド結果となるイメージが得られる。
docker build
コマンドは、Dockerfile
とコンテキスト
によって、イメージを構築する。
ここでのコンテキスト
とは、Docker CLI
で指定したPATH
またはURL
にあるファイルの一式のこと。
# 以下の場合、"."(カレントディレクトリ)を構築コンテキストとして利用する。
$ docker build .
dockerd
による、イメージ構築の流れ
- コンテキストの全体を
dockerd
(Dockerデーモン)に送信する
コンテキスト・ディレクトリに.dockerignore
ファイルを用意することで、不要なファイルやディレクトリを除外することができる。 -
Dockerfile
内に書かれている命令を実行する前に、事前にDockerfile
を検証する。
構文が間違っている場合には、エラーを返す。 -
Dockerfile
内の命令を実行する。
1行ずつ命令を実行し、必要な場合にはビルドイメージ内にその処理結果をコミットし、最後に新しいイメージのIDを出力する。
dockerd
は、送信されたコンテキストの内容は自動的に除去する。
イメージの構築は Docker デーモンが実行する。
ポイント
-
Dockerfile
内の各命令は、個別に実行される
前の行でディレクトリの移動をしたとしても、次の行ではその影響を受けない。 - Dockerは可能な限り構築キャッシュを利用する
構築キャッシュとは、デフォルトでは、構築するマシン上で以前に構築された結果に基づく
Dockerfile
の書式
# コメント
命令 引数
命令は、慣例的に大文字を用いる。(引数との区別のため)
Dockerは、Dockerfile
内の命令を記述順に実行する。ただし、1行目はFROM
から始めなくてはならない。
FROM
命令の引数は、構築時の元となる親イメージを指定する。
# nodeを親イメージとして指定する。
FROM node:18-alpine