Dockerfile の一般的なコマンドの概要

Dockerfile の一般的なコマンドの概要

構文の構成:

1 注釈情報
2 コマンド --- パラメータ [通常は大文字 | 実際には大文字と小文字は区別されません]
3 順次実行
4 最初の非コメント行は[ベースイメージに基づく]からでなければならない
5 専用のディレクトリが必要 [自分で作成する]
6 最初の文字は大文字にする必要があります --- Dockerfile
7 ファイルやパッケージグループに依存するイメージを作成する場合は、事前に専用のディレクトリに準備しておく必要があります

.dockerignore ファイル - 各行に無視ファイルを定義します
--作業ディレクトリに作成
例: pam.d/su*

.............................................................

Dockerfile の一般的な指示:

1 FROM ---ベースイメージを指定する

ベースイメージが存在しない場合は、次の形式を使用して Docker Hub からプルされます。
<画像>:[タグ]から
<image>@digest[チェックサム]から
現在のホストにこのイメージがない場合、自動的に公式ウェブサイトHUBにアクセスしてダウンロードします。
..............................................

2 MAINTANIER -- Dockerfileを提供する作成者は個人情報を提供する

[徐々に放棄される]
LABLE -- MAINTANIER に代わる
具体的な用途:
LABLE メンテナー="著者情報"

使用する形式:

管理者「guowei <[email protected]>」

..............................................................

3 コピー - ホストマシン内のファイルをイメージにコピーします。

ファイルはDockerfileの作業ディレクトリにある必要があります
src オリジナルファイル
-- ワイルドカードをサポート
--通常は相対パス
dest 宛先パス
--通常は絶対パス

空白文字で区切られた文字列は "" で区切る必要があります。そうしないと、2 つのファイルとして扱われます。

ファイルコピーのガイドライン:
1 src はビルドコンテキスト内のパスでなければならず、親ディレクトリではありません
2 srcがディレクトリの場合、その内部のファイルまたはサブディレクトリが再帰的にコピーされます。
しかし、srcディレクトリ自体はコピーされません
3 複数のsrcが指定されている場合、またはsrcでワイルドカードが使用されている場合、destは
ディレクトリであり、/ で終わる必要があります
4 dest ディレクトリが存在しない場合は、親ディレクトリも含めて自動的に作成されます。
..............................................................

4 ADD - COPYコマンドに類似

URL パスをサポート ---- ネットワークにアクセスできる場合は、ネットワークにアクセスしてローカルにダウンロードし、イメージにパッケージ化します。

操作ガイドライン:
1 srcがURLでdestが/で終わらない場合、srcで指定されたファイルがダウンロードされ、destとして直接作成されます。destが/で終わる場合、ファイル名URLで指定されたファイルが直接ダウンロードされ、dest/filenameとして保存されます。

2 圧縮パッケージの場合は解凍されますが、URLパスで取得したtarファイルは展開されません

3 src が複数ある場合、またはワイルドカードが直接的または間接的に使用されている場合、dest は / で終わるディレクトリ パスである必要があります。dest が / で終わらない場合は、通常のファイルと見なされます。
src の内容は dest に直接書き込まれます。

...............................................................

5 WORKDIR --作業ディレクトリを指定する

毎回、この命令の後続の命令にのみ影響します

ADD nginx-1.14.2.tar.gz /usr/local/src/ -- 影響なし

ワークディレクトリ /usr/local/src/

nginx-1.14.2.tar.gz ./ を追加します --影響を受けます

.............................................................

6巻

Docker によって管理されるボリュームのみを定義できます。
ボリューム /data/mysql

実行すると、ホスト ディレクトリの下にボリューム ディレクトリがランダムに生成されます。
.............................................................

7 EXPOSE コンテナが外部と通信できるように指定されたリスニングポートを開きます

使用する形式:
公開 80/tcp 23/udp

プロトコルが指定されていない場合、デフォルト値は TCP になります。

