Dockerfile 内の予約語命令の解析処理

Dockerfile 内の予約語命令の解析処理

以前、プロジェクトを迅速にデプロイするために Docker について簡単に学習したことがあります。プロセスは非常に速く進みましたが、Dockerfile ファイルの記述には多少慣れていませんでした。

そこでこの記事を書きました。これが皆さんのお役に立てれば幸いです! ! !

1. Dockerfile とは何ですか?

コンセプト:

Dockerfile は、Docker イメージをビルドするために使用されるビルド ファイルです。一連のコマンドとパラメータで構成されるスクリプトです。

構築するには 3 つの手順が必要です。

  • Dockerfileの作成
  • ドッカービルド
  • ドッカー実行

Centos の例:

CentOS の例:

ゼロから #実際のベースイメージ、
centos-7-x86_64-docker.tar.xz を追加します /

# ラベルの説明 LABEL \  
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS ベースイメージ" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS ベースイメージ" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0のみ" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"] #最後の行で実行されたコマンド

どこで見つけたのでしょうか? hub.docker.com の centos で見つけました。

やり方は分かりませんが、まずは他の人の書き方を見てみることはできます。宿題をコピーすることは誰でもよく知っていると思います。一般的にCV法として知られています😂。

2. Dockerfile構築プロセスの分析

はじめる:

各予約語ディレクティブ (今日の投稿の焦点) は大寫字母始まり、跟隨至少一個參數必要があります。

のように:

ゼロから #実際のベースイメージ、
centos-7-x86_64-docker.tar.xz を追加します /

命令は上から下へ順番に実行されます。

#コメントを示します。

#これはコメントです

各命令は新しいイメージ レイヤーを作成し、イメージをコミットします。

以下のように、入れ子人形のように作ることもできます。

Dockerfile実行プロセス分析: dockerベースイメージからコンテナを実行します

  • コマンドを実行してコンテナに変更を加える
  • 新しいイメージ レイヤーを送信するには、 docker commitと同様の操作を実行します。
  • docker送信されたイメージに基づいて新しいコンテナを実行します。
  • すべての命令が実行されるまで、 dockerfile内の次の命令を実行します。

本文の後半に事例が出てきますので、事例と合わせて振り返ると理解しやすくなります。

ちょっとした追加情報:

  • この段階では、 DockerfileDockerイメージ 、 Dockerコンテナ をソフトウェアの 3 つの異なる段階として見ています。
  • Dockerfileは開発用です ---> Dockerイメージが配信標準になります ---> Dockerコンテナは展開と運用と保守に関係します
  • プロセスに必要なものはすべてDockerfileで定義されています。以前必要だった環境変数、依存パッケージ、ランタイム環境などはすべてDockerfileファイルに書き込まれます。これまでは Liunx サーバーで多数のソフトウェアをダウンロードしたり、多数の設定を行ったりしていましたが、今回ははるかに簡単です。少なくとも私のような初心者にとっては、Docker を使用してデプロイする方がはるかに簡単です。
  • Dockerイメージは、 Dockerfileを使用してファイルが定義された後、Docker ビルド中に生成される Docker イメージです。Docker Dockerが実行されると、実際にサービスの提供が開始されます。

Docker コンテナは実行後すぐにサービスを提供できます。

3. Dockerfileの予約語の指示

Dockerfiel の予約語の指示は次のとおりです。

  1. から
  2. メンテナー
  3. 走る
  4. さらす
  5. ワークディレクトリ
  6. 環境
  7. 追加
  8. コピー
  9. 音量
  10. CMDF
  11. エントリーポイント
  12. オンビルド

3.1 から

ベース イメージ、つまり、現在の新しいイメージが作成されるベースとなるイメージ。

#openjdk:8 に基づいてイメージを作成する FROM openjdk:8

3.2 メンテナー

イメージ管理者の名前とメールアドレス

メンテナー Ning Zaichun [email protected]

3.3 実行

コンテナを構築するときに実行する手順

mkdir -p /conf/my.cn を実行します。

3.4 公開する

現在のコンテナによって公開されているポート

#MyCat の必要なポートを公開します EXPOSE 8066 9066

3.5 ワークディレクトリ

コンテナを作成した後にログインするターミナルのデフォルトの作業ディレクトリを指定します

#コンテナデータボリューム。データ保存と永続化作業に使用されます。WORKDIR /usr/local/mycat

3.6 環境

