TIL112. Docker:Docker-Composeの理由


📌 このプレゼンテーションでは、Docker-Composeへの書き込みの理由をまとめます.

🌈 Docker-なぜ合成に書き込みますか?


🔥 実行命令の入力は非常に複雑です。


🔥 コンテナ間の接続を容易にするために


🔥 仮想ネットワークへの接続を容易にするため


🔥 docker-コンビネーションの利点


🤔 docker-composeはdocker-composeを使用します。docker実行命令を1つずつ入力するのは複雑です。


✔nginxコンテナでは、次のコマンドを実行できます.
$ docker run -it nginx
✔ただし、ngixの特性saportを指定しないと、どこにも役に立たない.このため、以下のように容器を実行する.
$ docker run -it -p 8080:80 nginx
✔¥容器を閉じる場合、docker-ps-aコマンドを発行すると、容器が閉じたままであることがわかります.終了時に自動的に削除するには、次のように-rmオプションを追加します.
$ docker run -it -p 8080:80 --rm nginx
✔¥コンテナが終了して再稼働した場合、volumen mountを保持する場合は-vオプションを使用します.
$ docker run -it -p 8080:80 --rm -v $(pwd):/usr/share/nginx/html/nginx
✔」オプションを追加するたびにコマンドが増えていくので、ドキュメントとして管理したいと思います.
✔¥АААААААААААААААААА\1040

🤔 dockerコンテナ間の接続を容易にするためにdocker-composeを使用します。


✔githubからdjangoソースを取得し、以下のようにコンテナとして構築します.
$ docker build -t django-sample .
✔djangoコンテナを実行し、DBを使用してpostgresコンテナを実行します.
$ docker run --rm -d --name django -p 8000:8000 django-sample
$ docker run --rm -d --name postgres -e POSTGRES_DB=djangosample -e POSTGRES_USER=sampleuser -e POSTGRES_PASSWORD=samplesecret postgres
✔djangoコンテナとpostgresコンテナは動作していますが、djangではDBが見つかりませんので、エラーが表示されます.
✔この場合、DBをコンテナ化してからdjangoをコンテナ化し、-linkオプションで接続できます.
$ docker run --rm -d --name postgres -e POSTGRES_DB=djangosample -e POSTGRES_USER=sampleuser -e POSTGRES_PASSWORD=samplesecret postgres
$ docker run -d --rm -p 8000:8000 -e DJANGO_DB_HOST=db --link postgres:db django-sample
✔djangoを実行する場合、-eオプションを使用してdbを指定し、-linkオプションを使用して接続するため、サーバが正常に動作する可能性があります.ただし、より多くのコンテナがある場合は、毎回このように動作するのは不便であり、接続の問題が発生します.

🤔 特定のコンテナのみを共有する仮想ネットワークに接続するには、


✔上記の方法で、postgres DBに接続されるdjangoコンテナを解放します.これは、他のコンテナにアクセスできることを意味します.これはセキュリティ・ホールです.
✔ドックは仮想ネットワークをサポートしているので、これらのセキュリティ・ホールを管理できます.
✔現在の仮想ネットワークを表示するには、次のコマンドを入力します.
$ docker network ls
仮想ネットワークを作成するコマンドは、次のとおりです.
$docker network create--driver bridge[仮想ネットワーク名を入力]
✔今postgresを再コンパイラ化--ネットワークオプションでは、仮想ネットワーク名が追加されます.
$ docker run --rm -d --name postgres --network web-service -e POSTGRES_DB=djangosample -e POSTGRES_USER=sampleuser -e POSTGRES_PASSWORD=samplesecret postgres
✔djangoに接続する場合も、仮想ネットワーク名を使用して実行します.
$ docker run -d --rm --name django1 --network web-service -p 8000:8000 -e DJANGO_DB_HOST=db --link postgres:db django-sample
✔」-ネットワークオプションが指定されていないコンテナはpostgresに接続できず、Errorに戻ります.docker: Error response from daemon: Cannot link to /postgres, as it does not belong to the default network.

🤔 docker-コンビネーションの利点


✔djangoとpostgresのみを接続し、複数のコマンドとオプションを使用します.ブリッジもやる
# postgres run
docker run --rm -d --name postgres \
  --network web-service \
  -e POSTGRES_DB=djangosample \
  -e POSTGRES_USER=sampleuser \
  -e POSTGRES_PASSWORD=samplesecret \
  postgres
# django1 run  
docker run -d --rm --name django1 \
  --network web-service \
  -p 8000:8000 \
  -e DJANGO_DB_HOST=db \
  --link postgres:db \
  django-sample
# django2 run
docker run -d --rm --name django2 \
  --network web-service \
  -p 8001:8000 \
  -e DJANGO_DB_HOST=db \
  --link postgres:db \
  django-sample
docker-composeでは、これらのタスクを繰り返し実行することなくドキュメントとして管理できます.
✔ducker-compseはymlファイルにこれらの設定をすべて含み、簡単なコマンドでdockerを実行できます.
# docker-compose.yml
version: '3'
volumes:
  postgres_data: {}
services:
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgres/dat
    environment:
      - POSTGRES_DB=djangosample
      - POSTGRES_USER=sampleuser
      - POSTGRES_PASSWORD=samplesecret
  django:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
    volumes:
      - ./:/app/
    command: ["./manage.py", "runserver", "0:8000"]
    environment:
     - DJANGO_DB_HOST=db
    depends_on:
      - db
    restart: always
    ports:
      - 8000:8000
✔ymlファイルは、dockerコンテナを簡単に実行および終了できます.以下に示します.
$ docker-compose up -d
$ docker-compose down