イメージを構築する イメージを構築するには、主に 2 つの方法があります。 実行中のコンテナをイメージにコミットするには、docker commit コマンドを使用します。 docker build コマンドを使用して、Dockerfile からイメージをビルドします。 まずは実行中のコンテナからイメージを送信する方法を紹介します。ここでは引き続き、busybox イメージを例として使用します。次のコマンドを使用して、busybox という名前のコンテナーを作成し、busybox コンテナーに入ります。
上記のコマンドを実行すると、現在のウィンドウはbusyboxコンテナを起動し、コンテナに入ります。コンテナ内で次のコマンドを実行してファイルを作成し、その内容を書き込みます。
この時点で、コンテナのルート ディレクトリに hello.txt ファイルが作成され、そこに「I love Docker.」が書き込まれます。 次に、別のコマンド ライン ウィンドウを開き、次のコマンドを実行してイメージを送信します。
次に、上記の docker image ls コマンドを使用してイメージを表示します。 $ docker イメージ ls busybox リポジトリ タグ イメージ ID 作成 サイズ busybox hello cbc6406aaef0 2分前 1.22MB busybox 最新 018c9d7b792b 4 週間前 1.22MB この時点で、ホスト上に新しい busybox:hello イメージが作成されたことがわかります。 比較すると、Dockerfile を使用した Docker ビルドの方が優れていることは明らかです。 docker commit の欠点は次のとおりです。 操作はコンテナ内で行う必要があり、面倒で非効率的です。 これも最も重要なポイントです。他の人や、時間が経てば自分自身でさえも、このイメージがどのように作成されたかはわかりませんが、Dockerfile によってビルドされたイメージを使用すると、apt-get install コマンドが実行されたことが分かります。 2 番目の方法は、最も重要で最も一般的に使用されるイメージ構築方法である Dockerfile です。 Dockerfile は、ユーザーのすべてのビルド コマンドが含まれるテキスト ファイルです。 docker build コマンドを使用して、Dockerfile からイメージを生成できます。 Dockerfile を使用してイメージを構築すると、次の機能が得られます。 Dockerfile内の各コマンド行は、一意のIDを持つ独立したイメージレイヤーを生成します。 Dockerfile 内のコマンドは完全に透過的です。Dockerfileの内容を表示することで、イメージが段階的にどのように構築されるかを確認できます。 Dockerfile はプレーンテキストなので、コードと一緒にコード リポジトリに保存し、バージョンを管理するのが簡単です。 Dockerfile を使用してイメージを構築すると多くの優れた機能があることがわかり、その使い方を知りたいと思いませんか?心配しないでください。まずは Dockerfile の一般的な手順を学びましょう。
たくさんの説明を読んで、少し混乱してしまいましたか?心配しないでください。例を挙げて説明しながら、理解を深めていきます。 Dockerfile は次のとおりです。 Centos:7より nginx.repo をコピー /etc/yum.repos.d/nginx.repo yum install -y nginxを実行します エクスポーズ80 環境変数HOST=mynginx CMD ["nginx","-g","デーモンオフ;"] 最初の行は、centos:7 イメージに基づいてカスタム イメージを構築することを示しています。ここで注意すべき点は、コメントを除いて、各 Dockerfile の最初の行は FROM で始まる必要があるということです。 2 行目は、ローカル ファイル nginx.repo をコンテナー内の /etc/yum.repos.d ディレクトリにコピーすることを意味します。 nginx のインストール ソースを追加するために、nginx.repo ファイルをここにコピーします。 3 行目は、コンテナ内で yum install -y nginx コマンドを実行して、コンテナ内に nginx サービスをインストールすることを示しています。3 行目のコマンドを実行すると、コンテナ内に nginx がインストールされます。 4 行目は、コンテナ内のサービス (nginx) がポート 80 を使用して外部サービスを提供することを宣言します。 5行目はコンテナ起動時の環境変数HOST=mynginxを定義します。コンテナ起動後は環境変数HOSTの値がmynginxとして取得できます。 6 行目はコンテナの起動コマンドを定義し、コマンドの形式は json 配列です。ここでは、コンテナの起動コマンドが nginx に設定され、nginx をフォアグラウンドで起動するために nginx 起動パラメータ -g 'daemon off;' が追加されます。 ミラーリングの実装原理 実際、Docker イメージは一連のイメージ レイヤーで構成されており、各レイヤーはイメージ構築プロセスにおける送信を表します。以下では、イメージから構築された Dockerfile を使用して、イメージがどのように階層化されるかを説明します。
上記の Dockerfile は次の 3 つのステップで構成されています。 最初の行は、busybox に基づいてイメージ レイヤーを作成します。 2 行目は、ローカル テスト ファイルをイメージにコピーします。 3 行目は、/tmp フォルダーにディレクトリ testdir を作成します。 ここで私の Docker は overlay2 ファイル ドライバーを使用します。/var/lib/docker/overlay2 ディレクトリに移動し、tree . コマンドを使用して生成されたイメージ ファイルを表示します。 $ ツリー 。 # 以下はツリーの出力です。コマンド |-- 3e89b959f921227acab94f5ab4524252ae0a829ff8a3687178e3aca56d605679 | |-- diff # このレイヤーはベースレイヤーで、上記の Dockerfile の最初の行に対応し、/etc、/bin、/var などのディレクトリなど、busybox イメージのすべてのファイルの内容が含まれています...今回は、元のイメージファイルの内容の一部が省略されています| `-- link |-- 6591d4e47eb2488e6297a0a07a2439f550cdb22845b6d2ddb1be2466ae7a9391 | |-- diff # このレイヤーは上記の Dockerfile の 2 行目に相当し、テスト ファイルを /tmp フォルダーにコピーするため、diff フォルダーには /tmp/test ファイルがあります| | `-- tmp | | `-- テスト | |-- リンク | |-- 下 | `-- 仕事 |-- バックイングFsブロックDev |-- bec6a018080f7b808565728dee8447b9e86b3093b16ad5e6a1ac3976528a8bb1 | |-- diff # このレイヤーは、上記の Dockerfile の 3 行目に相当します。testdir フォルダーは /tmp フォルダーの下に作成されるため、diff フォルダーの下に /tmp/testdir フォルダーがあります。 | | `-- tmp | | `--testdir | |-- リンク | |-- 下 | `-- 仕事 ... 上記のディレクトリ構造から、Dockerfile 内の各コマンド行がミラー レイヤーを生成し、各レイヤーの diff フォルダーには増分データのみが格納されていることがわかります (図 2 を参照)。 階層構造により、Docker イメージは非常に軽量になります。各レイヤーには、イメージの内容に基づいて一意の ID 値があります。異なるイメージに同じイメージ レイヤーがある場合、イメージ レイヤーを異なるイメージ間で共有できます。 要約すると、Docker イメージは静的で階層的に管理されるファイルの組み合わせであり、イメージの基盤となる実装は Union File System (UnionFS) に依存しています。イメージの原則を完全に理解することは、実際の運用で最高のイメージを構築するのに役立ち、コンテナとイメージの関係をより深く理解するのにも役立ちます。 要約する この時点で、Docker イメージのコア概念をより深く理解し、Docker イメージの一般的な操作 (プル、表示、「名前変更」、削除、カスタム イメージの構築) と基礎となる実装原則に精通していると思います。 ミラー操作コマンド: イメージをプルし、docker pull コマンドを使用してリモート ウェアハウスのイメージをローカルにプルします。 イメージの名前を変更するには、docker tag コマンドを使用してイメージの名前を変更します。 イメージを表示するには、docker image ls または docker images コマンドを使用して、既存のイメージをローカルで表示します。 イメージを削除し、docker rmi コマンドを使用して不要なイメージを削除します。 イメージをビルドします。イメージをビルドする方法は 2 つあります。最初の方法は、docker build コマンドを使用して Dockerfile に基づいてイメージを構築することです。これは私が推奨するイメージ構築方法でもあります。2 番目の方法は、docker commit コマンドを使用して、すでに実行中のコンテナーに基づいてイメージを送信することです。 ミラーリングの実装原則: イメージは一連のイメージ レイヤーで構成されています。各レイヤーはイメージ構築プロセスにおけるコミットを表します。イメージ内のファイルを変更する必要がある場合は、現在のイメージ レイヤーに基づいて新しいイメージ レイヤーを作成し、変更されたファイル コンテンツのみを保存するだけで済みます。レイヤー構造により、画像間で画像レイヤーを共有することが非常に簡単かつ便利になります。 Docker イメージ作成 Dockerfile とコミット操作に関する上記の記事は、私が皆さんに共有できるすべてです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 21 の MySQL 標準化および最適化のベスト プラクティス!
この記事では主に、リクエストを転送したり、静的リソース ファイルにアクセスしたりする nginx の...
この記事では、1枚以上の写真をアップロードするためのVant Uploaderコンポーネントを紹介し...
友人の中には、データベースについて学習しているときに、テーブル構造を作成するときに誤ってフィールドを...
目次原理ソースコード分析委任されたイベントバインディングすべてのサポートされているイベントを聴くネイ...
開発中、MySQL へのリモートアクセスでよく問題に遭遇します。そのたびに検索する必要があり、面倒に...
目次1. PXCの紹介1.1 PXC の紹介1.2 PXC の特徴と利点1.3 PXCの限界と欠点1...
垂直方向では、行の配置を上、中央、下に設定できます。基本的な構文<TR VALIGN=&quo...
赤とピンク、およびそれらの 16 進コード。 #990033 #CC6699 #FF6699 #FF...
目次デモ1フラグメントの作成スヴェルトコンポーネント状態を変更できるデモSvelte は長い間存在し...
目次起源環境情報トラブルシューティングのプロセス要約する起源顧客は CentOS をベースにしたカス...
文字列を配列に分割するには、次の 3 つの MySQL 関数を使用する必要があります。 REVERS...
目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...
目次ポータルエラー境界処理エラー境界を使用しない場合はどうなりますか?注記ポータルスロットとも言えま...
html-webpack-pluginプラグインを使用してページを開始すると、htmlページをメモリ...
Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...