イメージ構築中に環境変数を設定するために使用します

#イメージ構築プロセス中に環境変数 ENV MYCAT_HOME=/usr/local/mycat を設定するために使用されます

この環境変数は、コマンドの前に環境変数プレフィックスが指定された場合と同様に、後続の RUN 命令で使用できます。また、これらの環境変数は他の命令でも直接使用できます。

のように:

$MYCAT_HOME/mycat を実行します。

3.7. 追加とコピー

追加:

ホスト ディレクトリ内のファイルをイメージにコピーすると、ADD コマンドによって URL が自動的に処理され、tarball が解凍されます。

centos-6-docker.tar.xz を追加します /

コピー:

ADD と同様に、ファイルとディレクトリをイメージにコピーします。

ビルドコンテキストディレクトリの<ソースパス>からイメージの新しいレイヤーの<ターゲットパス>の場所にファイル/ディレクトリをコピーします。

コピー src dest コピー ["src" "dest"]

3.8 ボリューム

コンテナ データ ボリュームは、データの永続性と保存に使用されます。

#mycat設定ファイルアドレスのマッピングアドレスを公開し、起動時にホストフォルダVOLUME /usr/local/mycatを直接マッピングします。

3.9 CMDとENTRYPOINT

CMDF

CMD コマンドは RUN コマンドに似ており、次の 2 つの形式があります。

  • shell形式: CMD<コマンド>
  • exec形式: CMD ["実行ファイル", "パラメータ 1", "パラメータ 2".....]

Dockerfileには複数の CMD 命令を含めることができますが、最後の命令のみが有効になります。 CMD はdocker runの後にパラメータに置き換えられます。

エントリーポイント

コンテナの起動時に実行するコマンドを指定します。

ENTRYPOINT の目的は CMD と同じで、コンテナの起動プログラムとパラメータを指定することです。

違い:

違いを簡単に説明します。CMDは上書きとして理解できます。

コマンド cat /conf/my.cnfCMD /bin/bash

これらの命令は両方ともDockerfileファイルに記述されています。CMD /bin/bash のみが実行されますが、 CMD cat /conf/my.cnf CMD /bin/bashによって以前のものに直接上書きされるため、実行されません。

ENTRYPOINTは異なります。ENTRYPOINT ENTRYPOINT単純に追加として理解できます。

これは主にdocker runに反映されます。dockerfile dockerfile CMDで終わる場合、実行時に追加のコマンドを追加することはできません。そうでない場合、 Dockerfile内のCMDコマンドが上書きされます。

Dockerfileの最後の行がENTRYPOINTで終わる場合は、 docker runコマンドの後にいくつかのコマンドを追加できます。

3.10 オンビルド

継承されたDockerfileをビルドするときに、コマンドが実行されます。親イメージが子に継承された後、親イメージのonbuildがトリガーされます。

4. 実際の戦闘事例

4.1. 独自の CentOS イメージを作成する

4.1.1、はじめに:

まず Alibaba Cloud から CentOS を取得して、どのような問題があるかを確認し、その後カスタマイズしてみましょう。

docker pull centos # イメージをプルする docker run -it centos # イメージを実行する # ===== テスト ====vim ceshi.txtifconfig pwd

なぜそうなるのでしょうか? Docker リポジトリ内の Centos は簡素化されたバージョンであり、カーネルのみが含まれており、他には何もありません。

上記の問題を解決するには、カスタマイズされた Centos が必要です。

4.1.2. Dockerfileを書く

カスタム Centos 用の Dockerfile を作成する

FROM centosMAINTAINER 宁在春<[email protected]>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "success"CMD /bin/bash #最後のものだけが実行されます

次にこれをコピーします。

mkdir -p /usr/local/docker/mycentos # 独自の保存場所を作成する vim Dockerfile

4.1.3. CentOSイメージのビルド

次のコマンドを実行して、docker を実行します。

説明する:

  • -f: Dockerfileファイルが続く
  • -t: イメージ名とバージョン番号が続きます。
  • 最後の小数点: 現在のディレクトリを示します。
  • docker build -f Dockerfile ファイル -t イメージ名: タグ。
  • dockerfile ファイルの名前が dockerfile で、現在のディレクトリにある場合は、次のように省略できます。
  • docker build -t イメージ名:タグ .docker build -t mycentos:1.1 .

埋め込む:

最後の一つを見ることは成功を意味します。

