1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerfile のインストラクション

Last updated at Posted at 2024-05-07

はじめに

この記事では、Dockerfile の各インストラクションについて記載します。
(随時、追記していきます。)

前提

関連する用語を整理します。

インストラクション

Dockerfile に記載する FROM [値]RUN [値] などのことです。
Dockerfile には以下のインストラクションがあります。

Dockerfile

Docker イメージを作成するためのテキストファイル(Docker イメージの設計書)です。
Dcokerfile 内のインストラクション(設定)を読み込む(ビルドする)ことで Docker イメージが作成されます。

イメージ

コンテナを作成するためのテンプレートファイルです。
イメージを実行することで Docker コンテナが作成されます。

イメージは、複数のレイヤ(層)によって構成されています。1つのレイヤにつきOSやミドルウェアが1つインストールされています。

コンテナ

イメージに基づいてアプリケーションを実行する環境・インスタンスです。

主要なインストラクション

関連する用語が整理できたので、各インストラクションの役割について記載していきます。

FROM

新たに作成するイメージのベースとなるイメージを指定します。
FROM は Dockerfile の先頭に記載します。FROM でベースイメージを指定した後、アプリケーションのインストールやファイルの追加などの変更を加えていきます。

# FROM [--platform=<platform>] <image> [AS <name>]
# FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
# FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
FROM node:21-alpine3.18

※実用例

RUN

FROM で記載したベースイメージに対し、実行するコマンドを指定します。
コマンドを実行すると、現在のイメージの上に新しいレイヤが作成されます。作成されたレイヤは、Dockerfile の次のインストラクションで利用されます。

# INSTRUCTION command param1 param2
RUN npm install --production

RUN 及びこの後記載する CMDENTRYPOINT には以下2つの形式があります。

  • 実行形式(exec form):INSTRUCTION ["executable","param1","param2"]
  • シェル形式(shell form):INSTRUCTION command param1 param2

それぞれ Dockerfile 内の書式を Docker コンテナで実行する際の変換方法が異なります。

シェル形式のほうが一般的に使われているようです。

※実用例

CMD

Docker イメージから Docker コンテナを起動するときに実行するコマンドとオプションを指定します。
そのため、CMD は Dockerfile のなかで一度しか使えません。

# CMD ["executable","param1","param2"]
CMD ["/usr/local/bin/python3", "-m", "http.server", "8000"]

※実用例

ENV

Dockerfile 内で環境変数を設定します。
イメージビルド時とコンテナ実行時に有効です。

# ENV <key>=<value> ...
ENV MYSQL_DATABASE=sample_app

※実用例

COPY

ホストマシンのファイルやディレクトリをコンテナのレイヤ(イメージ)にコピーします。
<src> がコピー元、<dest> がコピー先です。

# COPY [OPTIONS] <src> ... <dest>
# COPY [OPTIONS] ["<src>", ... "<dest>"]
COPY package*.json ./

※実用例

ADD

ホストマシンやインターネットのファイルをコンテナのレイヤ(イメージ)にコピーします。
COPY よりも多機能です。

# ADD [OPTIONS] <src> ... <dest>
# ADD [OPTIONS] ["<src>", ... "<dest>"]
ADD hom* /mydir/

WORKDIR

RUNCMDENTRYPOINTCOPYADD といったインストラクションを実行するディレクトリを設定します。
Dockerfile に WORKDIR が存在しない場合、ルートディレクトリ(/)に自動で作成されます。

# /path/to/workdir
WORKDIR /app

EXPOSE

コンテナのポートを設定します。

# EXPOSE <port> [<port>/<protocol>...]
EXPOSE 80/udp

参考

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?