fbpx

[和訳] デスクトップ向けDockerでのDocker ComposeとKubernetes #docker #kubernetes

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿は DOCKER COMPOSE AND KUBERNETES WITH DOCKER FOR DESKTOP (2018/05/03) の和訳です。

コペンハーゲンで開催したKubeCon EUに合わせて、DockerとKubernetesの読者に最も人気のある記事を振り返ります。Docker EE 2.0をまだ試していない人のために、このブログでは、Docker for Desktopsで、Dockerを使用してアプリケーションをKubernetesクラスタに直接デプロイする方法を取り上げます。

デスクトップ上でDockerのEdgeバージョンのDocker for MacまたはDocker for Windows Desktopを実行している場合、ボタンをクリックするだけで、単一ノードのKubernetesクラスタを立ち上げることができます。私は開発者ではありませんが、MacbookやWindowsのラップトップで既にDockerを使用している何百万人もの開発者にとって、これはすばらしいニュースだと思います、なぜなら今や、指を動かすだけで他のツールをインストールすることなく、完全に仕様に準拠したKubernetes クラスタを入手できるからです。

Dockerを使用してコンテナ化アプリケーションを構築する開発者は、Docker Composeファイルを構築してデプロイすることがよくあります。Kubernetes をDocker製品ラインに統合したことで、既存のComposeファイルを活用し、これらのアプリケーションをKubernetesにデプロイしたいと考える開発者もいることでしょう。

デスクトップ上のDocker(Docker EE も同様)では、Dockerを使用してアプリケーションをKubernetesクラスタ上に直接デプロイすることができます。

手順は次の通りです:

Webフロントエンド、ワーカープロセス(words)、データベースの3層のアプリケーションを記述する、次のような簡単なDocker Composeファイルがあるとしましょう。

Webフロントエンドは、ホストの80番ポートからサービスの80番ポート(そして実際にサービスの機能を提供するコンテナ)にトラフィックを転送するように設定します。そしてwordsサービスを5つのレプリカで起動します。


services:
web:
build: web
image: dockerdemos/lab-web
volumes:
- "./web/static:/static"
ports:
- "80:80"
 
words:
build: words
image: dockerdemos/lab-words
deploy:
replicas: 5
endpoint_mode: dnsrr
resources:
limits:
memory: 16M
reservations:
memory: 16M
 
db:
build: db
image: dockerdemos/lab-db

私はDocker for Macを使用して、Kubernetesをデフォルトのオーケストレータとして設定しています。このアプリケーションをデプロイするには、Docker Composeファイルの名前(words.yaml)とスタックの名前(words)をdocker stack deployに引き渡すだけです。本当に魅力的なのは、Docker Swarmで使用するコマンドとまったく同じコマンドであるということです:


$ docker stack deploy --compose-file words.yaml words
Stack words was created
Waiting for the stack to be stable and running...
- Service db has one container running
- Service words has one container running
- Service web has one container running
Stack words is stable and running

kubectlを使用して、Docker Composeファイルによって作成したDeployment、Pod、Serviceのセットが閲覧できます。


$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
db 1 1 1 1 2m
web 1 1 1 1 2m
words 5 5 5 5 2m
 
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
db-5489494997-2krr2 1/1 Running 0 2m
web-dd5755876-dhnkh 1/1 Running 0 2m
words-86645d96b7-8whpw 1/1 Running 0 2m
words-86645d96b7-dqwxp 1/1 Running 0 2m
words-86645d96b7-nxgbb 1/1 Running 0 2m
words-86645d96b7-p5qxh 1/1 Running 0 2m
words-86645d96b7-vs8x5 1/1 Running 0 2m
 
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP None 55555/TCP 2m
web ClusterIP None 55555/TCP 2m
web-published LoadBalancer 10.104.198.84 80:32315/TCP 2m
words ClusterIP None 55555/TCP 2m

サービスのリストを見ると、おかしいと感じる点があるかもしれません。webとweb-publishedの2つのサービスがある点です。webサービスは内部アプリケーション間の通信を可能にする一方で、web-publishedサービス(これは Docker for Macのvpnkitに基くロードバランサ)はWebフロントエンドを全世界に公開します。

したがって、http://localhost:80にアクセスすると、アプリケーションが実行中であることがわかります。Eltonが録画したこのビデオの全体のプロセスを実際に見ることができます。

そして、こちらのサービスを削除したい場合、kubectlを使って削除しようとするかもしれません (私はそうしました)。しかし実際には、docker stack rmを利用すれば、スタックを起動したときに作成されたコンポーネントはすべて削除されます。


$ docker stack rm words
Removing stack: words
 
$ kubectl get deployment
No resources found

さらに素晴らしいことは、同じ手順がDocker EEにおいても使えることです。Docker ComposeファイルをDocker EEのUI上にデプロイするだけです。これについては別の記事でご紹介します。

ご自身で試すには、Docker for MacまたはDocker for Windowsを入手してください。詳細についてはドキュメント(MacWindows)をご参照ください。

もっと学びたい方は:

新規CTA