多くの人がDockerfileとComposeファイルの間で混乱するのを見てきました。これは主に、技術的には正しくありませんが、両方がDockerイメージをある意味で変更するために使用されるためです。
2つの用語を混同するのは簡単ですが、同僚や(潜在的な)雇用主と会話するときは、その違いを理解する必要もあります。
Dockerfileは、コンテナーイメージを作成するために使用されるものであり、Composeファイルは、そのイメージのインスタンスをコンテナーとしてデプロイするために使用されるものです。
DockerComposeとDockerfileの違いを正しく理解できるように少し詳しく説明します。
Dockerfileとは何ですか?
Dockerfileをコンテナイメージの前身と呼ぶのが好きです。 Dockerfileからイメージを作成します。一般的なDockerfileには、特別なビルド命令、RUN
などのコマンドが含まれています 、ADD
、COPY
、ENTRYPOINT
、など。
以下の例を見てください:
FROM alpine:latest
RUN apk add --no-cache fortune
ENTRYPOINT ["fortune"]
各行は、ビルドコンポーネントの命令で始まります。これらの指示は、必ずしも大文字で書く必要はありません。以下は前のものと同じように有効です。
from alpine:latest
run apk add --no-cache fortune
entrypoint ["fortune"]
このDockerfileから、コンテナーイメージ(またはDockerイメージ)を構築できるようになりました。イメージは、複数の読み取り専用レイヤーで構成される、実行中のコンテナーの単なるテンプレートです。これはコンテナ画像に関する記事ではないので、そのトピックについて過度に説明することは控えます。
Docker CLIを使用して、このDockerfileからイメージをビルドするには、次のコマンドを実行します
docker build -t fortune:alpine .
これにより、fortune:alpine
というタグの付いた画像が作成されます 。この画像からコンテナを作成するつもりはありません。それは次のセクションです。
作成ファイルとは何ですか?
作成ファイルは、次の2種類のデプロイで使用されます。docker-compose
を使用した非クラスターデプロイメント docker swarm
を使用したクラスター展開 。
2つのタイプを区別するために、クラスター展開を担当する作成ファイルをスタックファイルとして扱います。スタックファイルについては後で説明します。
作成ファイルは、docker-compose
と呼ばれるツールの一部です。 。これは、docker
のような、dockerデーモンサーバーへのクライアントアプリケーションです。 CLIクライアントですが、run
全体を入力する代わりに docker-compose
を使用して毎回コマンドを実行します 同じYAMLファイルを何度も再利用し、最初に行ったのと同じ構成で同じコンテナーをデプロイできます。
それは、より読みやすく、より保守しやすく、より直感的です。 1つの作成ファイルに複数のコンテナーデプロイメント構成を含めることができます。
作成ファイルのサポートは、コマンドライン引数「dockercompose」としてGoで記述されたデフォルトのDockerクライアントの一部になります。そこにハイフンがないことに注意してください。これはまだ実験段階であるため、Pythonバージョンを使用した本番環境では、docker-composeを使用することをお勧めします。前のイメージを取得し、作成ファイルを使用してそのインスタンスをデプロイしましょう。
version: "3.3"
services:
fortune:
image: "fortune:alpine"
ファイルをdocker-compose.yml
として保存します 。次のコマンドを同じディレクトリで実行します
docker-compose up
する必要はありません ファイルをdocker-compose.yml
として保存します 、好きなように保存できますが、docker-compose.yml
でない場合は またはdocker-compose.yaml
、必ず-f [FILENAME]
を使用してください オプション。
docker-compose -f docker-compose.yml up
待って、何が起こるか見てください。
fortune
を知るには つまり、面白いLinuxコマンドについてのこの記事を読んでください。
スタックファイルとは何ですか?
スタックファイルは、いくつかの例外を除いて、同様の構文とほとんどの内部オプションを備えた構成ファイルと同じです。スタックファイルは、スウォームクラスターにサービスのスタックをデプロイするために使用されます。
以前の作成ファイルをスタックファイルとして直接再利用できます。
まず、クラスターを初期化します。
docker swarm init
次に、次のようなコマンドを実行します
docker stack deploy -c docker-compose.yml fortune
このようにデプロイされた場合は、docker service logs ...
を使用してサービスログを表示して出力を確認する必要があります。 。
DockerfilesとComposeファイルは異なる目的を果たします。タイムラインを作成できれば、次のようになります
Dockerfile -> Docker Image -> Compose File -> Running Containers
初心者がこれらの2つのファイルと混同するもう1つの理由があります。 Dockerfileは、Composeファイルを介してポイントでき、docker-compose
を使用できます。 イメージを構築します。
たとえば、以前の作成ファイルを書き直すことができるので
version: "3.3"
services:
fortune:
build:
context: '.'
dockerfile: "./Dockerfile"
image: "fortune:alpine"
これで、docker-compose build
を実行できます イメージを構築します。または、docker-compose up --build
を実行することもできます コンテナを一度にビルドして実行します。
ここで、Dockerfileは作成ファイルを通過します。一見すると、イメージの作成を担当しているのは作成ファイルのように見えますが、そうではありません。
Docker Run vs Start vs Create:違いの説明docker初心者にとって、docker start、docker run、dockercreateなどの用語は混乱を招く可能性があります。この記事では、例との違いについて説明します。 LinuxハンドブックAbhishekPrakashこの記事で、DockerfileとComposeファイルの違いが明らかになったと思います。ご不明な点がございましたら、下のコメント欄でお知らせください。