Dockerfileを使用してDockerイメージを構築する

Dockerfileを使用してDockerイメージを構築する

今日は、Dockerfile を作成する方法を見ていきます。

Docker イメージを構築するには 2 つの方法があります。

1. 1つはdocker commitコマンドを使うことです

2. もう1つはdocker buildコマンドとdockerfileファイルに基づいています

一般的に、Dockerfile を使用してイメージをビルドする方が、Docker commit コマンドを使用してイメージをビルドするよりも柔軟性が高いため、後者の方が一般的に使用されます。

Dockerfileを使用してDockerイメージを構築する

1. Dockerfile とは何ですか?

dockerfile は DSL 構文を使用して記述されたファイルであり、docker build コマンドを使用して、dockerfile ファイル内の指示に基づいて新しいイメージを構築します。

コードが次の通りだとします:

mkdir テスト

CDテスト

Dockerfileに触れる

テスト ディレクトリを作成し、そのディレクトリに入って dockerfile_test ファイルを作成したことを理解するのは難しいことではありません。このディレクトリはビルド環境と呼ばれます。Docker はこの環境をコンテキストまたはビルド コンテキストと呼びます。Docker はイメージをビルドするときに、ビルド コンテキストとコンテキスト内のファイルとディレクトリを Docker デーモンにアップロードします。これにより、Docker デーモンはイメージに保存されているコード、ファイル、その他のデータに直接アクセスできるようになります。

Docker ファイルの内容を見てみましょう。

# バージョン: 0.0.1
ubuntu:14.04から
メンテナー Yeyz '[email protected]'
apt-get updateを実行する
apt-get install -y nginxを実行します
RUN echo 'こんにちは、私はあなたのコンテナです' > /root/test.html
エクスポーズ80

上記のファイルの内容から、Dockerfile に一連のコマンドが含まれており、各コマンドを大文字のキーワードでマークする必要があることが簡単にわかります。 # で始まるコンテンツはコメントとして認識されます。

Docker は通常、Dockerfile 内のコマンドを次の順序で実行します。

1. Docker はベース イメージからコンテナを実行します。各 DockerFile の最初のコマンドは From である必要があります。From はベース イメージを指定し、後続の命令はこれに基づいて実行されます。

2. コンテナを変更する命令を実行する

3. docker commitと同様の操作を実行して新しいイメージレイヤーを送信します。

4. Dockerイメージは、送信されたイメージに基づいてコンテナを実行します。

5. すべてのコンテナ命令が実行されるまで、Dockerfile内の次の命令を実行します。

上記のプロセスで、いずれかのステップが実行に失敗した場合、ターゲット イメージの作成に失敗したことを意味します。ただし、ターゲット イメージはイメージを次々に積み重ねた結果であるため、実際には実行可能なイメージが得られますが、まだ最終イメージには達していません。この機能は、イメージのデバッグにとって非常に重要です。

上記の画像について説明します。

バージョン: バージョンを示すコメントを表します

From命令では、ベースイメージubuntuを指定し、操作がベースイメージubuntu上で実行されることを示します。

メンテナーディレクティブ。画像の作成者と作成者のメールアドレスを表します。

RUN 命令は、現在のイメージで指定されたコマンドを実行します。3 つの命令は、apt リポジトリの更新、nginx パッケージのインストール、指定されたファイルへのコマンドの出力です。各コマンドはイメージレイヤーを作成します。コマンドが成功すると、イメージ レイヤーがコミットされ、DockerFile 内の次の命令が指定されます。デフォルトでは、RUN コマンドはシェルで /bin/bash -c を使用して、次の命令を実行します。

Expose 命令は、コンテナ内のアプリケーションにコンテナの指定されたポートを使用するように指示します。もちろん、複数の EXPOSE を使用して複数のポートを外部に公開することもできます。

2. Dockerfileを実行してイメージをビルドする

今 Dockerfile を実行すると、次の結果が得られます。

