A、dockerfileフォーマット
- コメント#
- コマンドパラメータ
- コマンドは、大文字と小文字の区別はありませんが、それは全て大文字の指示で推奨されます。
- 順次上から下に実行された命令
- 最初の命令は、[]のものである必要があり、使用するベース画像を示します。
- ドッカーファイルが実行され、他のプロファイルを使用している場合、これらのプロファイルは、親ディレクトリの[エグゼクティブ]ドッキングウィンドウのファイルディレクトリを置くことはできませんが、サブディレクトリを置くことができます。
- 実行ドッキングウィンドウのファイルディレクトリでは、ビルドファイルを必要としない時に格納され、隠されたファイル(.dockerignore)を置くことができます。あなたは指定にはワイルドカードを使用することができます。たとえば、10個のファイル、ビルド3つのファイル内のサブディレクトリ必要がない場合は10個のファイルが導入されたように、あなたは、ディレクトリ名にドッキングウィンドウのファイルで参照されるが来ました。3つのファイルを必要としない場合、彼らは除外3上に構築する場合でも、ファイルに追加.dockerignore。
- ファイル名でなければなりません:Dockerfile []または[] dockerfile
二、コマンドdockerfile
FROMコマンド:リポジトリがベースイメージ(ベースイメージ)の名前であり、タグは、その最新情報を指定していない、ラベルのベースイメージを取得します。いいえ、レジストリ場合は、ドッキングウィンドウハブからそれを引っ張っ。
FROM <レジストリ> <リポジトリ> [:<タグ>]
FROM <レジストリ> <リポジトリ> @ <ダイジェスト>
外部からプル画像にレジストリをすると、画像は、おそらく他の人によって置換されるべきですが、同じリポジトリ名なので、安全でありません。ダイジェストは、画像のハッシュ値である、それはダイジェストが他の誰かに交換できません指定します。
MAINTAINERコマンド(推奨されません、LABLEが交換される):生産者が詳細情報自分自身を提供dockerfileようにします。
MAINTAINERはどこにでも現れることができますが、それはFROMバックに推奨されます。
- MAINTANIER "magedu <[email protected]>"
LABELコマンド:メタデータを指定するために使用し、そのようなので、上の著者、ファイルサイズ、およびなど。
- 用法:LABEL <キー> = <値> <キー> = <値> ...
COPYコマンドは:ファイルシステムのイメージを構築するディレクトリ:ファイルまたはディレクトリのホストにコピーします。
構文:
- COPY <SRC> ... <DEST>
- COPY [ "<SRC>"、... "<DEST>"]
- SRC:ソースファイルまたはディレクトリを、相対パス(相対dockerfileパス)を使用し、ワイルドカードの使用をサポートしています
- DEST:宛先パス、絶対パスが推奨されるそれ以外の場合は、COPY WORKDIR場所、出発経路として指定します。
- 注:パスに空白文字がある場合、最初の空白文字は、ディレクトリの区切り形式であることを理由に、第二のフォーマットを使用します。
ファイル複製基準:
SRCは、ディレクトリまたはパス内の親ファイルをできないファイルまたはディレクトリ内dockerfileでなければなりません。
srcがディレクトリである場合には、その内部のファイルやサブディレクトリは再帰的なコピーになりますが、srcディレクトリ自体はコピーされません。
等価:CPのSRC / * / DEST。
指定されたsrcの複数、またはワイルドカードSRCを使用した場合、destがそれがディレクトリである必要があり、および/で終わる必要があります。
destが事前に存在しない場合は、自動的にその親ディレクトリが作成されますと共に、作成されます。
三、ビルド特性:各コマンドラインの実行は、新しいレイヤーを作成し、より多くの層は、より高いパフォーマンスが良くありません、それは可能な限り、単一の行に、単一の行に命令することができます。
例えば、COPYコマンドは、ターゲット・ディレクトリと同じならば、それは最高のコピーだけ一度使用されています。複数のCOPYの使用はエラーではありませんが、より多くのレベルになりますが、パフォーマンスが良くありません。
ドッキングウィンドウのビルドコマンド
ヘルプを表示:
- PATH:Dockerfile]または[ディレクトリ] [dockerfileファイルが置かれています。
- -c:どのように多くのCPU製造プロセス
- -m:生産プロセスは、多くのメモリを使用します。
- -t:リポジトリとタグ指定された画像。
# docker build --help
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile
Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
--build-arg list Set build-time variables
--cache-from strings Images to consider as cache sources
--cgroup-parent string Optional parent cgroup for the container
--compress Compress the build context using gzip
--cpu-period int Limit the CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--disable-content-trust Skip image verification (default true)
-f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile')
--force-rm Always remove intermediate containers
--iidfile string Write the image ID to the file
--isolation string Container isolation technology
--label list Set metadata for an image
-m, --memory bytes Memory limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable
unlimited swap
--network string Set the networking mode for the RUN instructions
during build (default "default")
--no-cache Do not use cache when building the image
--pull Always attempt to pull a newer version of the image
-q, --quiet Suppress the build output and print image ID on success
--rm Remove intermediate containers after a successful
build (default true)
--security-opt strings Security options
--shm-size bytes Size of /dev/shm
-t, --tag list Name and optionally a tag in the 'name:tag' format
--target string Set the target build stage to build.
--ulimit ulimit Ulimit options (default [])
例1 dockerfile:ファイルをコピーします。
FROM busybox:latest
MAINTAINER "magedu <[email protected]>"
LABEL maintainer="magedu <[email protected]>"
COPY index.html /data/html/
上記dockerfileトライでのビルドが使用する-t
イメージの名前とタグを指定するには、そのビルドの成功を発見しました。
# docker build -t tinyhttpd:v0.01 ./
Sending build context to Docker daemon 3.072kB
Step 1/4 : FROM busybox:latest
---> b534869c81f0
Step 2/4 : MAINTAINER "magedu <[email protected]>"
---> Using cache
---> 5c5a1c47716c
Step 3/4 : LABEL maintainer="magedu <[email protected]>"
---> Using cache
---> 88b87ddfdb22
Step 4/4 : COPY index.html /data/html/
---> Using cache
---> 59b7dd6c3eb8
Successfully built 59b7dd6c3eb8
Successfully tagged tinyhttpd:v0.01
そこ/data/html/index.htmlかどうかを確認するために、このイメージを起動します
# sudo docker run --name b1 --rm tinyhttpd:v0.01 cat /data/html/index.html
<h1>http server</h1>
例2 dockerfile:ディレクトリをコピーします。
FROM busybox:latest
MAINTAINER "magedu <[email protected]>"
LABEL maintainer="magedu <[email protected]>"
COPY index.html /data/html/
COPY yum.repos.d /etc/yum.repos.d/
ビルドの実装:
docker build -t tinyhttpd:v0.02 ./
Sending build context to Docker daemon 30.21kB
Step 1/5 : FROM busybox:latest
---> b534869c81f0
Step 2/5 : MAINTAINER "magedu <[email protected]>"
---> Using cache
---> 5c5a1c47716c
Step 3/5 : LABEL maintainer="magedu <[email protected]>"
---> Using cache
---> 88b87ddfdb22
Step 4/5 : COPY index.html /data/html/
---> Using cache
---> 59b7dd6c3eb8
Step 5/5 : COPY yum.repos.d /etc/yum.repos.d/
---> 99d306a25cc7
Successfully built 99d306a25cc7
Successfully tagged tinyhttpd:v0.02
検証:
docker run --name b1 -it --rm tinyhttpd:v0.02 ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Sources.repo
CentOS-Base.repo_20191129 CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo
CentOS-Debuginfo.repo docker-ce.repo
CentOS-Media.repo
二、dockerfileコマンド(続き)
ADDコマンド:COPY URLとダウンロードからより自己解凍圧縮ファイルクラスのCOPYと同様に、そしてより多くのサポート
構文:
- ADD <SRC> ... <DEST>
- ADD [ "<SRC>"、... "<DEST>"]
ADDのガイドライン:
- COPYコマンドを使用して、
- DESTへのSRCは、URLで直接作成されたとdestは/、その後、srcが、ファイルがダウンロードされ、指定されたで終わっていない場合は、/とDESTファイルが終了した場合、その後、指定されたsrcをdestに/ <ファイル名>としてダウンロードして保存されます。
- srcがホスト上の圧縮ファイルであれば、それはその同様の動作を自動的に展開されます
tar -x
が、URLでダウンロードした圧縮ファイルが自動的に起動しません。 - 複数のSRC、または使用ワイルドカードがある場合はdestがディレクトリパス/エンディングに基づいている必要があり、; /でないDEST終了した場合、それは通常のファイルとして扱われ、SRC DESTコンテンツが直接書き込まれます。
例1:URLを使用します
FROM busybox:latest MAINTAINER "magedu <[email protected]>" LABEL maintainer="magedu <[email protected]>" COPY index.html /data/html/ COPY yum.repos.d /etc/yum.repos.d/ ADD http://nginx.org/download/nginx-1.2.9.tar.gz /usr/local/src
結果を確認します。
# docker run --name b1 --rm tinyhttpd:v0.03 ls /usr/local/src/ nginx-1.2.9.tar.gz
例2:ローカルファイル圧縮を使用します
FROM busybox:latest MAINTAINER "magedu <[email protected]>" LABEL maintainer="magedu <[email protected]>" COPY index.html /data/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.2.9.tar.gz /usr/local/src/ ADD nginx-1.2.9.tar.gz /usr/local/src/
結果を確認します。
# docker run --name b1 --rm tinyhttpd:v0.03 ls /usr/local/src/nginx-1.2.9 CHANGES CHANGES.ru LICENSE README auto conf configure contrib html man src
WORKDIRコマンド:すべてのRUN、CMD、ENTRYPOINT、COPYおよび作業ディレクトリを設定し、指定ADDのためのdockerfile。
WORKDIRは相対パスとして、最も近い開始WORKDIRを見つけるために、これらの名称の上に、複数回現れることができます。
構文:
- WORKDIR <PATH>
- WORKDIRシステム環境変数(例:$ MYENV)。
例:
FROM busybox:latest MAINTAINER "magedu <[email protected]>" LABEL maintainer="magedu <[email protected]>" COPY index.html /data/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.2.9.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD nginx-1.2.9.tar.gz ./src1/
結果を確認します。
sudo docker run --name b1 --rm tinyhttpd:v0.03 ls /usr/local/src1/nginx-1.2.9 [sudo] password for ys: CHANGES CHANGES.ru LICENSE README auto conf configure contrib html man src
VOLUME:ラン-v似ていますが、唯一のディレクトリに画像を指定し、ホストはディレクトリを指定することはできません。
構文:
- VOLUME <マウントポイント>
- VOLUME [ "mountpoint1"、 "mountpoint2"]
注:イメージファイルディレクトリがマウントポイント場合は、コンテナが開始された後、ポイントがホストにコピーされたファイルをマウントします。
例:
FROM busybox:latest MAINTAINER "magedu <[email protected]>" LABEL maintainer="magedu <[email protected]>" COPY index.html /data/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.2.9.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD nginx-1.2.9.tar.gz ./src/ VOLUME /usr/local/src
確認結果:画像nginxの-1.2.9は/ usr / local / srcディレクトリの下には、nginxの-1.2.9がホストにコピーされるため。
# docker run --name b1 -it --rm tinyhttpd:v0.03 # ls /var/lib/docker/volumes/1240925e87efaa5d9ed375b268a6d804c29013c04792f9a0dde9e135aa7e9f9e/_data/ nginx-1.2.9
EXPOSE:と-pオプションタイプ、ポートの外に雨水管にコンテナを指定しますが、ホストはこのイメージで稼働しているかを判断することはできませんのでdockerfileなど時点で、ホストのポートを指定することはできません。あなたは使用することができますホスト上のどのポートを知ることができなくなります。だから、ランダム検索のホストポートを使用することができますがあります。
注意:コマンドを公開しますが、RUNの場合は増加していなくてもと
-P
オプションは、ポートが行くにさらされることはありません。语法:<ポート> /プロトコル<ポート> /プロトコル] EXPOSE
- プロトコルは、トランスポート層プロトコル、TCPまたはUDPで、TCPがあることを知りません
- 5255 5254を公開/ UDP:あなたのような、複数のポートを指定することができます
例:
FROM busybox:latest MAINTAINER "magedu <[email protected]>" LABEL maintainer="magedu <[email protected]>" COPY index.html /data/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.2.9.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD nginx-1.2.9.tar.gz ./src/ VOLUME /usr/local/src EXPOSE 80
結果を確認します。
あなたは指定しないように起動すると
-P
ドッキングウィンドウポートを持つビューを、私たちは何のポートが見つかりませんでした。# docker run --name b1 --rm tinyhttpd:v0.03 /bin/httpd -f -h /data/html/ # docker port b1
あなたが起動したときに最初に指定
-P
ドッカポートを確認するために、ポートが見つかりました。# docker run --name b1 --rm -P tinyhttpd:v0.03 /bin/httpd -f -h /data/html/ # docker port b1 80/tcp -> 0.0.0.0:32768
アクションを公開している:デフォルトのポートは公開したい、ブート時に、あなたが使用することができ
-p
、指定したポートを公開するカバーに。
ENV:コンテナシステム環境変数の定義では、ENV、ADD、COPY命令などを使用することができます。
構文:
- ENV <キー> <値>
- ENV <キー> = <値> ...
- 次いで、最初のフォーマットは、<キー>従ってコンテンツ値、変数の定義のみと見なすこと。
- 値が\エスケープを使用して、スペースが含まれている場合、複数の変数を規定する第2のフォーマットは、それはまた、引用された値を識別することができ、また、\ラップとして使用することができます。
- あなたは、結果のイメージが大きすぎるので、追加の層ということ、第二のフォーマットを使用するように、複数の変数を定義する場合。
例:$ {DOC_ROOT: - /データ/ HTML /}使用は、IF(DOC_ROOT値なし){DOC_ROOT = /データ/ HTML /}、です
FROM busybox:latest MAINTAINER "magedu <[email protected]>" LABEL maintainer="magedu <[email protected]>" ENV DOC_ROOT=/data/html/ \ WEB_SERVER_PACKAGE="/nginx-1.2.9" COPY index.html ${DOC_ROOT:-/data/html/} COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.2.9.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD ${WEB_SERVER_PACKAGE}.tar.gz ./src/ VOLUME /usr/local/src EXPOSE 80
ドッキングウィンドウは、実行時にヤンシェンも使用することができる
-e
環境変数を設定するオプションを。-eを介して実行すると、あなたは何年dockerfile指定された環境変数の値を変更することができます。
dockerfileはnginxの-1.2.9で定義されているが、-eは、nginxの-1.2.3を指定WEB_SERVER_PACKAGEは= / nginxの-1.2.3そう。
# docker run --name b1 --rm -e WEB_SERVER_PACKAGE=/nginx-1.2.3 tinyhttpd:v0.03 printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=7a242517b02e WEB_SERVER_PACKAGE=/nginx-1.2.3
しかし、は/ usr / local / srcディレクトリまたはnginxの-1.2.9インチ あなたが-eであるように、ビルドのポイントなので、画像は、nginxの-1.2.9にのみ、環境変数の値の変化のみを入れてきました。
# docker run --name b1 --rm -e WEB_SERVER_PACKAGE=/nginx-1.2.3 tinyhttpd:v0.03 ls /usr/local/src nginx-1.2.9
RUN:ビルド実行中に、任意のシェルコマンドを実行し、ベースイメージで実行することができます。複数のコマンドが関連している場合は、最高一緒に書かれました。
構文:
- RUN <コマンド>
- RUN [ "executable1"、 "ARG1"、 "executable2"、 "ARG1"]
- 例如:RUN [ "/ binに/ bashの"、 " - C"、 "LS"、 " - LTR"]
例:私たちは、ADDは、圧縮ファイルであれば、我々はそれを解凍するtarコマンドを実行しますので、それは、自動的に解凍しないSRCで指定されました。
FROM busybox:latest MAINTAINER "magedu <[email protected]>" LABEL maintainer="magedu <[email protected]>" ENV DOC_ROOT=/data/html/ \ WEB_SERVER_PACKAGE="nginx-1.2.9" COPY index.html ${DOC_ROOT:-/data/html/} COPY yum.repos.d /etc/yum.repos.d/ ADD http://nginx.org/download/${WEB_SERVER_PACKAGE}.tar.gz /usr/local/src/ RUN cd /usr/local/src && \ tar xf ${WEB_SERVER_PACKAGE}.tar.gz
RUNアプリケーション:第1の基本CentOSのミラーを見つけ、その後、nginxのインストール、通常の代わりにyumをインストールし使用するのでは、ソースコードコンパイラのインストールをダウンロードしてください。その理由は、yumの余分なファイルが生成されますです。
FROM centos RUN yum -y install epel-release && \ yum makecache && \ yum install nginx
CMD:時間のドッキングウィンドウのビルドで実行されているが、ドッキングウィンドウの実行時に実行されません。たとえば、nginxのミラーリングされたブート時間、その後、間違いなくnginxのCMDコマンドを起動します。CMDそれ以上に与えられ、最後のものだけが動作します。
構文:
CMD <コマンド>
コマンドは、このコマンドを実行するために、多くの場合、シェルコマンドですが、される/ binに/ shの-c、そのため、あなたはシェルの特性を使用することができるように、シェルによって開始しますが、開始後に、シェルプロセスが自動的に起動し、代わりにこのプロセスようですシェルプロセス。だから、1 pidのです。
CMD [ "executable1"、 "ARG1"、 "executable2"、 "ARG1"]
など/ binに/ lsの実行可能プログラムの名前の実行ディレクトリ名、。それはシェルが起動されていないように、それはシェルのワイルドカード、パイプ、リダイレクト特性そう、すべてではないと、/ SH -c、直接カーネルによって開始されたことにより、/ binに実行されません。あなたがそう使用に、シェルの特性を使用する場合:CMD [ "/ binに/ bashの"、 " - C"、 "実行"、 "引数"]。
同一の第一および第二及び第一及び第二のCMDの使用のRUNの使用。
CMD [ "ARG1"、 "arg2に"]
ENTRYPOINTコマンドで。
例:
FROM busybox LABEL maintainer="mageedu <[email protected]>" app="httpd" ENV WEB_ROOT="/data/web/html/" RUN mkdir -p ${WEB_ROOT} && \ echo '<h1>Busybox httpd.</h1>' > ${WEB_ROOT}/index.html CMD /bin/httpd -f -h ${WEB_ROOT}
確認結果:起動すると/ binに/のsh -c確かに、確認を点検。
"Cmd": [ "/bin/sh", "-c", "/bin/httpd -f -h ${WEB_ROOT}" ],
pidは1であります
docker exec -it b1 /bin/sh / # ps PID USER TIME COMMAND 1 root 0:00 /bin/httpd -f -h /data/web/html/ 6 root 0:00 /bin/sh 11 root 0:00 ps # printenv HOSTNAME=e877c51f7dab WEB_ROOT=/data/web/html/
エントリーポイント:
デフォルトのコンテナを指定するためのプログラムを実行している。同様にCMDコマンド。
CMD差にそれが指定ドッカーランパラメータ(カバーする方法がある)、及び指定されたパラメータを実行ドッカーをカバーすることはできませんで、自動的にコマンドパラメータエントリポイントに対応し、終了エントリポイントコマンドに加えました。
--entrypoint文字列オプションの実行を使用して、あなたはENTRYPOINTコマンドを置き換えることを強制することができます。
パラメータは、パラメータエントリポイントとして上記で定義された第三のフォーマットを使用して、ドッカーRUN、CMDパラメーターを指定しない場合。
ドッキングウィンドウの実行がパラメータを指定した場合、CMD第三フォーマットは、パラメータを使用してパラメータ、ENTRYPOINTを指定する際にドッキングウィンドウの実行指定、CMD第三形式を無視するパラメータを指定しました。
dockerfileファイルの種類にもよりENTRYPOINTを発生することがありますが、最後のものだけが動作します。
構文:
- ENTRYPOINT <コマンド>
- ENTRYPOINT [ "実行可能"、 "PARAM1"、 "PARAM2"]
例:ビルドnginxの設定ファイルで作成、そして時に実行し、あなたはまた、情報のリスニングポート番号を変更し、環境変数-eパラメータを通過することができます。
FROM nginx:alpine LABEL maintainer="MageEdu <[email protected]>" ENV NGX_DOC_ROOT="/data/web/html/" ADD entrypoint.sh /bin/ ADD index.html ${NGX_DOC_ROOT} CMD ["/usr/sbin/nginx", "-g", "daemon off;"] ENTRYPOINT ["/bin/entrypoint.sh"]
次のようにENTRYPOINTコマンドは、自分自身の定義のシェル・コマンド・ファイルです。
まず、設定ファイルのnginxを作成するために、catコマンドで、また、環境変数を使用しています。
次に、execシステムコール機能、コマンドCMDパラメータが定義されている:[ "は/ usr / sbinに/ nginxの"、 "-g"、 "デーモンオフ;"]。現在のシェルプロセスを交換するnginxのプロセスを聞かせて、プロセスngxinスタートし、現在のプロセス(/ binに/ shのプロセス)を終了するので、プロセスのpid nginxのは、1:exec関数の役割があります。
"$ @":シェルのすべてのパラメータ、は/ usr / sbinに/ nginxの "" "" -gデーモンオフ。
entrypoint.sh:
#!/bin/sh cat > /etc/nginx/conf.d/www.conf << EOF server { server_name $HOSTNAME; listen ${IP:-0.0.0.0}:${PORT:-80}; root ${NGX_DOC_ROOT:-/usr/share/nginx/html}; } EOF exec "$@"
、エグゼクティブENTRYPOINTコマンドを実行すると、CMDパラメーターが定義されています。
確認結果:-eは、リスニングポート8080となりました。nginxののpidは1であり、www.confも作成されて。また、ホストマシン上で、index.htmlに結果の出力:[192.0.0.2:8080カール-H「a6b94dae9be4ホストを」実行]。
# docker run --name b1 --rm -d -e "PORT=8080" mynignx:002 # docker exec -it b1 /bin/sh / # netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN # cat /etc/nginx/conf.d/www.conf server { server_name a6b94dae9be4; listen 0.0.0.0:8080; root /data/web/html/; } / # ps PID USER TIME COMMAND 1 root 0:00 nginx: master process /usr/sbin/nginx -g daemon off; 8 nginx 0:00 nginx: worker process # cat /data/web/html/index.html <h1>nginx hello</h1> $ curl -H "Host: a6b94dae9be4" 192.0.0.2:8080 <h1>nginx hello</h1>
試験を、実行時に、パラメータを指定します。/ usr / sbin / nginxのデーモン(意図的に-gなし)オフ、CMDを覆います。そのため-g不足の、ので、容器は、説明し、実際にコマンドCMDで定義されたカバーの開始に失敗しました。
# docker run --name b1 --rm -d -e "PORT=8080" mynignx:002 /usr/sbin/nginx daemon off 4c88e021408c143ec45e70611c42bd715831cb9c75d6f4a00d307a7a6b53af5c [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
テストするには、ENTRYPOINTをカバーし、--entrypoint "/ binに/ SH" を使用。
成功したカバー、プロセスは、第1番/ binに/ shのプロセスであり、www.confファイルは作成されませんでした。nginxのプロセスが開始されていません。
# docker run --name b1 --rm -it -e "PORT=8080" --entrypoint "/bin/sh" mynignx:002 / # ls bin dev home media opt root sbin sys usr data etc lib mnt proc run srv tmp var / # ps PID USER TIME COMMAND 1 root 0:00 /bin/sh 7 root 0:00 ps / # ls /etc/nginx/conf.d/ default.conf
ベストプラクティスENTRYPOINT使用方法:設定ファイルには、画像の中に注入されたビルドのビルド、前に予め作成しました。唯一異なるプロファイルため、問題を解決するために、さまざまなサービスのプロファイルを動的に作成を実現し、複数の画像を作成する必要がありましたことができます。
ユーザー
プロセスの所有者は、以下のnginxのように、ルートである場合に、ユーザの背景を使用し、ユーザが指定されていません。ルートであることを望まないが、このコマンドを使用するとき。
/ # ps PID USER TIME COMMAND 1 root 0:00 nginx: master process nginx -g daemon off;
使用されるか、またはUIDドッキングウィンドウの実行、CMD、ENTRYPOINTを実行したユーザー名、
デフォルトはrootです
语法:USER <UID> | <ユーザー名>
またはユーザ名UIDは、画像内に存在するが、/ etc / passwdファイル内に存在でなければなりません。
健康診断:
プロセスがまだコンテナを実行している状態を働いているかどうかを定期的に確認してください。ドッキングウィンドウ自体が自動的にコンテナプロセスがまだ生きているチェック、またはデッドタイムがフォアグラウンドで実行されていない場合、ドッキングウィンドウは自動的にコンテナを殺すでしょう。しかし、これはさらにいくつかのコンテナが生きている場合、十分ではありませんが、そう処理容器はまだ働いているかどうか、実行されているチェックするために、独自のコマンドを定義するには、死の同等のサービスを、提供することはできません。
構文:
- ヘルス[OPTION] CMDコマンド
- オプション:
- --interval =:チェック間隔(デフォルト:30秒)
- --timeout =:定義されたタイムアウト期間(既定値:30秒)
- --start-期間=:最初のヘルスチェックを開始するために長く待つ(デフォルト:0秒)
- --retries =:すぐに再び数回コンテナ、およびテストを殺していない、不健康ました。再テスト(:3デフォルト)の数。
- 健康テストの結果:
- 0:成功
- 1:不健康
- 2:予約済み(使用のために予約)
- オプション:
- ヘルスなし
- ヘルス[OPTION] CMDコマンド
例:ヘルスチェック結果が正常です。
FROM nginx:alpine LABEL maintainer="MageEdu <[email protected]>" ENV NGX_DOC_ROOT="/data/web/html/" ADD entrypoint.sh /bin/ ADD index.html ${NGX_DOC_ROOT} HEALTHCHECK --interval=3s --timeout=3s \ CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/ CMD ["/usr/sbin/nginx", "-g", "daemon off;"] ENTRYPOINT ["/bin/entrypoint.sh"]
結果はそれを確認しました。
# docker run --name b1 --rm mynginx:v001 127.0.0.1 - - [08/Dec/2019:13:54:18 +0000] "GET / HTTP/1.1" 200 612 "-" "Wget" "-" 127.0.0.1 - - [08/Dec/2019:13:54:21 +0000] "GET / HTTP/1.1" 200 612 "-" "Wget" "-" 127.0.0.1 - - [08/Dec/2019:13:54:25 +0000] "GET / HTTP/1.1" 200 612 "-" "Wget" "-"
例:健康テストの結果は正常ではありません。FOUNDが正常でない、[直接] 1を殺します。コンテナが開始した後、彼はすぐに殺されました。
FROM nginx:alpine LABEL maintainer="MageEdu <[email protected]>" ENV NGX_DOC_ROOT="/data/web/html/" ADD entrypoint.sh /bin/ ADD index.html ${NGX_DOC_ROOT} HEALTHCHECK --interval=1s --timeout=1s --retries=1 \ CMD wget -O - -q http://${IP:-0.0.0.0}:10080/ || kill 1 CMD ["/usr/sbin/nginx", "-g", "daemon off;"] ENTRYPOINT ["/bin/entrypoint.sh"]
SHELL:指定RUN、CMD、ENTRYPOINTコマンドを実行すると、シェル、デフォルトでは/ binに/のsh -cです。
- 语法:SHELL [ "実行"、 "パラメータ"]
- 複数回出現することができ、それぞれの時間は、一回カバーされます。
STOPSIGNAL:[名前]ドッカー停止容器15の信号を送信する工程1のデフォルトのPIDです。STOPSIGNALは、別の信号を指定することができます。
- 構文:STOPSIGNAL信号。
ARG:
--build-argを介してビルドは、[]変数dockerfileの内部に渡されると
あなたが複数のARGを持つことができますdockerfile
语法:ARG <名前> [= <デフォルト値>]
dockerfileにARGのデフォルト値が設定できます
ARGバージョン= 1.14
例:
FROM nginx:alpine ARG author="MageEdu <[email protected]>" LABEL maintainer=${author}
確認結果:ビルドは、--build-引数を使用していません
# docker build -t mynginx:v002 ./ # docker image inspect mynginx:v002 "Labels": { "maintainer": "MageEdu <[email protected]>" },
結果は確認さ:--build-引数をビルド、使用している場合
# docker build --build-arg author="abc <[email protected]>" -t mynginx:v002 ./ # docker image inspect mynginx:v002 "Labels": { "maintainer": "abc <[email protected]>" },
ONBUILD
- このコマンドをビルドは実行されません。
- あなたがベースイメージ、ビルドの実装として誰か作られた画像を撮るときは、ONBUILDコマンドが実行されます。
- 構文:(FROMとMAINTAINERを除く)ONBUILD任意のコマンドdockerfile
- それは、ダウンロードするリモートファイルであれば問題ありません場合は、ADD ONBUILD ADDまたはONBUILD COPY他の誰かがあなたのイメージを撮るときに知っていることはありませんので、余分に注意するベースイメージは、ファイルが置かれます。