モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

開発用 PC で複数の Docker コンテナを起動して連携させる (Docker Compose)

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2017/10/23
最終更新最終更新
2020/02/27
記事区分記事区分
一般公開

目次

    Dockerちょっとできる人

    0
    ステッカーを贈るとは?

    コンテナを複数起動して連携させる、オーケストレーションを実現する方法しては Docker 社が提供する Docker Swarm だけでなく、Amazon EC2 Container Service (ECS)Google Container Engine (GKE) などが存在します。これらの方法のうち、特に今後優勢とされるのが GKE で採用されている Kubernetes であり、Docker 社はこれを Docker Swarm と同様に公式にサポートすることを発表しました。

    そのため、今後は以下にまとめる Docker Compose だけではなく Kubernetes も開発用 PC での環境構築に利用できるようになるようですが、現在のところ複数のコンテナを連携させるためには Docker 社が公式にサポートする Docker Compose というツールを利用すると便利です。YAML ファイルに記載した設定にしたがって、開発用 PC 上にコンテナを複数起動して互いに連携させることができます。2017/10/23 現在の Docker Compose バージョンは 3 です。

    サンプル YAML 設定

    実用性はありませんが、以下の三つのコンテナを作成してみます。

    • Dockerfile をもとに build した image をもとに作成する、何もしないコンテナ
    • Docker Hub から image を pull して作成する nginx コンテナ
    • Docker Hub から image を pull して作成する mysql コンテナ

    Dockerfile

    FROM centos:centos6
    RUN yum update -y && yum install -y mysql
    

    docker-compose.yml

    version: '3'
    services:
      myservice:
        build: .
        container_name: myservice
        command: tail -f /dev/null
        volumes:
          - .:/work
          - my-vol:/data
        links:
          - myweb
          - mydb
      myweb:
        image: nginx
        container_name: myweb
        restart: always
        volumes:
          - my-vol:/data
        ports:
          - 20080:80
      mydb:
        image: mysql
        container_name: mydb
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: example
        volumes:
          - my-vol:/data
        ports:
          - 23306:3306
    volumes:
      my-vol:
    

    コンテナ群の起動/停止

    $ docker-compose up
    $ docker-compose down
    

    以下のような状態になります。

    $ docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
    904d08aa7326        xxxx_myservice      "tail -f /dev/null"      31 minutes ago      Up 31 minutes                                 myservice
    6fec25e9cc26        mysql               "docker-entrypoint..."   31 minutes ago      Up 31 minutes       0.0.0.0:23306->3306/tcp   mydb
    13fabbb8a824        nginx               "nginx -g 'daemon ..."   31 minutes ago      Up 31 minutes       0.0.0.0:20080->80/tcp     myweb
    

    動作検証

    何もしない踏み台のようなコンテナにシェルで入ります。

    $ docker exec -it myservice /bin/bash
    

    nginx コンテナと通信できることを確認します。

    [root@d51ef4968d52 /]# curl myweb:80
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    

    mysql コンテナと通信できることを確認します。

    [root@d51ef4968d52 /]# mysql -h mydb -P 3306 -uroot -pexample -e 'show databases'
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    

    ホスト側のファイルシステムがマウントされていることを確認します。

    [root@d51ef4968d52 /]# ls /work/
    Dockerfile  docker-compose.yml
    

    コンテナ間で共有しているボリュームです。

    [root@904d08aa7326 /]# df -h | grep data
    /dev/sda1        63G  2.5G   58G   5% /data
    

    ホスト側から nginx コンテナと通信できることを確認します。

    $ curl localhost:20080
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    

    ホスト側から mysql コンテナと通信できることを確認します。

    $ mysql -h 127.0.0.1 -P 23306 -uroot -pexample -e 'show databases'
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Dockerちょっとできる人

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事