Dockerfileの指示と基本構造の説明

Dockerfileの指示と基本構造の説明

Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。

基本構造

Dockerfile はコマンドラインで構成され、# で始まるコメント行をサポートします。 一般的に、Dockerfile は、ベースイメージ情報、メンテナー情報、イメージ操作指示、コンテナ起動時に実行される指示の 4 つの部分に分かれています。

例えば:

// 基本的なイメージ情報 FROM daocloud.io/node:7 
// メンテナー情報 MAINTAINER abel.yang <[email protected]>
LABEL 説明="この画像は Web 用に作成されています"
//ミラー操作コマンド RUN mkdir -p /opt/apps/epp
コピー . /opt/apps/epp
ワークディレクトリ /opt/apps/epp/epp-web/server
環境言語 C.UTF-8
ENV TZ=アジア/上海
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
エクスポーズ3001
//コンテナが起動したらコマンドCMD [ "npm", "start" ]を実行する

このうち、まずベースとなるイメージ名を指定し、次にメンテナー情報を示すことをお勧めします。 これに続いて、RUN 命令などのイメージ操作命令が続き、イメージに対して次のコマンドが実行されます。

RUN 命令が実行されるたびに、新しいレイヤーがイメージに追加され、送信されます。 最後に、コンテナを実行する際の操作コマンドを指定する CMD 命令があります。

命令

INSTRUCTION 引数、命令には FROM、MAINTAINER、RUN などが含まれます。

形式は FROM <image> または FROM <image>:<tag> です。

最初の命令は FROM 命令である必要があります。また、同じ Dockerfile 内に複数のイメージを作成する場合は、複数の FROM 命令を使用できます (イメージごとに 1 回)。

メンテナー

形式は MAINTAINER で、メンテナー情報を指定します。

走る

形式は RUN または RUN ["executable", "param1", "param2"] です。

前者はシェル端末でコマンドを実行します (つまり /bin/sh -c)。後者は exec を使用して実行されます。別の端末を指定するには、RUN ["/bin/bash", "-c", "echo hello"] などの 2 番目の方法を使用します。

各 RUN 命令は、現在のイメージに基づいて指定されたコマンドを実行し、それを新しいイメージとして送信します。コマンドが長い場合は、\ を使用して折り返すことができます。

CMDF

3つのフォーマットをサポート

  • CMD ["executable","param1","param2"] 実行には exec を使用します。これが推奨される方法です。
  • CMD コマンド param1 param2 は /bin/sh で実行され、対話を必要とするアプリケーションに提供されます。
  • CMD ["param1","param2"] は ENTRYPOINT にデフォルトのパラメータを提供します。

コンテナの起動時に実行されるコマンドを指定します。各 Dockerfile には CMD コマンドを 1 つだけ含めることができます。複数のコマンドが指定された場合は、最後のコマンドのみが実行されます。

ユーザーがコンテナの起動時に実行するコマンドを指定した場合、CMD で指定されたコマンドが上書きされます。

さらす

形式は EXPOSE <port> [<port>...] です。

相互接続されたシステムで使用するためにコンテナが公開するポート番号を Docker サーバーに伝えます。コンテナを起動するときに -P を渡す必要があり、Docker ホストは指定されたポートに転送するポートを自動的に割り当てます。

環境

形式は ENV <キー> <値> です。 後続の RUN 命令で使用され、コンテナの実行中に保持される環境変数を指定します。

追加

形式は ADD <src> <dest> です。
このコマンドは、指定された <src> をコンテナ内の <dest> にコピーします。 <src> は、Dockerfile が配置されているディレクトリへの相対パス、URL、または tar ファイル (ディレクトリに自動的に解凍される) にすることができます。

コピー

形式は COPY <src> <dest> です。
ローカル ホストの <src> (Dockerfile が配置されているディレクトリへの相対パス) をコンテナーの <dest> にコピーします。

ローカルディレクトリをソースディレクトリとして使用する場合は、COPY を使用することをお勧めします。

エントリーポイント

2 つの形式:

  • ENTRYPOINT ["実行可能ファイル", "パラメータ1", "パラメータ2"]
  • ENTRYPOINT コマンド param1 param2 (シェルで実行)。

構成コンテナの起動後に実行されるコマンドであり、docker run によって提供されるパラメータによって上書きすることはできません。

各 Dockerfile には ENTRYPOINT を 1 つだけ指定できます。複数の ENTRYPOINT を指定した場合、最後の ENTRYPOINT のみが有効になります。

音量

形式はVOLUME ["/data"]です。

ローカル ホストまたは他のコンテナーからマウントできるマウント ポイントを作成します。通常、これは、維持する必要があるデータベースやデータを保存するために使用されます。

ユーザー

形式は USER daemon です。

コンテナを実行するときにユーザー名または UID を指定します。後続の RUN でも指定されたユーザーが使用されます。

サービスに管理者権限が必要ない場合は、このコマンドを使用して実行ユーザーを指定できます。そして、必要なユーザーを事前に作成しておくことができます

たとえば、 RUN groupadd -r postgres && useradd -r -g postgres postgres 。一時的に管理者権限を取得するには、 gosuを使用できますが、 sudoよりも推奨されません。

ワークディレクトリ

形式は WORKDIR /path/to/workdir です。

後続の RUN、CMD、および ENTRYPOINT 命令の作業ディレクトリを構成します。

