この記事では、dockerFile コマンドに関する関連知識を提供します。このコマンドには、指示が 1 つずつ含まれています。各指示により、イメージ制作ファイルのレイヤーが構築されます。皆様のお役に立てれば幸いです。
推奨学習: 「docker ビデオ チュートリアル 」
DockerFile コマンドの詳細な説明
Dockerfile には、次の手順が含まれています。 1 つの命令ごとに、イメージ生成ファイルのレイヤーが構築されます。
イメージを構築します
docker build [选项] docker build -t nginx:v3 . # . 表示Dockerfile在当前目录
FROM でベース イメージを指定します
FROM でベース イメージを指定します。そのため、FROM は必須ですデバイスの Dockerfile コマンド内で、最初のコマンドである必要があります。
最初から、このイメージは仮想概念であり、実際には存在しません。空白のイメージを表します。次の命令がイメージの最初のレイヤーとして存在し始めます。
RUN 実行コマンド
RUN は、コマンドラインコマンドを実行するために使用されます。
シェル形式:
RUN RUN echo '<h1 id="Hello-Docker">Hello, Docker!</h1>' > /usr/share/nginx/html/index.html## の 2 つの形式があります。 #exec 形式:
RUN ["可执行文件", "参数1", "参数2"]Union FS には最大レイヤ数に制限があります。たとえば、AUFS の最大レイヤ数は以前は 42 でしたが、現在は 127 レイヤを超えることはできません。同じ関数の場合、 && は、必要なコマンドを連結するために使用する必要があります。画像レイヤーの数を簡略化する
COPY ファイルをコピー
COPY [--chown=<user>:<group>] COPY [--chown=<user>:<group>] ["",... ""]</group></user></group></user>
# 把当前目录的a.txt文件复制到镜像的根目录 COPY a.txt /a.txt
ADD ファイルをコピーする (ダウンロード ファイルまたは解凍ファイル) )
ADD [--chown=<user>:<group>] http://xxx # 下载文件到镜像的目标路径 ADD [--chown=<user>:<group>] ./a.tar.gz # 复制压缩包,并自动解压到目标路径</group></user></group></user>
CMD は、コンテナーのメイン プロセスのデフォルトの起動コマンドを指定します
CMD ["可执行文件", "参数1", "参数2"...]
# 指定进入容器马上指定 cat /a.txt CMD ["sh","-c", "cat /a.txt"]docker run -it イメージを実行するときに、 /bin/bash と同様のコマンド、sh -c cat は /a.txt で自動的に実行されます。それ以外の場合は、コンテナーのメイン プロセスの起動コマンドがユーザー指定の CMD
ENTRYPOINT に従って指定されます。 、CMD に似ています
形式は CMD と一貫していますが、相違点は次のとおりです1. ENTRYPOINT を使用してパラメータを渡します Specify ENTRYPOINT [ "curl", " Dockerfile 内の -s", "http://myip.ipip.net" ]、コマンド ラインは docker run を使用します。myip -i の場合、-i パラメーターは ENTRYPOINT コマンドに渡されます。最後に # を入力するときは、 ## コンテナー、コンテナーは、curl -s http://myip.ipip.net -i
2. CMD とは関係がなく、コンテナー CMD とも関係のない初期化作業を実行します。 CMD が何であっても、事前に前処理作業を行う必要があります。
ENTRYPOINT ["docker-entrypoint.sh"] に似ています。このスクリプトは、ユーザーの ID が正当であるかどうかなどをチェックします。
ENV は環境変数を設定しますENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...</value2></key2></value1></key1></value></key>
ARG [=]
ARG 命令には有効な範囲があります。FROM 命令の前に指定した場合、FROM 命令でのみ使用できます。
ARG DOCKER_USERNAME=library FROM ${DOCKER_USERNAME}/alpine
FROM の後に指定した場合、各ステージで使用される変数は各ステージで個別に指定する必要があります
FROM ${DOCKER_USERNAME}/alpine # 在FROM 之后使用变量,必须在每个阶段分别指定 ARG DOCKER_USERNAME=library RUN set -x ; echo ${DOCKER_USERNAME}VOLUME anonymous volume
VOLUME ["", ""...]
VOLUME
順番にユーザーが実行時に動的ファイルがボリュームとして保存されるディレクトリをマウントし忘れることを防ぐために、Dockerfile で特定のディレクトリを匿名ボリュームとしてマウントするように事前に指定できるため、ユーザーが実行時にマウントを指定しない場合でも、 , アプリケーションはまた、通常の操作中、大量のデータがコンテナー ストレージ レイヤーに書き込まれることはありません。
ここの /data ディレクトリは、コンテナーの実行中に匿名ボリュームとして自動的にマウントされます。 /data に書き込まれた情報はコンテナ ストレージ層には記録されないため、コンテナ ストレージ層のステートレス性が確保されます。
EXPOSE 公開ポートEXPOSE [...]
EXPOSE 命令は、コンテナが実行中にサービスを提供するポートを宣言します。EXPOSE は、コンテナが使用するポートを宣言するだけです。ホストはポート マッピングを自動的に実行しません。
このようなステートメントを Dockerfile に記述することには 2 つの利点があります。1 つは、イメージ ユーザーがイメージ サービスのガード ポートを理解し、構成マッピングを容易にすることです。
もう 1 つは、ランダム ポートを使用する場合です。実行時のマッピング、つまり docker run -P が使用される場合、EXPOSE ポートは自動的かつランダムにマッピングされます。
EXPOSE と実行時の -p
-p はホスト ポートとコンテナ ポートをマッピングするもので、言い換えれば、コンテナの対応するポート サービスを外部に公開します。
WORKDIR は作業ディレクトリを指定します。ディレクトリが存在しない場合、WORKDIR はディレクトリを作成しますWORKDIR
例 1:
WORKDIR /app RUN echo "hello" > world.txt
例 2:
WORKDIR /a WORKDIR b WORKDIR c RUN pwd ## RUN pwd 的工作目录为 /a/b/cUSER 現在のユーザーを指定します
USER [:]
実行中に root として実行されるスクリプトの ID を変更する場合 (サービスを実行する場合など)すでに確立されているユーザープロセスとして、su や sudo を使用しないでください。これらはより面倒な設定を必要とし、TTY が欠落している環境ではエラーが発生することがよくあります。呉須を使うのがおすすめです。
# 建立 redis 用户,并使用 gosu 换另一个用户执行命令 RUN groupadd -r redis && useradd -r -g redis redis # 下载 gosu RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64" \ && chmod +x /usr/local/bin/gosu \ && gosu nobody true # 设置 CMD,并切换到redis用户执行 CMD [ "exec", "gosu", "redis", "redis-server" ]HEALTHCHECK は、コンテナーのステータスが正常かどうかを判断する方法を Docker に指示します
HEALTHCHECK [选项] CMD :设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
オプション:
--interval=:两次健康检查的间隔,默认为 30 秒; --timeout=:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒; --retries=:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次
HEALTHCHECK 命令が指定されている場合画像を使用してコンテナを起動します。初期状態で起動します。HEALTHCHECK 命令のチェックが成功すると健全になります。一定回数連続で失敗すると異常になります。
HEALTHCHECK は 1 回のみ指定できます。複数記述した場合は、最後のもののみが有効になります
CMD 命令的返回值决定了该次健康检查的成功与否:0:成功;1:失败
ONBUILD 指定某些命令只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行
ONBUILD
# 举例如下Dockerfile,初次构建为镜像my-node时,ONBUILD的三行命令不会执行 FROM node:slim RUN mkdir /app WORKDIR /app ONBUILD COPY ./package.json /app ONBUILD RUN [ "npm", "install" ] ONBUILD COPY . /app/ CMD [ "npm", "start" ] # 只要当其他镜像 FROM my-node 从上面镜像作为基础镜像进行构建时,ONBUILD 的命令开始执行
LABEL 为镜像添加元数据
LABEL <key>=<value> <key>=<value> <key>=<value> ...</value></key></value></key></value></key>
# 标注镜像的作者 LABEL org.opencontainers.image.authors="yeasy"
SHELL 指定执行shell命令的参数
SHELL ["可执行程序", "参数"]
SHELL ["/bin/sh", "-c"] RUN lll ; ls # 这里的shell命令将通过 /bin/sh -c 的方式执行
推荐学习:《docker视频教程》
以上がDockerFile コマンドを詳しく理解します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