ここで指定されたポートを公開するには、-P オプションを使用してください。
しかし、このポートに関連付けられているホストのポートはランダムです。
..............................................................

8 環境

イメージに必要な環境変数を定義するために使用され、Dockerfileファイル内の他のコマンドによって呼び出すことができます。

通話形式:
$A または ${A}

ENV <キー> <値>
ENV <キー>=<値>

最初の形式では、キーの後のすべてが <value> の一部と見なされます。したがって、一度に設定できる変数は 1 つだけです。

2番目の形式は、一度に複数の変数を設定するために使用できます。各変数は<key>=<value>です。
<value> にスペースが含まれている場合は、バックスラッシュ (\) でエスケープするか、<value> を引用符で囲むことができます。さらに、バックスラッシュは継続にも使用できます。

複数の変数を定義する場合。すべての機能を同じレイヤーで完了するには、2 番目の方法をお勧めします。具体的な使用法:
環境変数 JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
環境変数クラスパス $JAVA_HOME/lib/:$JRE_HOME/lib/
環境変数 PATH $PATH:$JAVA_HOME/bin/

ENV A /web/html

index.html をコピー ${A:-/web/html}

docker run で変数を渡す:
docker run -e [list] は変数値を渡します。dockerfile で変数を割り当てておけば、docker run でも引き続き値を割り当てることができます。
docker run --name b1 --rm -e A=xx [イメージID]
docker ビルド プロセスには影響しません。

printenv -- 環境変数情報を出力する

..............................................................

9 RUNコマンド:

使用する形式:
RUN <コマンド>
RUN ["<実行可能ファイル>","<パラメータ1>","<パラメータ2>"]

最初の形式では、<command コマンドは通常シェル コマンドであり、"/bin/sh -c"> として実行されます。これは、コンテナー内のこのプロセスの PID が 1 になることができず、Unix シグナルを受信できないことを意味します。したがって、docker stop コマンドを使用してコンテナーを停止すると、このプロセスはシグナルを受信しません。

2番目の構文形式のパラメータはJSON形式の配列であり、<executable>は実行するコマンドであり、次の
<paramN> はコマンドに渡されるオプションまたはパラメータです。ただし、この形式で指定されたコマンドは "/bin/sh -c"> として実行されるわけではないため、変数置換やワイルドカード置換などの一般的なシェル操作は実行されません。ただし、実行するコマンドがこのシェル機能に依存する場合は、次の形式に置き換えることができます。
RUN ["/bin/bash","-c","<実行可能ファイル>","<パラメータ1>"]

........................................................................

10 CMDコマンド: docker runで実行

文法の書き方には3つの方法がある
1. CMD ["executable","param1","param2"] -- ID 1 のプロセスの特定のインスタンスを起動します。

