Dockerfileは、docker imageを作る(build)元の書類です。
docker buildで作成します
docker image build [OPTIONS] PATH | URL | -
$ docker image build -t New_Image .
- -t : tag imageの名前とタグ name:tag の形式
- . : パス Dockerfileのパス '.'は、カレントディレクトリの意味
Dockerfileの書式
-
FROM : docker imageのベースになるimage、Docker Hubのregistry
- Dockerfile では、FROMは一番最初に書く
- FROM <イメージ>
- FROM <イメージ>:<タグ> or FROM <イメージ>@
-
USER : 実行ユーザーの指定
-
WORKDIR : 作業用ディレクトリを移動する
-
RUN : イメージビルド時に、Dockerコンテナ内で実効するコマンド
-
COPY : Hostのファイルやディレクトリをcontainer内にコピーする
-
ADD : ADD <ソース>... <送信先>
- ADD ["<ソース>", ... "<送信先>"] この形式はパスに空白スペースを使う場合
-
CMD : コンテナ内で実行するプロセス
- CMD ["実行バイナリ・ファイル"," 引数1"," 引数2”]
- CMD ["ping","127.0.0.1","-c","100”]
- CMD shell コマンド CMD ping 127.0.0.1 -c 10
-
ENTRYPOINT : CMDの引数はENTORYPOINTで実行FILEへの引数に
- ENTRYPOINT ["ping”]
- CMD ["127.0.0.1", "-c", "50”]
-
LABEL : imageの作者名などに使える
- LABEL = = = ...
-
ENV : container内FR使える環境変数
-
ARG : ビルド時に利用出来る環境変数
-
EXPOSE : ポートのエクスポート ポートを開ける
-
VOLUME : ボリュームのエクスポート
-
MAINTAINER : 作成者の情報
DeepLearningの開発環境を作った例
Dockerfile
FROM jupyter/scipy-notebook
USER root
RUN apt-get update && apt-get install -y build-essential graphviz-dev graphviz pkg-config
USER $NB_UID
# Install Tensorflow
RUN pip install --quiet \
'tensorflow==2.1.0' \
graphviz \
pydotplus \
torch torchvision && \
fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
- FROM : 元になるimageを指定してます
- USER : ユーザーをrootに切り換えています
- RUN : aptコマンドでupdateとinstallをしています
- USER : ユーザーを戻しています
- RUN : pip コマンドでモジュールをインストールしています、最後にパーミッションを合わせています
dockerはレイヤーの集合体なのでなのでDockerfileの命令をまとめて出す方が効率的
- imageレイヤー数が減ります
- docker imageのレイヤー構造の確認は、docker image history name:tag
- &&で命令を結合出来ます
- apt-get install --no-install-recommends オプションで推薦パッケージインストール
- apt-get install後は、rm -rf /var/lib/apt/lists/* キャッシュ削除する方が良い