[ルートテスト]# docker build -t='yeyz:test0' 。
ビルド コンテキストを Docker デーモンに送信しています 2.048 kB
ステップ 1/6: ubuntu:14.04 から
リポジトリ docker.io/library/ubuntu をプルしようとしています...
 14.04: docker.io/library/ubuntu からプル
2e6e20c8e2e6: ダウンロード中 [> ] 539.1 kB/70.69 MB
95201152d9ff: ダウンロードが完了しました
 5f63a3b65493: ダウンロードが完了しました

-t オプションはイメージとウェアハウス名を指定するために使用され、yeyz はウェアハウス名、test0 はイメージ名です。コマンド内の . は現在のディレクトリを表します。Docker はデフォルトでローカル ディレクトリで DockerFile を検索します。また、指定された Git リポジトリ ソース アドレスに置き換えて、DockerFile の場所を指定することもできます。次のように:

docker build -t='yeyz/test0' xxxx.com:yeyz/test0

バージョン情報を保持したい場合は、次のようにタグを指定できます。

docker build -t='yeyz/test0:v1' .

特定のディレクトリの下にあるいくつかのファイルのみをアップロードしたい場合は、各行がファイル フィルターの一致パターンである .dockerignore ファイルを作成できます。このようにして、イメージを生成するときに、不要なファイルが自動的にフィルターされます。

最終的な戻り値はイメージ ID です。イメージ ID を取得したら、docker run コマンドを使用してイメージを実行できます。

3. Dockerfileビルドキャッシュ

Dockerfile を最初にビルドするときに問題が発生した場合、再度ビルドする必要があり、今回は同じ命令が実行されます。Dockerfile の 4 行目のコンテンツを変更すると、Docker はキャッシュによって最初の 3 行を自動的にロードするため、多くの時間を節約できます。

Dockerfile キャッシュを使用しない場合は、--no-cache パラメータを追加することで Dockerfile キャッシュの使用を回避できます。

4. イメージのビルド履歴を表示する

Docker 履歴では、ビルドされたイメージのビルド履歴と、ビルドされたイメージの各レイヤーを表示できます。

[root@VM-16-13-centos test]# docker イメージ mysql
リポジトリ タグ イメージ ID 作成 サイズ
docker.io/mysql 最新 4f1413420360 7 週間前 545 MB

