【Docker】Dockerfileの基本コマンドと操作

【Docker】Dockerfileの基本コマンドと操作

1. Dockerfile の予約済みコマンド

予約語 効果
から 現在のミラーはどのミラーに基づいていますか
走る イメージのビルド時に実行する必要があるコマンド
公開 現在のコンテナによって公開されているポート番号
作業ディレクトリ コンテナ作成後にターミナルがデフォルトでログインする作業ディレクトリを指定します。
環境 イメージの構築中に環境変数を設定するために使用されます
追加 ホスト ディレクトリ内のファイルをミラーにコピーすると、ADD コマンドが自動的に URL を処理し、tar パッケージを解凍します。
コピー ADD と同様に、ファイルとコマンドをミラーにコピーすると、
ビルド コンテキスト ディレクトリ内の <元のパス> から新しいレイヤーのミラー内の <ターゲット パス> の場所にファイル/ディレクトリがコピーされます。
音量 データのストレージと永続化のためのコンテナ データ ボリューム
CMD コンテナーの起動時に実行するコマンドを指定します。Dockerfile
には複数の CMD コマンドを含めることができますが、有効になるのは最後のコマンドのみです。CMD は、docker の実行後にパラメーターに置き換えられます
エントリーポイント コンテナーの起動時に実行する
コマンド ENTRYPOINT を指定する目的は、 CMD の目的と同じで、コンテナー ランチャーとそのパラメーターを指定することです。

1.1 コマンドから

イメージのビルドに基づくイメージは、ビルド時にベース イメージを自動的に取得しますdocker hub。From は、Dockerfile の最初の命令として表示される必要があります。

構文は次のとおりです。

FROM <image>
FROM <IMAGE>[:<tag>]	//使用版本不写则为latest
FROM <image>[@<digest>]	//使用摘要

1.2 RUNコマンド

RUN コマンドは、現在のイメージの上の新しいレイヤーで任意のコマンドを実行し、結果をコミットします。結果としてコミットされたイメージは、Dockerfile の次のステップで使用されます。

構文は次のとおりです。

RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
RUN ["executable", "param1", "param2"] (exec form)

RUN /bin/bash -c 'source $HOME/.bashrc && echo $HOME'
RUN ["/bin/bash", "-c", "echo hello"]

1.3 EXPOSEコマンド

ビルドされたイメージがコンテナーとして実行されるときに、外部に公開されるポートを指定するために使用されます。

構文は次のとおりです。

EXPOSE 80/tcp	#如果没有显示指定则默认暴露都是tcp
EXPOSE 80/udp

1.4 CMDコマンド

これは、起動されたコンテナーに対して実行されるコマンドを指定するために使用されます。 Dockerfile 内に存在できるCMDコマンドは1 つだけです。複数のコマンドがリストされている場合は、最後のコマンドのみが有効になります。

構文は次のとおりです。

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

例:

  • CMD java -jar a.jar
  • CMD ["java"、"-jar"、"a.jar"] (推奨)

1.5 ENTRYPOINTコマンド

コンテナーの起動時に実行するコマンドを指定します。ENTRYPOINT の目的は CMD の目的と同じで、コンテナーの起動ツールとそのパラメーターを指定することです。

構文は次のとおりです。

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

1.6 WORKDIRコマンド

Dockerfile 内の RUN、CMD、ENTRYPOINT、COPY、および ADD 命令の作業ディレクトリを設定するために使用されます。WORKDIR が存在しない場合は、後続の Dockerfile 命令で使用されていなくても作成されます。

構文は次のとおりです。

#使用绝对路径
WORKDIR /path/to/workdir

#先使用绝对路径,再使用相对路径
WORKDIR /a
WORKDIR b
WORKDIR c
# /a/b/c
RUN pwd

ENV DIRPATH=/path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd

1.7 ENVコマンド

イメージをビルドするための環境変数を設定するために使用され、この値はビルドフェーズの後続のすべての命令の環境に表示されます。

構文は次のとおりです。

ENV <key> <value>
ENV <key>=<value>

1.8 ADDコマンド

新しいファイル、ディレクトリ、またはリモート ファイル URL をコンテキストからコピーし、指定されたパスにあるミラー化されたファイル システムに追加するために使用されます。

構文は次のとおりです。

ADD hom* /mydir/
ADD hom?.txt /mydir/
ADD test.txt relativeDir/
ADD test.txt /absoluteDir/

ADD url

1.9 COPYコマンド

コンテキスト (context) ディレクトリ内の指定されたファイルをイメージの指定されたディレクトリにコピーするために使用されます。

構文は次のとおりです。

COPY hom* /mydir/
COPY hom?.txt /mydir/
COPY test.txt relativeDir/
COPY test.txt /absoluteDir/

2. 実務経験

2.1 ADD と COPY の違いは何ですか?

ADD と COPY はどちらもホスト ファイルをコンテナに追加できますが、ADD にはより強力な機能があります。ADD の後に URL パラメータを続けることもできます。つまり、ADD は URL で指定されたファイルをオンラインでダウンロードできますが、COPY はファイルをコンテナに追加することしかできません。コンテキストディレクトリ。


2.2 CMD と ENTRYPOINT の違い

  • コンテナーの実行時に CMD のコマンドをオーバーライドするにはどうすればよいですか?

docker run image:version は独自の定義コマンドをオーバーライドします

  • コンテナーの実行時に ENTRYPOINT のコマンドはどのように上書きされますか?

docker run --entrypoint=override 命令イメージ:バージョンパスパラメータ


2.3 CMD と ENTRYPOINT の組み合わせ

私たちが作成するイメージは通常、他の人がイメージの内部構造を見ることを許可していないため、ランダムなパラメータを持つコマンドを修正する必要があります。これにより、CMD を ENTRYPOINT と組み合わせて使用​​できるようになります。

  • ENTRYPOINT : コンテナ固定命令の作成に使用されます
  • CMD : パラメータをエントリポイントに渡すために使用されます

注: 一緒に使用する場合は、JSON 配列構文を使用する必要があります


2.4 Dockerfileを記述してjarパッケージイメージを構築する

簡単な Dockerfile の例:

#指定基础镜像
FROM java:8-apline
#设置环境变量
ENV APP_PATH=/app
#设置工作目录
WORKDIR $APP_PATH
#将jar包导入新的镜像
ADD demo.jar $APP_PATH/apps.jar
#暴露端口
EXPOSE 8989
ENTRYPOINT ["java","-jar"]
CMD ["apps.jar"]

書き込み後、Dockerfile ディレクトリで次のコマンドを実行します。

docker build -t apps:1.0 .

コンテナを実行します。

docker run -p 8989:8989 apps:1.0

おすすめ

転載: blog.csdn.net/Decade_Faiz/article/details/131738182