【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