小さなプロジェクトまたは開発環境でDockerを選択し、大規模なプロジェクトまたは生産環境でKubernetesを選択します。 1.ドッカーは、迅速な反復とテストに適しています。2。Kubernetesは、大規模なアプリケーションの管理と拡張に適した強力なコンテナオーケストレーション機能を提供します。

Linuxは、豊富なツールとコミュニティサポートを提供するネイティブプラットフォームであるため、LinuxでDockerが重要です。 1. docker:sudoapt-getupdateとsudoapt-getinstalldocker-cedocker-ce-clicotainerd.ioを使用します。 2。コンテナの作成と管理:Dockerrun-D-Namemynginx-P80:80NginxなどのDockerrunコマンドを使用します。 3。DockerFileを書き込み:画像サイズを最適化し、マルチステージ構造を使用します。 4。最適化とデバッグ:DockerLogsとDockerexを使用します

Dockerはコンテナ化ツールであり、Kubernetesはコンテナオーケストレーションツールです。 1. Dockerパッケージアプリケーションとその依存関係は、Docker対応環境で実行できるコンテナに依存します。 2。Kubernetesはこれらのコンテナを管理し、自動展開、スケーリング、管理を実装し、アプリケーションを効率的に実行します。

Dockerの目的は、アプリケーションの展開を簡素化し、コンテナ化技術を通じてさまざまな環境でアプリケーションが一貫して実行されるようにすることです。 1)Dockerは、アプリケーションと依存関係をコンテナにパッケージ化することにより、環境の違いの問題を解決します。 2)DockerFileを使用して画像を作成して、アプリケーションがどこでも一貫して実行されることを確認します。 3)Dockerの作業原則は画像とコンテナに基づいており、Linuxカーネルの名前空間とコントロールグループを使用して、分離とリソース管理を実現します。 4)基本的な使用法には、DockerHubからの画像の引き込みと実行が含まれます。高度な使用法には、DockerComposeを使用したマルチコンテナーアプリケーションの管理が含まれます。 5)画像構築の故障やコンテナの障害などの一般的なエラーは、ログやネットワーク構成を介してデバッグできます。 6)パフォーマンス最適化構造

