Docker Composerとは? 複数コンテナをまとめて生成・削除できるInfrastructure as Code(IaC)の一種。docker-composer.ymlというテキストファイルに記述する。
Docker Composerのサービスは、コンテナの集合体の事。
docker-composer.ymlは
最初に version: “3” ← docker-composeのバージョン指定(必須)
大項目その1が、services: ← コンテナの記述(必須)
大項目その2が、networks: ← ネットワークの記述(オプション)
大項目その3が、volumes: ← ボリューム(ファイル・ストレージ)の記述(オプション)
webサーバだけの最も単純なdocker-composer.yml
1 2 3 4 5 6 |
version: '3.8' # docker-composeのバージョン指定 services: apache: image: httpd:latest # 使用するイメージとそのバージョン ports: - "8080:80" # ホストのポート:コンテナのポート |
docker-composer.ymlがあるフォルダまで行って実行
1 2 3 4 5 6 7 8 9 10 11 12 |
# コンテナ生成&起動 # -dでデタッチモードで実行。これがないとログ表示画面になってコマンドを受け付けない。 docker-compose up -d # コンテナ停止&削除 docker-compose down # コンテナ停止だけ docker-compose stop # どんなdocker composerが実行されているか? docker-compose ls |
MySQLだけの単純なdocker-composer.yml
コンテナを削除しても、mysqlのデータを保持したいので、dockerボリュームに保存する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
version: '3.8' # docker-composeのバージョンを指定 services: mysql: image: mysql:latest # 使用するMySQLのイメージとバージョン volumes: - mysql_data:/var/lib/mysql # データ永続化用のボリュームマウント environment: MYSQL_ROOT_PASSWORD: examplepassword # MySQLのルートパスワード MYSQL_DATABASE: exampledb # 初期化時に作成するデータベース MYSQL_USER: exampleuser # データベースのユーザー名 MYSQL_PASSWORD: exampleuserpassword # データベースユーザーのパスワード ports: - "3306:3306" # ホストのポートをコンテナのポートにマッピング restart: always # コンテナが停止した場合、常に再起動 volumes: mysql_data: # MySQLデータの永続化に使用するボリューム |
docker-composer.ymlがあるフォルダまで行って実行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# コンテナ生成&起動 # -dでデタッチモードで実行。これがないとログ表示画面になってコマンドを受け付けない。 docker-compose up -d # docker composer内のコンテナ一覧 docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS a-apache-1 httpd:latest "httpd-foreground" apache 18 minutes ago Up 18 minutes 0.0.0.0:8080->80/tcp a-mysql-1 mysql:latest "docker-entrypoint.s…" mysql About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp # mysqlのコンテナ名が分かったら、DB接続してコマンドラインから、MySQLへアクセス! docker exec -it a-mysql-1 mysql -u root -pexamplepassword mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | exampledb | | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ # コンテナ停止&削除 docker-compose down # コンテナ停止だけ # docker-compose stop # どんなdocker composerが実行されているか? docker-compose ls # 一度、コンテナ停止&削除した後に、もう一回コンテナ生成&起動して、MySQLに接続 docker-compose up -d docker exec -it a-mysql-1 mysql -u root -pexamplepassword # testインスタンスが保持されている事を確認!dockerボリュームのおかげ! mysql> show databases; +--------------------+ | Database | +--------------------+ | exampledb | | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 6 rows in set (0.00 sec) |
コマンドラインも大変なので、phpmyadminで操作しよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
version: '3.8' # 使用するdocker-composeのバージョンを指定します。 services: # コンテナ化されたアプリケーションを定義します。 db: # MySQLデータベースサービスの定義開始。 image: mysql:5.7 # 使用するMySQLのイメージとそのバージョン。 volumes: - db_data:/var/lib/mysql # データ永続化用のボリュームをマウントします。これにより、コンテナを再起動してもデータが失われません。 environment: # 環境変数を設定します。 MYSQL_ROOT_PASSWORD: rootpassword # MySQLのrootユーザーのパスワード。 MYSQL_DATABASE: exampledb # 作成するデータベースの名前。 MYSQL_USER: user # データベースのユーザー名。 MYSQL_PASSWORD: password # データベースユーザーのパスワード。 restart: always # コンテナが停止した場合にはいつでも再起動します。 phpmyadmin: # phpMyAdminサービスの定義開始。 image: phpmyadmin/phpmyadmin # 使用するphpMyAdminのイメージ。 depends_on: # このサービスが依存する他のサービス。 - db # phpMyAdminはdbサービスが起動していることを前提とします。 environment: # 環境変数を設定します。 PMA_HOST: db # phpMyAdminからアクセスするMySQLホストの名前。ここでは`db`サービスを指します。 PMA_USER: user # MySQLにログインするためのユーザー名。 PMA_PASSWORD: password # MySQLのユーザーパスワード。 ports: - "8080:80" # ホストの8080ポートをコンテナの80ポートにマッピングします。これにより、ブラウザからphpMyAdminにアクセスできます。 restart: always # コンテナが停止した場合にはいつでも再起動します。 volumes: # データの永続化に使用するボリュームの定義。 db_data: # MySQLデータ用のボリューム。このボリュームは、`db`サービスによって使用されます。 |