1. terufumi1122

    Posted

    terufumi1122
Changes in title
+【Docker】Dockerfileの命令の意味ざっくりまとめ
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,111 @@
+## はじめに
+Dockerfileを読めるようになるために、Dockerfileの命令について意味をざっくりまとめました。
+どう使うのかイメージがわかない命令も多いですが、**とりあえず読めるようになる**がゴールです。
+
+公式ドキュメントに記載の内容を元にしています。
+[| Docker Documentation](https://docs.docker.com/engine/reference/builder/)
+
+## この記事が役に立つ方
+- Dockerfileの読み方がよく分からない
+- Docker初心者
+
+## この記事のメリット
+- Dockerfileの命令が何を示しているのかが(なんとなく)分かる。
+
+## 環境
+- macOS Mojave バージョン10.14.6
+- シェル:zsh
+- Docker:version 19.03.5, build 633a0ea
+
+## Dockerfileとは?
+Dockerがイメージを構築するときに読み込むファイルです。
+基本構文は、
+
+```
+命令 引数
+```
+のようになります。
+
+Dockerfileにイメージを構築するための**命令**を全て記述し、
+
+```zsh
+$ docker build
+```
+でイメージが構築され、それを元に開発が可能となります。
+
+つまり、Dockerfileが同じであれば、**開発環境は一緒**ということです。
+
+## Dockerfileに記述する命令一覧
+公式ドキュメントにあるものを抜粋しました。
+構文には触れていませんので、必要に応じて下記をご参照下さい。
+[| Docker Documentation](https://docs.docker.com/engine/reference/builder/)
+
+### `FROM`
+ベースイメージを指定する。
+これを元にその他命令を追加していくため、最初はFROMから記述する必要がある。
+DockerHubにあるイメージを使用。
+
+### `RUN`
+それまでのイメージをベースに、新規レイヤーでシェルコマンドを実行する。
+実行後出来たイメージは、以降の命令にも適用される。
+
+### `CMD`
+デフォルトで実行するコマンドを指定することが出来る。
+1つのDockerfileに1つしか含めることが出来ない。
+
+### `ENTRYPOINT`
+デフォルトで実行するコマンドを指定することが出来る。
+CMDと
+
+### `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](http://crosbymichael.com/dockerfile-best-practices.html)
+
+## 参考にさせて頂いたサイト(いつもありがとうございます)
+[【入門】Dockerfileの基本的な書き方 | レコチョクのエンジニアブログ](https://techblog.recochoku.jp/1022)
+[| Docker Documentation](https://docs.docker.com/engine/reference/builder/)