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のインストールと展開

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

推薦する

MySQL でスロークエリを有効にする方法の例

序文スロー クエリ ログは、MySQL で非常に重要な機能です。MySQL のスロー クエリ ログ機...

MySQLのスローログの開き方と保存形式の詳細な分析

開発プロジェクトでは、MySQL のスロークエリログを通じて効率の問題のある SQL を監視できます...

Nginx で Brotli 圧縮アルゴリズムを有効にする方法の例

Brotli は、Zopfli よりも 20 ~ 26% 高い圧縮率を実現できる新しいデータ形式です...

Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

目次1. コンポーネント切り替え方式方法1: v-ifとv-elseを使用する方法 2: 組み込みコ...

Linux環境でのDockerインストールチュートリアル

1. 設置環境Dockerは次のCentOSバージョンをサポートしていますCentOS 6.5 (6...

JavaScript は setTimeout を使用してカウントダウン効果を実現します

JavaScript ネイティブ コードの記述能力を高め、setTimeout() の使用を強化する...

jsプロキシの原理の詳細な説明

目次プロキシモードとは何ですか?実例を紹介例を使ってプロキシモデルの定義を理解するプロキシとはget...

CSS を使用して親コンテナ div を img 画像で埋め、コンテナのサイズを調整する方法

ページに複数の画像を導入すると、画像のサイズがばらつくことがあります。しかし、それらを一貫したサイズ...

JavaScript関数の使い方の詳細な説明

目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...

MySQL でよく使用されるデータベースとテーブル シャーディング ソリューションの概要

目次1. データベースのボトルネック2. サブライブラリとサブテーブル2. 横長テーブル3. 垂直サ...

MySQLストアドプロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

Mysql 文字列の傍受と指定された文字列内のデータの取得

序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...

Linux のスクリーンコマンドとその使い方

画面紹介Screen は、コマンドライン端末切り替え用に GNU プロジェクトによって開発されたフリ...

Webデザインチュートリアル(6):デザインへの情熱を持ち続ける

<br />前の記事:Webデザインチュートリアル(5):Webビジュアルデザイン。 1...