dockerfileの設定コマンド②
はじめに
くーばねてすをやっつけるためにこれまでにLinuxさんとAWSさんと仲良くさせていただいたが、新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。
今回はdockerさんでコンテナを開発して、くーばねてすでの構築の基礎的な部分を理解する。
概要
■dockerfileのコマンド
■ENTRYPOINT
■CMD
■ENV
■ARG
をまとめた!(^_-)-☆
■dockerfileのコマンド
前回適当に作成したがコンテナを設定するコマンドがたくさんあったので設定コマンドについて勉強する。
dockerfile命令(コマンド)、意味ざっくり
|コマンド|意味|
| --- | --- | --- |
|FROM イメージ:タグ|コンテナのベースイメージ|
|RUN コマンド|FROMのベースイメージで実行するコマンド|
|ADD ソース コンテナ内宛先|ソースをコンテナ内宛先へコピーする|
|ENTRYPOINT |コンテナが実行するファイルを指定する|
|CMD|コンテナの実行時に実行されるコマンドを指定する|
|ENV key=Value|環境変数をセットする|
|EXPOSE port|公開ポートを設定する|
|USER ユーザ名|RUN,CMD,ENTRYPOINTの実行ユーザを指定する|
|VOLUME["/path"]|共有可能なボリュームをマウントする|
|WORKDIR /path|RUN,CMD,ENTRYPOINT,COPY,ADDの作業ディレクトリを指定する|
|ARG <名前>[=<デフォルト値>]|ビルド時の引数を定義する--bild-arg<引数>=<値>|
|LABEL key=value key=value|イメージのメタデータにラベルを追加する|
|MAINTAINER<名前>|イメージのメタデータに製作者を追加する|
ルールがたくさんある!('_')
dockerfileはGO言語で記述する。
■ENTRYPOINT
コンテナが実行するファイル、コマンド、引数を指定する。
記述形式は exec 形式、shell形式の2つがある。
・exec形式
ENTRYPOINT ["実行バイナリ", "パラメータ1", "パラメータ2"]
・shell形式
ENTRYPOINT コマンド パラメータ1 パラメータ2
ENTRYPOINT コマンド
※「ENTRYPOINT」および「CMD」を記述することで実行するコマンドおよび引数を事前に定義でき、「docker run」コマンド実行時に省略できるようになる。
※ENTRYPOINT とCMD の両方が書いてある場合、ENTRYPOINTに書かれている内容がコマンドとなり、CMD に書かれている内容が、ENTRYPOINT に書いてあるコマンドオプションになる。
※「ENTRYPOINT」の場合は「docker run」で実行するコマンドおよび引数を上書きすることはできない。ENTRYPOINTを実行したい場合、コンテナ起動時に次のように指定する。
docker run --entrypoint=""
で実行することができる。
※ENTRYPOINT とCMD の両方が書いてありdocker run 時に引数をつけた場合、CMD の内容が上書きされENTRYPOINT に書いてあるコマンドが実行される。
※1つのDockerfile にCMD、ENTRYPOINT は1度のみ指定できる。
※ENTRYPOINTで 複数コマンドが記述されている場合、最後の1個が実行されてしまう。
■CMD
コンテナ実行時に実行されるファイル、コマンド、引数を指定する。
CMD には3つの記述形式がある。
・exec 形式
CMD ["実行バイナリ", "引数1", "引数2"]
・ENTRYPOINT の引数として記述
CMD ["引数1", "引数2"]
・シェル形式
CMD コマンド 引数
※「ENTRYPOINT」および「CMD」を記述することで実行するコマンドおよび引数を事前に定義でき、「docker run」コマンド実行時に省略できるようになる。
※ENTRYPOINT とCMD の両方が書いてある場合、ENTRYPOINTに書かれている内容がコマンドとなり、CMD に書かれている内容が、ENTRYPOINT に書いてあるコマンドオプションになる。
※「CMD」の場合は「docker run」で実行するコマンドおよび引数を上書きできる。
※1つのDockerfile にCMD、ENTRYPOINT は1度のみ指定できる。
※ENTRYPOINT とCMD の両方が書いてありdocker run 時に引数をつけた場合、CMD の内容が上書きされENTRYPOINT に書いてあるコマンドが実行される。
■ENV(シェルで実行できる環境変数 )
ENV コマンドでは、**シェルで実行できる環境変数 と 値 **を設定することができる。値は Dockerfile から派生する全てのコマンド環境で利用できる。環境変数はシェルに引き継がれる。
環境変数の設定に ENV を指定すると、作成したイメージを使ってコンテナ起動後、環境変数が有効となる。
どのような値が設定されているかは docker inspect で確認でき、変更するには docker run --env key=value を使う。
ENV key value
ENV key=value ...
ENV DB_HOST="192.168.2.201" \
DB_PORT="3306" \
DB_USER="myapp" \
DB_PASSWD="ZbGc7#adG87GBfVC" \
DB_DATABASE="sample"
■ARG(Dockerfile 内で使用できる環境変数)
Dockerfile 内で使用できる変数を指定する。ENV による環境変数がシェルに引き継がれるのに対し、ARG による変数は Dockerfile の中のみで使用となる。
ARG 名前(=デフォルト値)
ARGコマンドは、構築時に作業者が docker build コマンドで使う変数、 --build-arg 変数名=値を先に定義するものとなる。 docker build コマンドの引数として値を渡す。
ユーザーがdocker build 時に変数名=値を指定しても Dockerfile でARGが定義されていなければ、構築時にエラーが出る。
ARG 変数は Dockerfile で記述した行以降で使用可能となる。(※ただし、コマンドライン上で引数の指定が無い場合に限る)
ARG user=unknown
RUN echo $user => unknwon
まとめ
. ┗┯┛
./ / │ \
│
∩ もう寝る
<⌒/ヽ-、いい夢見ろよ
/<_/____ /
Discussion