Dockerの構成入門


で、私はあなたがMernアプリをDockerizeできる方法を示した.プロセスは3つのコンテナを構成し、それらを開始するために3つの異なるコマンドを使用する必要があります.そして、あなたが覚えているならば、コマンド自体も非常に長くありました.あなたが仕事を始めたいたびにあなたがそれをしなければならないならば、これのすべては非常に厄介になります.
これは、ドッカーの構成が画像に入っているところです.
非常に簡単な用語でそれを置くには、私たちは起動し、目的の方法ですべての必要なコンテナを停止する2つの簡単なコマンドを提供します.存在するコマンドdocker-compose up and docker-compose down それぞれ.これとは別に、我々はdocker-compose.yaml 実行したいコマンドに関連する命令を持つファイル.
Dockerがどのような構成をしているのかを考えてみましょう.私が前のポストで話したものに関して構築しています、それで、あなたがそれをチェックしなかったならば、私はあなたがすることを非常に提案します.
それで、最初に私たちの最終的なファイルがどのように見えるかについてあなたに教えさせてください、そして、私は詳細に説明することに行きます.Dockerを構成するファイルは以前に書いたDockerFilesの代用ではないことに注意してください.我々は、我々のイメージを造るために、彼らを絶対必要としています.このDockerのファイルを書いている間、フォルダ構造が次のようになっていると仮定します.
├── frontend
│   ├── Dockerfile
│   └── otherStuff
├── backend
│   ├── Dockerfile
│   └── otherStuff
├── env
│   ├── backend.env
│   └── mongo.env
└── docker-compose.yaml
それならばdocker-compose.yaml ファイルは以下のようになります:
version: '3.8'
services:
  mongodb:
    image: 'mongo'
    volumes:
      - data:/data/db
    env_file:
      - ./env/mongo.env
  backend:
    build: ./backend
    ports:
      - '80:80'
    volumes:
      - ./backend:/app
      - /app/node_modules
    env_file:
      - ./env/backend.env
    depends_on:
      - mongodb
  frontend:
    build: ./frontend
    ports:
      - '3000:3000'
    volumes:
      - ./frontend/src:/app/src
    stdin_open: true
    tty: true
    depends_on:
      - backend

volumes:
  data:
これを説明する前に、DockerFilesがどのように見ているか見てみてください.そうでなければ、何かを理解できないかもしれません.これで始めましょう.
  • 我々が指定する非常に最初のものは、我々が使用したいDocker構成のバージョンです.これは私たちのアプリのバージョンとは関係ないことを覚えておいてください.

  • 次にサービスを指定します.すべてのサービスは同じインデントレベルで指定されます.

    Indentation does matter in yaml files so do take care of that


  • サービスの名前を指定して、その他の詳細を開始します.

  • サービスがどこか他から得ているイメージに基づいているならば、我々がここからMongoDBイメージを得るようにDocker Hub , それから、我々はimage キー使用build そして、ビルドしたいDockerfileが存在するフォルダの場所を指定します.

    We specify the path to the folder containing the dockerfile and not the path to the dockefile itself.



  • その後、我々はports オープンしたい投稿を指定するキー.これは、コンテナから端末から起動するのと同じように行われます.

    In the case of MongoDB, we don't need a port since the backend will interact with it via the docker network.


  • 次に、volumes 以前使用したのと同じ構文を使用します.

  • 以前にしたようにコンテナを起動している間に環境変数を渡す代わりに、ファイル内で指定し、そのファイルの位置をenv_file キー.

    In the case of the React frontend we don't need any environment variables.


  • その後は、depends_on 基本的に、Deckerで指定されたコンテナーがアップデートして、我々が現在のものを始める前に実行することをDockerに話します.
  • フロントエンドでは、次の2つの追加キーも通知されますtty and stdin_open . フロントエンドコンテナーを対話モードで実行したいので、これらを指定します.これらは基本的に-it フロントエンドを個別に起動している間に以前使用したフラグ.
  • そして、サービスを指定した後に、我々のサービスのボリュームを指定している間、我々が使用したすべての命名されたボリュームをリストしなければなりません.これはDockerが機能するために必要なものです.これは名前付きボリュームに対してのみ行われなければならないことに注意してください.
  • 私たちが最後にしたように、私たちがなぜどこにもDockerネットワークをここで指定しないか、または作成しなかったか疑問に思うかもしれません.Dockerを使用するときには、Dockerは自動的にコンテクストファイルで指定されたサービスに対して新しい環境を作成し、それらのサービスをコンテナに追加します.が存在するnetworks しかしながら、いくつかのネットワークを指定したいなら、コンテナは一部であるべきです.
  • そして、Vilは引きます!あなたが初めてDocker Composeを使用しているならば、これは理解するのに多くのかもしれません.私は、あなたがよりよくDocker作曲を使うことを理解するために、これをもう一度読んで、もう一度試みることを提案します.私は、あなたがこれから役に立つ何かを学ぶことができたことを望みます.
    読書ありがとう!
    あなたが私のためのフィードバックを持っているかどうかだけで私と接続するために自由に感じて話をしたい.喜んでお手伝いしましょう!ディー
    編集( 02/01/2021 )

    一連の結論
    これは、このシリーズの最終的なポストです.私は、ポストを読む時間を取り出した誰にでも感謝します.私はあなたのすべてがあなたを助けることができる何かを学んだことを願っています.これは、私が積極的に技術的なブログを書き始めて、私は非常に私が得た応答に感謝しています.私は、今度はKubernetesで、もう一つのシリーズを始めています.この動画はお気に入りから削除されています.もう一度ありがとう.」