同じホストに 8 つの異なる Docker サービスを展開する docker-compose ファイルがあります。これを異なるホストに展開することは可能ですか?、あるサービスを 1 つのホストに展開し、別のサービスを別のホストにリモートで展開したいと考えています。docker-swarm を使用する必要がありますか? それとも、もっと簡単な方法がありますか?
DOCKER_HOST を使用すれば実行できると読んだことがありますが、この変数を使用して /etc/default/docker を構成すると、すべてのサービスがリモート ホスト上で実行されてしまいます。必要なのは、一部のサービスを 1 つのリモート ホストに、その他のサービスを他のリモート ホストに配置することです。
ベストアンサー1
現在、docker compose v3 を使用してこれを実行できます。
コマンドを使用してSwarmクラスタを初期化する必要があります
$ docker swarm init
ワーカーまたはマネージャーとしてノードを追加できます -
両方のノードをクラスターに追加したら、Compose v3、つまりデプロイメント ファイルを渡してスタックを作成します。Compose ファイルには定義済みのイメージのみを含める必要があり、Swarm モードでのデプロイメント用の Dockerfile を提供することはできません。
$ docker stack deploy -c dev-compose-deploy.yml --with-registry-auth PL
スタックサービスのステータスを表示します -
$ docker stack services PL
ラベルと配置の制約を使用して、サービスを異なるノードに配置するようにしてください。
参考用の「dev-compose-deploy.yml」ファイルの例-
version: "3"
services:
nginx:
image: nexus.example.com/pl/nginx-dev:latest
extra_hosts:
- "dev-pldocker-01:10.2.0.42”
- "int-pldocker-01:10.2.100.62”
- "prd-plwebassets-01:10.2.0.62”
ports:
- "80:8003"
- "443:443"
volumes:
- logs:/app/out/
networks:
- pl
deploy:
replicas: 3
labels:
feature.description: “Frontend”
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: any
placement:
constraints: [node.role == worker]
command: "/usr/sbin/nginx"
viz:
image: dockersamples/visualizer
ports:
- "8085:8080"
networks:
- pl
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
deploy:
replicas: 1
labels:
feature.description: "Visualizer"
restart_policy:
condition: any
placement:
constraints: [node.role == manager]
networks:
pl:
volumes:
logs: