イメージを構築する イメージを構築するには、主に 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 標準化および最適化のベスト プラクティス!
Ubuntu は、Linux をベースにした無料のオープンソース デスクトップ PC オペレーティン...
これは、CSS 3.0 で実装されたテキストのホバーとジャンプ効果です。効果は次のとおりです。 以下...
MySQL のインデックスの種類には、通常のインデックス、一意のインデックス、全文インデックスがあり...
使用例コードをコピーコードは次のとおりです。 <!DOCTYPE html> <!...
2級コンピュータ試験のMySQL知識ポイントの基礎、一般的なMYSQLコマンドは次のとおりです。よく...
序文以前、MySQL 5.6 をインストールしました。3 か月後、開発者から MySQL で JSO...
最初のパラメータ渡し方法は、動的ルーティングパラメータ渡しです。リンクのパス属性を設定することで、ル...
私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...
目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...
目次インデックスの適切な使用1. 通常のインデックスのデメリット2. 主キーインデックスの落とし穴3...
目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...
//デフォルトプロトコル/ デフォルト プロトコルの使用は、リソース アクセス プロトコルが現在の...
1. データを初期化する `test_01` が存在する場合はテーブルを削除します。 テーブル「te...
1. mysqlbackup の紹介mysqlbackup は、MySQL Enterprise B...
1: masterha_check_repl レプリカ セット エラー レプリケートが構成ファイルで...