CL LAB

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

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

 ★ 3

本稿は Docker Compose and Kubernetes with Docker for Desktop (2018/02/15) の和訳です。

デスクトップ上でEdgeバージョンのDocker ( Docker for Mac または Docker for Windows Desktop )をご利用の方は、ボタンを1つクリックするだけで単一ノードのKubernetesクラスタを立てることが可能になりました。私自身は開発者ではないのですが、このことは、MacbookやWindowsのノートパソコンでDockerを使っている多くの開発者にとって朗報だと思います。今ならDockerに完全に適合したKubernetesクラスタを、他のツールをインストールすることなく簡単な操作で手に入れることができるからです。

コンテナ化したアプリケーションの構築にDockerを利用している開発者は、それらのアプリをデプロイするためにしばしばDocker Composeファイルを作成します。Dockerの製品ラインへのKubernetes統合によって、既存のDocker Composeファイルを活用し、Kubernetesでそれらのアプリケーションを実行したいと考える開発者もいることでしょう。それにはもちろん Kompose を使用すればいいのですが、これでは2つの異なる中間生成物を管理しなければならなくなります。ネイティブなDockerに基づいたワークフローを維持する方法はないのでしょうか?

デスクトップ版Docker (および Docker Enterprise Edition )では、アプリケーションをKubernetesクラスタ上で直接デプロイするためにDocker Composeをご利用いただけます。

手順は次の通りです:

次のような3つの段階のアプリ(ウェブフロントエンド、ワーカープロセス( words )、データベース)を記述する1つのDocker Composeファイルを持っていると仮定します。

私たちのウェブフロントエンドは、ホストの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を使うと、Deployment、Pod、Serviceが閲覧できます。これらはDocker Composeファイルによって作成されています:

$ 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

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

よって、私たちが http://localhost:80 を訪問すれば、実行中のアプリを確認できるのです。このプロセスのすべては Elton Stoneman 氏が録画した こちらの動画 でご覧いただけます。

そして、こちらのサービスを削除したい場合、皆さまは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 )をご参照ください。

もっと学びたい方は:

CL LAB Mail Magazine

CL LABの情報を逃さずチェックしよう!

メールアドレスを登録すると記事が投稿されるとメールで通知します。

メールアドレス: 登録

※登録後メールに記載しているリンクをクリックして認証してください。

Related post

Docker社公認トレーニングコース