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