複数の WORKDIR ディレクティブを使用できます。後続のコマンドのパラメータが相対パスの場合、それらは前のコマンドで指定されたパスに基づきます。例えば

ワークディレクトリ /a 
ワークディレクトリb 
ワークディレクトリ c 
実行パスワード 
最終パスは /a/b/c です。

オンビルド

形式はONBUILD [INSTRUCTION]です。

作成したイメージを他の新しく作成したイメージのベースイメージとして使用する場合に実行する操作手順を設定します。

たとえば、Dockerfile は次の内容の image-A を作成します。

[...]
ONBUILD ADD ./app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

image-A をベースに新しいイメージを作成し、新しい Dockerfile で FROM image-A を使用してベースイメージを指定すると、ONBUILD 命令の内容が自動的に実行され、最後に 2 つの命令を追加するのと同じになります。

画像Aより

#以下を自動的に実行する
./app/src を追加します。
/usr/local/bin/python-build --dir /app/src を実行します。

ONBUILD 命令を使用するイメージの場合は、 ruby:1.9-onbuildのようにタグでこれを示すことをお勧めします。

画像を作成する

Dockerfile を記述したら、docker build コマンドを使用してイメージを作成できます。

docker build -t イメージ名。
// 注意。忘れないでください。

以下は Dockerhub 上の Dockerfile の例 2 つです。

# グーグル
#
# バージョン 0.0.1
Ubuntuから
メンテナー Victor Vieux <[email protected]>
apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server を実行します。
# ubuntu の親イメージに基づいて inotify-tools、nginx、apache2、openssh-server をインストールして、新しい Nginx イメージを作成します。
# VNC 経由の Firefox
#
#バージョン 0.3
Ubuntuから
# 偽のディスプレイとFirefoxを作成するためにvnc、xvfbをインストールします
apt-get update && apt-get install -y x11vnc firefox を実行します。
mkdir /.vnc を実行します。
# パスワードを設定する
x11vnc -storepasswd 1234 ~/.vnc/passwd を実行します。
#Firefox を自動起動
bash -c 'echo "firefox" >> /.bashrc' を実行します。
エクスポーズ5900
CMD ["x11vnc", "-forever", "-usepw", "-create"]
# Ubuntu 親イメージに基づいて、Firefox と VNC ソフトウェアをインストールします。起動後、ユーザーはポート 5900 経由で VNC を介して Firefox を使用できます。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • カスタム Docker イメージを作成するための Dockerfile の詳細な説明と CMD と ENTRYPOINT 命令の比較
  • Dockerコンテナの操作手順の概要と詳細説明
  • Dockerfile における ENV 命令の具体的な使用法の詳細な説明
  • Dockerでイメージを作成するためのDockerfile命令の詳細な説明
  • Dockerfile 命令 ADD と COPY の紹介
  • Dockerfile命令VOLUMEの簡単な紹介
  • Docker 指示の収集と整理 (コレクション)
  • Dockerfile の手順の説明
  • Dockerの基本的な手順

<<:  MySQL ステートメントコメントの紹介

>>:  jsはシングルクリックでテーブルを変更することを実装します

推薦する

vue+elementUI で埋め込みテーブルを実装する方法の例

大学 4 年生のときのインターンシップ中に、表内のデータの番号をクリックすると、そのデータの下に新し...

QTとJavaScript間のインタラクティブデータの実装

1. QTからJSへのデータフロー1. QTはJS関数を呼び出し、JSはパラメータを通じてQTの値を...

MySQL のキーとインデックスの違い

まずはコードを見てみましょう: ALTER TABLE reportblockdetail ADD ...

CSS の画像パスの問題に関する議論 (同じパッケージ/異なるパッケージ)

CSS ファイルでは、背景を使用する、つまり背景画像を追加する必要がある場合があります。これは通常、...

Dockerコンテナのネットワークポート設定プロセスの詳細な説明

ネットワークポートの公開実際、Docker にはネットワーク ポートの公開に関わる 2 つのパラメー...

Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

1. 事件の背景:仕事上、Ubuntu への vscode リモート接続を使用する必要があります。 ...

要素 ui の el-table の列にさまざまなスタイルのデータを動的に実装する例

問題の説明Ele.me UI のフレームワークでは、入力データは el-form であり、出力データ...

sbinディレクトリを生成せずにNginxをインストールするソリューション

エラーの説明: 1. Linux (CentOS 7 64) システムに Nginx (1.18.0...

nginx で gzip 圧縮を実装してウェブサイトの速度を向上させる方法

目次gzip 圧縮を使用する理由は何ですか? nginxはgzipを実装するgzip処理nginx ...

HTML テーブル マークアップ チュートリアル (10): セル パディング属性 CELLPADDING

セルのパディングは、セルの内容と境界線の間の距離です。基本的な構文<TABLE セルパディング...

CSS3実践手法のまとめ(推奨)

1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....

Nginx のステータス監視とログ分析の詳細な説明

1. Nginx ステータス監視Nginx には、Nginx の全体的なアクセス ステータスを監視す...

Docker で Elasticsearch Kibana と ik Word Segender をデプロイする詳細な説明

esインストール docker pull elasticsearch:7.4.0 # -d : バッ...

CSS3の新しいセレクタの例

構造(位置)擬似クラスセレクタ(CSS3) :first-child : 指定されたセレクタは、親要...

JavaScriptの再帰の詳細

目次1. 再帰とは何ですか? 2. 再帰を使って数学の問題を解く1. 1 * 2 * 3 * 4 …...