検索
ホームページ運用・保守DockerDockerFile コマンドを詳しく理解します。

この記事では、dockerFile コマンドに関する関連知識を提供します。このコマンドには、指示が 1 つずつ含まれています。各指示により、イメージ制作ファイルのレイヤーが構築されます。皆様のお役に立てれば幸いです。

DockerFile コマンドを詳しく理解します。

推奨学習: 「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 [=]
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/c

USER 現在のユーザーを指定します

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 サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Docker vs. Kubernetes:ユースケースとシナリオDocker vs. Kubernetes:ユースケースとシナリオApr 23, 2025 am 12:11 AM

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

LinuxのDocker:Linuxシステムのコンテナ化LinuxのDocker:Linuxシステムのコンテナ化Apr 22, 2025 am 12:03 AM

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:オーケストレーターDocker:コンテナ化ツール、Kubernetes:オーケストレーターApr 21, 2025 am 12:01 AM

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

Dockerの目的:アプリケーションの展開を簡素化しますDockerの目的:アプリケーションの展開を簡素化しますApr 20, 2025 am 12:09 AM

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

LinuxとDocker:さまざまなLinux分布のDockerLinuxとDocker:さまざまなLinux分布のDockerApr 19, 2025 am 12:10 AM

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です

Mastering Docker:Linuxユーザー向けガイドMastering Docker:Linuxユーザー向けガイドApr 18, 2025 am 12:08 AM

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

LinuxのDocker:アプリケーションとユースケースLinuxのDocker:アプリケーションとユースケースApr 17, 2025 am 12:10 AM

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

Docker:移植性とスケーラビリティのためのコンテナ化アプリケーションDocker:移植性とスケーラビリティのためのコンテナ化アプリケーションApr 16, 2025 am 12:09 AM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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

SublimeText3 Mac版

SublimeText3 Mac版

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