Help us understand the problem. What is going on with this article?

【Docker】Dockerfileの命令の意味ざっくりまとめ

はじめに

Dockerfileを読めるようになるために、Dockerfileの命令について意味をざっくりまとめました。
どう使うのかイメージがわかない命令も多いですが、とりあえず読めるようになるがゴールです。

公式ドキュメントに記載の内容を元にしています。
| Docker Documentation

この記事が役に立つ方

  • Dockerfileの読み方がよく分からない
  • Docker初心者

この記事のメリット

  • Dockerfileの命令が何を示しているのかが(なんとなく)分かる。

環境

  • macOS Mojave バージョン10.14.6
  • シェル:zsh
  • Docker:version 19.03.5, build 633a0ea

Dockerfileとは?

Dockerがイメージを構築するときに読み込むファイルです。
基本構文は、

命令 引数

のようになります。

Dockerfileにイメージを構築するための命令を全て記述し、

$ docker build

でイメージが構築され、それを元に開発が可能となります。

つまり、Dockerfileが同じであれば、開発環境は一緒ということです。

Dockerfileに記述する命令一覧

公式ドキュメントにあるものを抜粋しました。
構文には触れていませんので、必要に応じて下記をご参照下さい。
| Docker Documentation

FROM

ベースイメージを指定する。
これを元にその他命令を追加していくため、最初はFROMから記述する必要がある。
DockerHubにあるイメージを使用。

RUN

それまでのイメージをベースに、新規レイヤーでシェルコマンドを実行する。
実行後出来たイメージは、以降の命令にも適用される。

CMD

docker run時にデフォルトで実行するコマンドを指定することが出来る。
1つのDockerfileに1つしか含めることが出来ない。

ENTRYPOINT

docker run時にデフォルトで実行するコマンドを指定することが出来る。
1つのDockerfileに1つしか含めることが出来ない。

CMDとの違いは下記記事で解説されています。
docker CMD とENTRYPOINT の違いを試してみた - Qiita

LABEL

コンテナイメージにメタデータを登録する。
過去MAINTAINERで指定していた作者の情報も、LABELで指定するのが推奨とされている。

EXPOSE

ポートの開放を行う。
コンテナ間をリンクするときなどに使用。

ENV

環境変数を指定する。

ADD

ファイルやディレクトリ、リモートファイルURLを追加する。
ただし、rootユーザーのみ実行・書き込み可能な状態で追加されるため、必要に応じて別途パーミッションを変更する必要がある。

COPY

ホスト側からコンテナへファイルやディレクトリをコピーする。

VOLUME

ボリュームのマウントを行う。

USER

実行ユーザーを指定する。

WORKDIR

各種命令を実行する際の作業ディレクトリ(カレントディレクトリ)を指定する。

ARG

--build-argフラグで渡すことが出来る変数を定義する。

ONBUILD

作成するイメージが、別のビルドのベースイメージとして使用されるときに実行される命令を追加する。

STOPSIGNAL

終了時にコンテナに送るシグナルを指定できる。

HEALTHCHECK

コンテナが動作しているかどうかを確認するテストを組み込める。
引数の指定によって30秒に1回動作確認などが出来る。

SHELL

使用するシェルを指定出来る。

おわりに

実際使っていない命令が半分以上あり、理解不十分:sweat_smile:

これからBest Practicesも読みつつ、人の書いたDockerfileを読みつつで理解を深めていこうと思います。
Dockerfile Best Practices

参考にさせて頂いたサイト(いつもありがとうございます)

【入門】Dockerfileの基本的な書き方 | レコチョクのエンジニアブログ
| Docker Documentation
docker CMD とENTRYPOINT の違いを試してみた - Qiita

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away