序文前回の記事では、docker でコンテナを実行するために使用するイメージを dockerhub からリモートで取得しましたが、独自のイメージを構築することはできるでしょうか?答えはイエスです。Dockerfile を通じて独自のイメージを構築できます。Dockerfile 自体は難しくなく、単なるコマンドの集まりです。難しいと感じるのは、Dockerfile のこれらのコマンドを使用して、より高いレベルの観点から独自のイメージをより適切に構築する方法です。見てみましょう。 Dockerfile の紹介Dockerfile は実際にはファイルです。ファイルの名前は Dockerfile です。もちろん、この名前を使用して、イメージをビルドするときに名前を指定することもできます。ただし、一般的には Dockerfile を使用すると言われています。Dockerfile の主な機能は、カスタム イメージのビルドを支援することであるため、Dockerfile はイメージ ビルド ファイルまたはイメージ記述ファイルとも呼ばれます。 Dockerhub には基本的にすべてのサービスを満たした公式イメージが多数提供されているのに、なぜイメージをカスタマイズする必要があるのかと疑問に思う友人もいるかもしれません。 Dockerfile を使用して独自のイメージを構築することで、独自のアプリケーションをイメージにパッケージ化でき、そのイメージを実行すると、カスタマイズされた機能の一部を使用してサービスを直接実行できます。 例えば、dockerhubからcentos7イメージをダウンロードする場合、公式イメージにはvim機能がありません。そのため、公式centosイメージをベースに独自のイメージをビルドして、centosコンテナの実行時にvimを自動的にインストールすることができます。 Dockerfileはイメージプロセスを構築するDockerfile イメージ構築プロセスを紹介する前に、重要な概念であるコンテキスト ディレクトリについて知っておく必要があります。Dockerfile が配置されているディレクトリはコンテキスト ディレクトリと呼ばれます。 Docker は CS アーキテクチャです。Dockerfile を使用してイメージをビルドするために使用されるコマンドは docker build です。コマンドがクライアントのオペレーティング システムで実行されると、docker エンジンは Dockerfile が配置されているディレクトリ内のすべてのデータをパッケージ化し、docker サーバーに送信します。したがって、Dockerfile が配置されているディレクトリには、現在のイメージをビルドするために必要なファイルのみが含まれている必要があります。サーバーが Dockerfile 内のコマンド行を実行すると、docker キャッシュに一時イメージが生成されます (一時イメージを生成しない場合は、docker build の後に --no_cache パラメータを追加します)。最後の行まで実行すると、最終イメージが取得されます。次の図に示すように: Dockerfile の使用まず、イメージをビルドするための Dockerfile のコマンドについて説明します。 # コマンド形式: docker build -t イメージ名: タグ Dockerfile が配置されているパス docker build -t mycentos:01 . 以下は Dockerfile でよく使用されるコマンドの一部です。Dockerfile 内のすべてのコマンドは大文字で始まることに注意してください。 FROM イメージ名: タグ: Dockerfile の最初のコマンド。どのイメージに基づいてイメージを構築するかを示します。カスタム イメージがビルドされますが、このカスタム イメージも公式のベース イメージ上にビルドされます。 # Dockerファイル FROM centos:7 # は、イメージが centos7 に基づいて構築されていることを示します。 RUN: イメージをビルドするときに実行する必要があるコマンド。その後にシェル コマンドを続けることができます。 # 最初の構文形式 RUN yum install -y vim # 2番目の構文形式 RUN ["yum", "install", "-y", "vim"] EXPOSE: 外部に公開されるポート。イメージ内でポートが公開されている場合にのみ、docker run コマンドを実行するときに -p パラメータを指定できます。 EXPOSE 9000 # はポート9000を公開することを示します WORKDIR: コンテナに入るときのパスを指定します。パスは複数記述できます。コンテナ内に指定パスがない場合はパスが作成されます。パスは複数記述できます。次のパスは前のパスを基準とした相対パスです。 ワークディレクトリ /データ ワークディレクトリ /a COPY: コンテキスト ディレクトリ内の指定されたファイルをイメージ内の指定されたディレクトリにコピーします。 # コマンド形式: COPY 元のパス (絶対パスまたは相対パス) コンテナ内のターゲットパス# 構文形式 1 COPY /root/app/aa.txt /data # 構文形式 2 COPY ["<src>", ..., "<dest>"] --- 構文形式 2 ADD: コンテキスト ディレクトリ内の指定されたファイルをミラーの指定されたディレクトリにコピーします。URL を識別し、URL に対応する圧縮パッケージを自動的にダウンロードできます。また、ローカルの圧縮パッケージをミラーの指定されたディレクトリにコピーし、自動的に解凍することもできます。 #コンテキストディレクトリ内の指定されたファイルをミラーの指定されたディレクトリにコピーします ADD bb.txt /data # URL を自動的に識別し、コンテナ内の指定されたディレクトリにダウンロードします ADD https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz /data # 圧縮されたパッケージは指定されたディレクトリに自動的に解凍されます ADD xxx.tar /data ENTRYPOINT: コンテナの起動時に実行するコマンドを指定するために使用されます。CMD と同様に、コンテナの起動後の最初のコマンドを設定するためによく使用されます。複数のコマンドを記述でき、上書きすることもできます。 # ENTRYPOINT シェル スクリプトまたは ENTRYPOINT ["tail", "-f"...] エントリポイント tail -f bb.txt # 上書き docker run --entrypoint=cat mycentos:08 /data/bb.txt CMD: 最後の CMD が標準として使用されます。上書き可能で、ENTRYPOINT にパラメータを渡すことができ、ENTRYPOINT と組み合わせて使用できます (json 配列の形式でのみ使用できます) # 最後のCMDのみ実行 コマンド ls $BASEDIR CMD 猫 bb.txt # 上書き可能。docker run の後のコマンドは、Dockerfile の CMD の後のコマンドを直接上書きします。docker run mycentos:09 ls /data # ENTRYPOINT と組み合わせて使用して、ENTRYPOINT にパラメータを渡します。パラメータは動的に渡すことができます。たとえば、プロジェクト パスは変更されませんが、プロジェクト名は変更されます。この 2 つを組み合わせて使用する場合は、json 配列形式を使用する必要があることに注意してください。 エントリポイント ["ls", "/data"] コマンド [/data/bb"] または docker 実行 mycentos:10 /data/bb/aa Dockerfile でカスタムイメージを構築する実装についてはこれで終了です。Dockerfile でイメージを構築する方法については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: IE8互換表示(IE7モード)とスタンドアロンIE7の違いの詳細な説明
>>: CSS は Alibaba ベクター ライブラリを使用して、対応する位置に見栄えの良いアイコン効果をすばやく追加します (サンプル コード)
最近、スタック コンテキストについて学習しています。学習の過程で、z-index が 0 の場合と ...
成果を達成する html <div class="コンテナ"> &l...
PS: 最近、nginx を詳細に紹介している <<High-Performance ...
あなたはこの質問について考えたことがあるでしょうか?デュアルアクティブが構成されている場合、データル...
事前に一言:突然、複数のドメイン名のアクセスを https に転送するというタスクを受け取りました。...
1. どのように構築しますか? es5 でクラスを構築する一般的な方法を確認しましょう。まず、es5...
目次ドラッグアンドドロップアップロードについては以前の記事で書きました。ファイルをアップロードするF...
この記事では、次のように、誰にでも共有できる左右幅固定のミドルアダプティブ HTML レイアウトソリ...
背景グループでは、CSS を使用してインセット コーナー ボタンを実装する方法や、矢印付きのボタンを...
Docker をインストールし、Docker コアとインストールを通じて簡単な操作を実行できます。 ...
monaco-editor-vueの公式ソースコードは次のとおりです。インデックス 'mon...
目次導入MySQL 高可用性マスター 1 つとバックアップ 1 つ: MySQL マスター スレーブ...
目次1. nginxのインストールと操作(Mac OS環境) 2. nginxルールの設定3. コマ...
最近、問題に遭遇しました。モバイル端末の絵文字や一部の絵文字は 4 バイトですが、UTF-8 は 3...
まず、Docker イメージ用の特定のプロジェクト ディレクトリを作成します。例: mkdir /h...