Dockerfileの簡潔なチュートリアル
dockerコマンドは次を参照できます:https : //blog.csdn.net/a40850273/article/details/104510863
Dockerfileの紹介
dockerfileキーワード:
- FROM:構築に使用されるベースイメージを指定するために使用されます。以降の操作では、このミラーに対して個別インストールを実行します。参照される基本ミラーは、ローカルミラーまたはリモートミラーです。ローカルミラーは[ミラー名:タグ]で参照され、リモートミラーは[ip:ポート番号/ミラー名:タグ]で適用されます。
- ENV:環境変数を設定します。この環境変数は、以降の手順で使用できます。
- ARG:パラメータを構築し、ENVと同じ効果があります。しかし、範囲は異なります。ARGによって設定された環境変数は、Dockerfileでのみ有効です。つまり、Dockerビルドプロセス中にのみ有効です。この環境変数は、ビルドされたイメージには存在しません。docker buildで--build-arg <parameter name> = <value>によって上書きされます。
- COPY:コピー命令。ファイルまたはディレクトリをコンテキストディレクトリからコンテナ内の指定されたパスにコピーします。
- ADD:ADD命令のフォーマットはCOPYのフォーマットと同じです(同じ要件の下では、公式の推奨はCOPYを使用することです)。違いは、ADDがtar圧縮ファイルをソースファイルに自動的にコピーして解凍することです。
- 実行:ビルドプロセス中に実行する必要がある命令を指定します。RUNが実行されるたびに、新しいレイヤーがdockerに作成されます。意味のないレイヤーが多すぎると、画像が大きくなりすぎます。したがって、&& \を使用して複数のコマンドを連結することをお勧めします。
- CMD:コンテナーの実行中に実行する必要がある命令を指定します。これは、Dockerの実行中に実行するように指定された命令によって上書きされます。複数のCMDの場合、最後のCMDのみが有効です。
- ENTRYPOINT:CMDコマンドと同様ですが、docker runのコマンドラインパラメーターで指定されたコマンドによって上書きされることはなく、これらのコマンドラインパラメーターはパラメーターとして使用され、ENTRYPOINTコマンドで指定されたプログラムに送信されます。ただし、docker runの実行時に--entrypointオプションが使用されている場合、このオプションのパラメーターは、ENTRYPOINT命令で指定されたプログラムをオーバーライドするために実行されるプログラムとして使用できます。Dockerfileに複数のENTRYPOINT命令がある場合、最後の命令のみが有効になります。
- WORKDIR:構築プロセス中に自動的に作成される作業ディレクトリを指定します。WORKDIRで指定された作業ディレクトリは、イメージの各レイヤーで役割を果たします。
- ボリューム:匿名データボリュームを定義します。コンテナーの起動時にデータボリュームをマウントし忘れた場合は、匿名ボリュームに自動的にマウントされます。非常に致命的なコンテナの再起動により、重要なデータが失われるのを避けます。
- EXPOSE:ポートを宣言するだけです。ミラーリングユーザーがこのミラーリングサービスのガードポートを理解できるようにして、マッピングの構成を容易にします。実行時にランダムポートマッピングを使用する場合、つまりdocker run -Pを実行すると、EXPOSEポートは自動的にランダムにマッピングされます。
- USER:後続のコマンドを実行するユーザーとユーザーグループを指定するために使用します。これは、後続のコマンドを実行するユーザーを切り替えるためだけです(ユーザーとユーザーグループは事前に存在している必要があります)。
ENTRYPOINTとCMDを通じて可変パラメーター操作を実現する
簡単な例
FROM nvidia/cuda:10.2-base
ENV BASE_PATH=/root/object_detect
ENV PYTHON_PATH=python3.8
WORKDIR $BASE_PATH
ADD . $BASE_PATH
RUN rm -rf /etc/apt/sources.list.d/* && \
apt-get update && \
mkdir /root/.pip && \
cp pip.conf /root/.pip/pip.conf && \
apt-get -y install python3-pip && \
apt-get -y install $PYTHON_PATH && \
$PYTHON_PATH -m pip install -r requirements.txt && \
$PYTHON_PATH -m pip install -r app/requirements.txt && \
apt-get install -y libsm6 && \
apt-get install -y libxrender1 && \
apt-get install -y libxext-dev
ENTRYPOINT $PYTHON_PATH app/manager.py
注意点:
- 複数のRUN命令によってイメージが大きくなりすぎないようにするには、&& \を使用します
- apt-getなどのビルドプロセス中にネットワークが必要です。dockerbuildコマンドに--network = hostオプションを追加する必要があります
- コマンドを手動で選択する必要がある場合は、apt-get -yなどのオプションで操作を指定する必要があります。
- python3-pipを介してpipをインストールする場合、システムはシステムに関連付けられているpythonバージョンに従ってインストールします。他のpythonバージョンでpip操作を実行する必要がある場合は、python -m pip installを使用して実行できます。
docker buildコマンド
docker build -t test:v1.0 --network=host .
- docker buildは、指定されたパスにあるdockerifleファイルを介してイメージをビルドします。最後に、ディレクトリをビルドするには、ビルドディレクトリのdockerfileがデフォルトで使用されます。または、-fオプションを使用して、特定のパスでdockerfileを指定できます。
- -t test:v1.0は、ビルドされたイメージの名前とタグを作成するために使用されます
- --network = hostは、構築プロセスで使用されるホストのネットワーク接続を公式化するために使用されます。構築プロセス中にネットワークを構築する必要がある場合は、このオプションを設定する必要があります