docker imagesすべてのイメージを表示:

4.1.4. Centosイメージを実行する

docker run -it mycentos:1.3pwdifconfig

コンテナに入るディレクトリが/から/usr/localに切り替わる理由は、Dockerfile ファイルにすでに記述されているからです。

ENV MYPATH /usr/localWORKDIR $MYPATH

4.1.5. 画像の変更履歴を表示する

docker 履歴 mycentos:1.1 

ここでは、Dockerfile ファイル内の指示に従ってイメージがレイヤーごとに構築されていることもわかります。

4.2 ONBUILDの例

夫の鏡を最初に作ろう

dockerfileファイルを作成し、 dockerfile2という名前を付けます。

FROM centosRUN yum -y install curlONBUILD RUN echo "サブイメージに継承されました。このステートメントを出力します" CMD ["crul", "-s","http://ip.cn"]
次のコマンドを実行して、docker を起動します。

鏡像を作る

dockerfileファイルを作成し、 dockerfile3という名前を付けます。

my_father_centosRUN から yum -y install curlCMD ["crul", "-s","http://ip.cn"]
次のコマンドを実行して、docker を実行します。 

親イメージ内の文が出力されていることがわかります。

Dockerfile の予約語命令に関するこの記事はこれで終わりです。関連する Dockerfile の予約語命令については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerfile ファイルの書き込みとイメージ構築コマンドの分析
  • Dockerfileの簡単な紹介
  • Docker イメージの階層化と Dockerfile の記述スキル
  • Dockerfile における VOLUME と docker -v の違い
  • Dockerfile ビルド中に発生する「/bin/sh: pip: コマンドが見つかりません」という問題の解決方法
  • DockerはDockerFileビルドプロセス命令の解析を実行します

<<:  HTML+JS に基づくシンプルな年齢計算ツールの実装

>>:  CSSは親コンテナのdivをimg画像で埋め、コンテナのサイズに適応します。

推薦する

実務経験7年のフロントエンドスーパーバイザーによる経験共有

今日はベテランの貴重な経験を共有します。著者は技術管理の経験が7年あり、多い時は80人以上を率いてい...

MYSQLが中国語を認識できない問題の恒久的な解決策

ほとんどの場合、MySQL はインストールしたばかりのときは中国語をサポートしません。これはエンコー...

HTML 基本要約推奨事項 (タイトル)

HTML: タイトル見出しは <h1> - <h6> などのタグによって定...

CentOS7 システムでスワップを増やす方法の例

序文スワップは、ディスク上にある「仮想メモリ」の一部である特殊なファイル (またはパーティション) ...

docker compose サービスの起動順序を制御する方法

まとめDocker-compose は複数の Docker コンテナ サービスを簡単に組み合わせるこ...

角度コンテンツ投影の詳細な説明

目次単一コンテンツ投影マルチコンテンツ投影単一条件のコンテンツ投影アプリ-人物-htmlアプリ担当者...

HTML でナンバープレート番号と州の略語を入力するためのサンプルコード

原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...

CentOS 7 でソースコードから Openssh をインストールする方法

環境: CentOS 7.1.1503 最小インストール依存パッケージをダウンロードします: yum...

外部ネットワークアクセスを許可するためのMysql5.6の設定手順の詳細を共有する

最近、MySQL 5.6 を導入しましたが、デフォルトでは MySQL はローカル サービスのみを許...

tomcatでcatalina.outログをカットする3つの方法の詳細な説明

1. ログセグメンテーションのためのLog4j 1) log4j-1.2.17.jar、tomcat...

Ubuntu仮想マシンでシリアル通信にcutecomを使用する方法

Ubuntu仮想マシンでのシリアル通信にcutecomを使用する1. cutecomをインストールす...

HTML テーブルタグチュートリアル (7): 背景色属性 BGCOLOR

テーブルの背景色は、BGCOLOR 属性を通じて設定できます。基本的な構文<テーブル BGCO...

Nginx操作応答ヘッダー情報の実装

前提条件: ヘッダー情報操作をサポートするには、ngx_http_headers_module モジ...

MySQL データベースで UTF-8 エンコードを設定する方法

/etc/my.cnf または /etc/mysql/my.cnf ファイルを変更する [クライアン...

WeChatミニプログラムにナビゲーション機能を実装する方法

1. レンダリング2. 操作手順1. テンセントマップキーを申請する - 住所2. ミニプログラムの...