Ubuntu、Centos、およびDebianにDockerをインストールして使用する方法は異なります。 1)ubuntu:aptパッケージマネージャーを使用します。コマンドはsudoapt-getupdate && sudoapt-getinstalldocker.ioです。 2)Centos:Yum Package Managerを使用すると、Dockerリポジトリを追加する必要があります。コマンドは、sudoyumininstall-yyum-utils && sudoyum-config-manager - add-repohttps://download.docker.com/linです

LinuxでDockerを使用すると、開発効率が向上し、アプリケーションの展開を簡素化できます。 1)Ubuntu画像を引く:dockerpullubuntu。 2)ubuntuコンテナを実行:Dockerrun-itubuntu/bin/bash。 3)nginxを含むDockerFileを作成します:fromubuntu; runapt-getupdate && apt-getinstall-ynginx; expose80。 4)画像の作成:dockerbuild-tmy-nginx。 5)コンテナの実行:Dockerrun-D-P8080:80

Dockerは、Linuxのアプリケーションの展開と管理を簡素化します。 1)Dockerは、アプリケーションとその依存関係を軽量でポータブルコンテナにパッケージ化するコンテナ化されたプラットフォームです。 2)Linuxでは、DockerはCgroupと名前空間を使用して、コンテナの分離とリソース管理を実装します。 3)基本的な使用には、画像の引き込みと実行容器が含まれます。 DockerComposeなどの高度な使用は、マルチコンテナーアプリケーションを定義できます。 4)一般的に使用されるDockerLogsとDockerexecコマンドをデバッグします。 5)パフォーマンスの最適化は、マルチステージの構造により画像サイズを縮小することができ、DockerFileをシンプルに保つことがベストプラクティスです。

Dockerは、アプリケーションのパッケージ化、配布、およびアプリケーションの携帯性とスケーラビリティを改善するために使用されるLinuxコンテナテクノロジーベースのツールです。 1)DockerBuildおよびDockerrunコマンドを使用して、Dockerコンテナを構築および実行できます。 2)DockerComposeを使用して、マルチコンテナーDockerアプリケーションを定義および実行して、マイクロサービス管理を簡素化します。 3)マルチステージの構造を使用すると、画像サイズを最適化し、アプリケーションの起動速度を向上させることができます。 4)コンテナログの表示は、コンテナの問題をデバッグする効果的な方法です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 中国語版
中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
