Docker for MacでさくっとDocker Compose

Contents


はじめに

Docker Composeを使うと複数のコンテナを定義・実行できるらしい。お試しでWordPressとMySQLのコンテナをそれぞれ操作していたが、それがまとめて管理できる。
イメージをつかみたいため、今回も細かいことはあまり気にしないで試してみる。

 

どうすればいい?

YML形式のファイルに定義してコマンドで実行する。

事前にdocker-composeをインストールしておくこと。(私はまとめていれてしまいましたが、こちら参考までに)

 

想定コマンド

前回、試したDockerコマンド(以下)をDocker Composeで試してみる。

$ docker run --name mysql --network wp-network -e MYSQL_ROOT_PASSWORD=<パスワード> -d mysql:5.7
$ docker run --name dev-wordpress --network wp-network -e WORDPRESS_DB_PASSWORD=<パスワード> -p 8080:80 -d wordpress

 

docker-comporse.ymlを作成

上記コマンドで実行した内容をdocker-comporse.ymlに書き起こします。

1.作業ディレクトリ作成して移動

$ mkdir wordpress
$ cd wordpress/

2.docker-comporse.ymlを作成

version: '3.5'

services:
  db:
    image: mysql:5.7
    container_name: dev-mysql
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root-pass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp-user
      MYSQL_PASSWORD: wp-user-pass
    networks:
      - backend

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: dev-wordpress
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp-user
      WORDPRESS_DB_PASSWORD: wp-user-pass
    networks:
      - backend
volumes:
  db_data:
networks:
  backend:
    name: wp-network
    driver: bridge

volumes: 永続ストレージ(実態の場所とかはまた別途)
networks: Dockerネットワークの設定。指定しなくてもdocker-compose.ymlを使うと自動で作成されるが、任意のネットワーク名をつけるために今回は使用。

 

docker-comporse.ymlからコンテナ起動

-dオプションつけてバックグラウンドでコンテナ起動

$ docker-compose up -d
Creating network "wp-network" with driver "bridge"
Creating volume "wordpress_db_data" with default driver
Creating dev-mysql ... done
Creating dev-wordpress ... done

コンテナができていることを確認

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
ee6cd4832ee3        wordpress:latest    "docker-entrypoint.s…"   39 seconds ago      Up 37 seconds       0.0.0.0:8080->80/tcp   dev-wordpress
116a4556a3ad        mysql:5.7           "docker-entrypoint.s…"   40 seconds ago      Up 38 seconds       3306/tcp               dev-mysql

ブラウザでWordPressの画面が表示されることを確認

http://127.0.0.1:8080

 

確認・操作コマンド

Dockerネットワーク「wp-network」ができていることを確認

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
475d5461ba1c        bridge              bridge              local
39ceb5045065        host                host                local
a266b0b7d53a        none                null                local
43bebca15e8b        wp-network          bridge              local

「wp-network」の詳細確認

$ docker network inspect wp-network
[
    {
        "Name": "wp-network",
        "Id": "43bebca15e8b143ed6031a031772622c0937304d5957d7e234bbc35a0efdd882",
        "Created": "2018-08-10T09:59:26.353821495Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "116a4556a3adfefa9d304d6e74f5580f95f19b53e461ee7ce287fa1910f0947a": {
                "Name": "dev-mysql",
                "EndpointID": "6c104e6018b8e2a290da5c752f7322c27f59a416473f7129b0c68fe48cb97eb7",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "ee6cd4832ee3f33ad5f543eb1b45b48cca338fba1fa4c521bcf48adfa37e24cc": {
                "Name": "dev-wordpress",
                "EndpointID": "ecdeb6c0d2755d90ab568f9534b1f5286582552e993335a2905cb8020c8e7af7",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "wp-network",
            "com.docker.compose.project": "wordpress",
            "com.docker.compose.version": "1.22.0"
        }
    }
]

volumeの確認

$ docker volume ls
DRIVER              VOLUME NAME
local               622eb5bdee58214be8d7629361ed4d39c1048e93509f45f2cc61ce63751485af
local               wordpress_db_data

volumeの詳細確認

$ docker volume inspect wordpress_db_data
[
    {
        "CreatedAt": "2018-08-10T09:59:37Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "wordpress",
            "com.docker.compose.version": "1.22.0",
            "com.docker.compose.volume": "db_data"
        },
        "Mountpoint": "/var/lib/docker/volumes/wordpress_db_data/_data",
        "Name": "wordpress_db_data",
        "Options": null,
        "Scope": "local"
    }
]

コンテナの停止

$ docker-compose kill
Killing dev-wordpress ... done
Killing dev-mysql     ... done

コンテナの削除

$ docker-compose rm
Going to remove dev-wordpress, dev-mysql
Are you sure? [yN] y
Removing dev-wordpress ... done
Removing dev-mysql     ... done

作成したDockerネットワークの削除

$ docker network rm wp-network

作成したvolumeの削除

$ docker volume rm 622eb5bdee58214be8d7629361ed4d39c1048e93509f45f2cc61ce63751485af
$ docker volume rm wordpress_db_data

リンク切れvolumeの削除 (使われていないvolumeの削除はこちらが便利)

$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N]

 

Docker楽しい

 

参考

https://eikatou.net/blog/3299.html
https://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce
https://docs.docker.com/compose/wordpress/
https://qiita.com/Ikumi/items/b319a12d7e2c9f7b904d
https://knowledge.sakura.ad.jp/16862/