TOP
前: サービスのボリュームマウント
次: サービスのヘルスチェック
コンテナに外部からアクセスするにはコンテナとホストポートをマッピングします。
- 以下満たすcomposeファイル
service-expose.yamlを作成してください。(ヒント)
- service名: test
- image: nginx
- replicas: 1
- port: ホストの8000をコンテナの80にマッピング(Long syntaxで設定する場合モードはingress)
-
上記作成したcomposeファイルを指定し、スタック
testを作成してください。 -
スタックの一覧、スタック内のサービス一覧、スタック内のタスク一覧をそれぞれ表示し、タスクが1つデプロイされていることを確認してください。また、サービスが
*:8000->80/tcpのように外部公開できていることを確認してください。タスクがスケジュールされたノード名も確認してください。 -
ワーカーノードにつながる端末からcurlやブラウザなどを使用し
<タスクを実行しているワーカーノードIP or ホスト名>:8000に接続してください。Welcome to nginx!が表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。) -
ワーカーノードにつながる端末からcurlやブラウザなどを使用し
<タスクを実行していないワーカーノードIP or ホスト名>:8000に接続してください。Welcome to nginx!が表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。) -
マネージャノードにつながる端末からcurlやブラウザなどを使用しいずれかの
<マネージャノードIP or ホスト名>:8000に接続してください。Welcome to nginx!が表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。) -
サービス
testのレプリカ数を2に増やしてください。 -
各タスクを実行しているワーカーノードに接続し、サービス
testでデプロイされたコンテナの/usr/share/nginx/html/index.htmlの内容を以下のようにワーカーノードの名前などコンテナごとに一意となる内容に修正してください。
docker exec -it <container id> sh
echo <worker0 or 1> > /usr/share/nginx/html/index.html-
ワーカーノードにつながる端末からcurlやブラウザなどを使用し
<ワーカーノードIP or ホスト名>:8000に複数回接続してください。結果がworker0とworker1のようにランダムで表示されることを確認してください。(もし接続できない場合、AWSの場合SecurityGroupで端末から8000へのインバウンドが許可されていることを確認してください。) -
同じcomposeファイルを指定し、スタッタ
test2を作成してください。ポート8000がバッティングして作成に失敗することを確認してください。 -
スタック
test、test2を削除してください。
このようにポートをマッピングしてコンテナを外部に公開できます。外部公開に使用するホストポートはクラスタ内のすべてのノードで使用されます。そのため同じクラスタで同じホストポートを使った外部公開はできません。また、外部からの通信はクラスタ内に構成されたルーティングメッシュを経由してコンテナに接続します。そのため、たとえアクセス先として指定したワーカーノード上でタスクが実行されていも別のワーカーノード上のタスクにルーティングされる可能性があります。ネタ元
TOP
前: サービスのボリュームマウント
次: サービスのヘルスチェック