コマンド ["/bin/sh","-c","/bin/httpd","-f","-h /web/html]

2. CMD ["param1","param2"]
3. CMD コマンド param1 param2 -- シェルのサブプロセスとして直接操作する
param* = 実行パラメータ(2番目など)
コマンド ["nginx"]

docker run -it -p 8888:80 172.20.23.31/server1/nginx-base:v1 nginx

二重引用符のみ!

CMD ["パラメータ1","パラメータ2"]
--この使用法は、ENTRYPOINT命令のデフォルトパラメータを提供するために使用されます。

スクリプトを実行するために使用できます:
スクリプトを追加:

run_tomcat.sh を追加します /apps/tomcat/bin/run_tomcat.sh

chmod +x /apps/tomcat/bin/run_tomcat.sh を実行します。

chown -R tomcat:tomcat /apps /data/tomcat を実行します。

CMD ["/apps/tomcat/bin/run_tomcat.sh"] -- スクリプトを参照してください。

..............................................................

11 エントリーポイント

CMD命令に似た関数は、コンテナのデフォルトの実行プログラムを指定するために使用され、コンテナを別の実行可能プログラムのようにする。

CND とは異なり、この命令で起動されたプログラムは docker run コマンドラインで指定されたパラメータによって上書きされません。また、これらのコマンドラインパラメータは ENTRYPOINT で指定されたプログラムにパラメータとして渡されます。

使用する形式:

ENTRYPOINT <コマンド>
ENTRYPOINT ["<実行可能ファイル>","<パラメータ1>","<パラメータ2>"]

docker runコマンドに渡されたコマンドパラメータは、CMDで指定されENTRYPOINTに追加された内容を上書きします。
コマンドは最終的にパラメータとして使用される

Dockerfile ファイルにはこのような命令が複数ある場合がありますが、最後の命令のみが有効になります。

docker run を実行する場合、--entrypoint 文字列オプションを使用して渡されたコマンドは、Dockerfile で定義された ENTRYPOINT 命令をオーバーライドできます。

Nginx 設定ファイルがパラメータを受け取れるようにする方法

スクリプトを作成します。

#!/bin/bash
#
cat > /etc/nginx/conf.d/www.conf <<EOF
サーバー{
サーバー名 ${HOSTNAME};
${IP:-0.0.0.0}:${PORT:-80}をリッスンします。
ルート ${ROOT:-/web/html};
}
終了
実行 "$@"
chmod +x nginx-conf.sh

Dockerファイル:

xxxより
環境変数 ROOT='/web/html/'
index.html ${ROOT}を追加します
nginx-conf.sh /bin/nginx-conf.shを追加します
CMD ["/usr/sbin/nginx","-g","デーモンオフ;"]
エントリポイント ["/bin/nginx-conf.sh"]
docker run --name b1 --rm -P -e "PORT=8080" [イメージID]

注意: 二重引用符が必要です。 ! !
.............................................................................

12 ユーザーコマンド:

イメージの実行時またはDockerfileの実行時にRUN、CMD、またはENTRYPOINTを指定するために使用されます。
コマンドで指定されたプログラムのユーザー名またはUID

デフォルトでは、コンテナは root として実行されます。

形式:
ユーザー <UID>|<ユーザー名>

<UID> は任意の番号にすることができますが、実際には /etc/passwd 内のユーザーの有効な番号である必要があります。
UID を指定しないと、docker run コマンドは失敗します。

コンテナ内の/etc/passwdファイルに存在する必要があります

................................................................................................

13 健康チェック

健康状態のモニタリング
HEALTHCHECK NONE -- 監視しない

一般的なオプション:
--interval=DURATION デフォルトは30秒です。監視する頻度です。
--timeout=DURATION デフォルト 30 秒 --監視タイムアウト
--start-period=DURATION --Dockerコンテナが起動したら、ヘルスチェックを実行するのにどのくらいの時間がかかりますか?デフォルトは0秒です
--retries=N デフォルトは 3 回です。デフォルトのチェック回数は失敗とみなされます。

応答値:
0 - 成功
1--失敗
2--カスタマイズ

アプリケーション例:

ヘルスチェック --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit1

Dockerfile 内のアプリケーション:

ヘルスチェック --start-period=3s CMD wget -O - -q http://{IP:-0.0.0.0}:${PORT:-80}/

docker run でも定義できます:

--health-cmd 文字列
--health-interval 期間
--health-retries int
--health-start-period 期間
--health-timeout 期間

..............................................................

14 SHELLコマンド:

["cmd","/S","/C"] --windons

.............................................................

15 STOPSIGNALコマンド:

STOPSIGNAL 信号名

停止コマンドの信号を定義します。

SIGKILL --9 シグナル

.............................................................

16 ARGパラメータ:

dockerビルドプロセスで使用される

--build-arg によってパラメータとして渡すことができます。
具体的な用途:

ARG 作者=tim
LABLE メンテナー = ${author}
docker build --build-arg auther=tom -t xxx ./

docker ビルド中に dockerfile 内の arg 変数が --build-arg 変数で設定されている場合、コマンドライン インターフェイスの変数値が最終値になります。
..............................................................

17 オンビルド

Dockerfileでトリガーを定義するために使用します
Dockerfileはイメージファイルを作成するために使用され、他のアプリケーションのベースイメージとしても使用できます。
Dockerfileはfromで指定されたパラメータとして使用され、新しい影響ファイルを作成するために使用されます。

ビルド プロセス中に次の Dockerfile の from 指定が実行されると、ONBUILD で指定されたトリガーがトリガーされ、そのベース イメージの Dockerfile ファイルが作成されます。

形式:
ONBUILD Dockerfileの実行する命令

任意のコマンドをトリガー コマンドとして登録できますが、ONBUILD はそれ自体の中にネストすることはできず、メンテナー コマンドからトリガーされることもありません。

onbuildディレクティブを含むDockerfileを使用して構築されたイメージは、ruby:2.0-onbuildなどの特別なタグを使用する必要があります。

指定されたソース ファイルが見つからない場合、ビルド プロセス コンテキストが失敗するため、onbuild ディレクティブで add または copy ディレクティブを使用する場合は、細心の注意を払ってください。

他の人がこの画像を参照すると実行されます!最初のビルドプロセスでは実行されません

以下もご興味があるかもしれません:
  • Dockerfile を使用して Docker でイメージを構築する方法
  • Dockerfileを使用してイメージを構築する方法
  • Dockerfile の COPY コマンドと ADD コマンドの詳細な説明
  • Dockerfile の CMD および ENTRYPOINT コマンドの詳細な説明
  • Dockerfileイメージ構築ファイルとDockerの関連コマンドの詳細な紹介
  • Docker の基礎: Dockerfile コマンドの詳細な説明
  • Dockerfile ファイルの書き込みとイメージ構築コマンドの分析

<<:  mysql 5.7.18 winx64 無料インストール設定方法

>>:  Windows10にmysql5.7.18をインストールするチュートリアル

推薦する

docker で php+nginx+swoole+mysql+redis 環境を構築する方法

オペレーティングシステム: Alibaba Cloud ESC インスタンス centos7.4ソフ...

HTML で複数のフォームのテキスト ボックスを揃える方法

フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...

デュアル VIP を使用した高可用性 MySQL クラスタの構築

目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...

JS ベースの Ajax 同時リクエスト制御を実装する方法

目次序文Ajax シリアルおよびパラレルAjaxの同時リクエスト制御のための2つのソリューションPr...

Dockerにおけるオーバーレイネットワークの詳細な説明

Docker 公式ドキュメントからの翻訳、原文: https://docs.docker.com/n...

黒、白、グレーの控えめでエレガントなウェブデザインを鑑賞

クラシックな色の組み合わせの中でも、黒、白、グレーの時代を超えた魅力を否定できる人はおそらくいないで...

システムエラー 1067 を解決するための MySQL データベース グリーン バージョンのインストール チュートリアル

ソフトウェアのグリーンバージョンとインストールバージョンの違いは何ですか?通常、ファイルのインストー...

MySQL インデックスクエリ最適化スキルを習得するための記事

序文この記事では、DBA がいないチームが参考にできるように、MySQL の一般的な使用に関するヒン...

効率をN倍に高めるVimクイックリファレンステーブル15個

昨年の前半から開発と娯楽のために Linux を使い始めましたが、今では Windows には戻れま...

ウェブフォーム送信方法の詳細な概要

まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...

MySQL ジョイントテーブル更新デー​​タの詳細な例

1.MySQL UPDATE JOIN構文MySQL では、UPDATE ステートメントでJOIN句...

JS はシンプルな todoList (メモ帳) 効果を実装します

メモ帳プログラムは、HTML + CSS + JavaScript の 3 つの主要なフロントエンド...

MySQL データ型の詳細

目次1. 数値型1.1 数値型の分類1.1.1 浮動小数点数1.1.2 ビットタイプ1.1.3 時間...

VMware 仮想化 KVM のインストールと展開のチュートリアルの概要

仮想化1. 環境セントオス7.3 selinuxとファイアウォールを無効にする2. 仮想化環境の構成...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...