[root@VM-16-13-centos テスト]# docker 履歴 4f1413420360
画像作成者 サイズ コメント
4f1413420360 7 週間前 /bin/sh -c #(nop) CMD ["mysqld"] 0 B
                 <欠落> 7 週間前 /bin/sh -c #(nop) EXPOSE 3306 33060 0 B
                 <missing> 7 週間前 /bin/sh -c #(nop) ENTRYPOINT ["docker-ent... 0 B
                 <欠落> 7 週間前 /bin/sh -c ln -s usr/local/bin/docker-entr... 34 B
                <欠落> 7 週間前 /bin/sh -c #(nop) COPY ファイル:f9202f6b715c0e... 13.1 kB
             <欠落> 7 週間前 /bin/sh -c #(nop) COPY dir:2e040acc386ebd2... 1.12 kB
             <欠落> 7 週間前 /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0 B
                 <欠落> 7 週間前 /bin/sh -c { echo mysql-community-server... 410 MB
              <欠落> 7 週間前 /bin/sh -c echo "deb http://repo.mysql.com... 55 B
                <欠落> 7 週間前 /bin/sh -c #(nop) ENV MYSQL_VERSION=8.0.2... 0 B
                 <欠落> 7 週間前 /bin/sh -c #(nop) ENV MYSQL_MAJOR=8.0 0 B
                 <欠落> 7 週間前 /bin/sh -c set -ex; key='A4A9406876FCBD3C... 2.61 kB
             <不足> 7 週間前 /bin/sh -c apt-get update && apt-get insta... 52.2 MB
             <欠落> 7 週間前 /bin/sh -c mkdir /docker-entrypoint-initdb.d 0 B
                 <欠落> 7 週間前 /bin/sh -c set -eux; savedAptMark="$(apt-... 4.17 MB
             <欠落> 7 週間前 /bin/sh -c #(nop) ENV GOSU_VERSION=1.12 0 B
                 <欠落> 7 週間前 /bin/sh -c apt-get update && apt-get insta... 9.34 MB
             <欠落> 7 週間前 /bin/sh -c groupadd -r mysql && useradd -r... 329 kB
              <欠落> 7 週間前 /bin/sh -c #(nop) CMD ["bash"] 0 B
                 <不足> 7 週間前 /bin/sh -c #(nop) ADD file:d2abb0e4e7ac177... 69.2 MB

以上が、Dockerfile を使用して Docker イメージを構築する方法の詳細です。Dockerfile を使用して Docker イメージを構築する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Dockerfile ファイルの書き込みとイメージ構築コマンドの分析
  • Dockerfile を使用したカスタムイメージの構築の実装
  • Dockerfileを使用してDockerイメージを構築する手順
  • Dockerfile に基づいて Tomcat イメージを構築する方法
  • Dockerfile を使用して Docker でイメージを構築する方法
  • Dockerfile を使用して nginx イメージを構築する例
  • Dockerfileを使用してイメージを構築する方法
  • dockerfile命令を使用してdockerイメージを構築するためのサンプルコード

<<:  MySQL Routerのインストールと展開

>>:  シームレスなトークンリフレッシュを実現する方法

推薦する

HTML テーブル マークアップ チュートリアル (41): テーブル ヘッダーの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、ヘッダーの幅と高さはコンテンツに応じて自動的に調整されます。ヘッダーの幅と高さを手動...

レスポンシブレイアウトの概要(推奨)

レスポンシブレイアウト開発の基礎知識この章は主に以下の部分に分かれています• レスポンシブデザインを...

ログインインターフェースの使いやすさとセキュリティのバランスをとる方法

ウェブデザイナーでもUIデザイナーでも、ログインページや登録ページのデザインは必ず経験しなければなら...

Ubuntu 18.04 で SSH サービスをインストールして設定する方法

sshツールをインストールする1. ターミナルを開き、次のコマンドを入力します。 apt-getアッ...

MySQLクエリ制御ステートメントの詳細なグラフィック説明

mysql クエリ制御ステートメントフィールド重複排除 **キーワード: 明確** 構文: テーブル...

mysqlはコンマに基づいてデータ行を複数の行に分割します

目次分離効果コマンドラインの説明関与する機能分離効果-- 別居前1,2,3,4 -- 別居後1 2 ...

Vue3の組み込みコンポーネントであるTeleportの使い方を詳しく説明します

目次1. テレポートの使用2. モーダルダイアログコンポーネントを完成させる3. コンポーネントのレ...

jsとcssのブロッキング問題の詳細な分析

目次DOMContentLoadedとロードjs ブロッキングとは何ですか? CSS ブロッキングと...

nginxサーバーのダウンロード、インストール、使用方法の詳細な説明

ダウンロードhttp://nginx.org/en/download.html解凍ダウンロードしたn...

ディスクを破壊せずに Linux で dd コマンドを使用する方法

故障したストレージ ドライブからデータを救出する場合でも、アーカイブをリモート ストレージにバックア...

Vue3 親子コンポーネントパラメータ転送における sync 修飾子の使用法の詳細な説明

目次一方向データフローの説明Vue2.x の使用法親コンポーネントに変更を通知するイベントのフォーム...

Linux sar コマンドの使用方法とコード例の分析

1. CPU使用率sar -p (一日中表示) sar -u 1 10 (1: 1秒ごと、10: 1...

VMware12 インストール centOS8 構成グラフィック チュートリアルの詳細説明 (vm 仮想マシン インストール centos8 チュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

VMware vSphere 6.7 (ESXI 6.7) のグラフィック インストール手順

環境: VMware VCSA 6.7 (VMware-VCSA-all-6.7.0-8169922...

Zabbix パスワードをリセットする方法 (ワンステップ)

問題の説明長い間アカウントパスワードを入力して Zabbix にログインしていないため、管理者パスワ...