Dockerfile
- Dockerfile のベストプラクティス
Tips
Dockerfile 保存ディレクトリ内には不要なファイルは置かない
- build 後にディレクトリ内の全てのファイルが作業ディレクトリに転送されるため
docker run 時に
--rm
をつけておくと、シェルから抜けたときの Docker コンテナの残骸を削除してくれるset -x
- 途中中で処理が失敗したときにどこまで進んだかわかるよう、実行したコマンドそのものを標準エラー出力にだすよう set -x しておくと便利
作成方法
ベースの Docker イメージを決める
- Alpine とか軽量
- 最初は、普段使っている OS が良いかも
コンテナ接続
$ docker run -it alpine /bin/ash
順次コマンド実行
上記でうまく行ったコマンドを Dockerfile に記載
content
環境変数やビルド変数を指定する命令
- ARG
build サブコマンドの --build-arg オプションで渡された値を、Dockerfile 内で使用するビルド変数に指定するための命令
ARG ビルド変数(=既定値)
ARG username=test USER $username
--build-arg MES="Hello"
変数定義を Dockerfile に書いていても、引数の方に上書きされる
ENV 命令と違って、生成したイメージや、それから起動するコンテナには引き継がれない
- ENV
記載
ENV 環境変数 値 => 1 個だけ指定できる ENV 環境変数=値 [環境変数=値] => 複数指定できる
環境変数
ENV PATH $PATH:/usr/local/rbenv/bin/
Dockerfile 時の処理ならびに、run 時でも設定は有効である
- ARG
作業ディレクトリ設定
WORKDIR /opt/test/
RUN
- イメージ作成時に実行される
コンテナ起動時に実行するコマンドを指定する命令
- CMD
- コンテナ実行時に実行される
- run サブコマンドで指定したコマンドで差し替え可能
- ENTRYPOINT
- 実行コマンド差し替え不可
- 両方を同時に指定した場合には、ENTRYPOINT 命令で指定したコマンドと引数に、 CMD 命令で指定した内容が追加の引数として与えられる
- 書式
- CMD echo 'test'
- /bin/sh -c コマンド [引数] というコマンドが実行される
- イメージ内にシェルが必要
- CMD ["echo", "test"]
- コマンドが直接実行
- シェルは必要なし
- CMD echo 'test'
- CMD
EXPOSE
- 通信ポート指定
LABEL
イメージに付加するメタデータを指定
LABEL version=1.0
MAINTAINER
- イメージ作者
ADD と COPY
- 基本的に同じ
- ADD
- URL を指定してリモートファイルをコピーできる
- コピーファイルが tar アーカイブであった場合、それをイメージ内で自動的に展開する