[Docker]DBを共有している2つのサービスを設定するyml🍕

2024/10/20に公開

今回やりたかったこと

1つのDBを共有する、2つのサービス(Webサイト画面と、そのWebサイトの管理画面)をローカル環境構築する。

2つのサービスについて

・Webサイトとその管理画面には、共有ディレクトリを持っている
・設定内容はドキュメントルート以外同じ

docker-compose.ymlの設定

サービスを2つ立てる場合に、docker-compose.ymlで変更する設定条件
 ・サービス名
 ・コンテナ名(同じコンテナ名は使用することはできない)
 ・port番号(同じポート番号を設定していると同時にブラウザ表示できない)
 ・ドキュメントルート(Dcokrefileにも指定するが、ymlにも書かないとうまくいかなかった)

services:
  php-1:             #サービス名
    image: php:7.4.29-apache
    build: ./dockerfiles/www #Dockerfileの場所(ここのDockerfileにもドキュメントルートの設定をする)
    container_name: php-1   #コンテナ名:他のコンテナに同じ名前をつけることはできない
    volumes:
      - ./var/www/html:/var/www/html
    ports:
      - 8080:80
        # 8080 → http://localhost:8080/でローカルでサイトを開くことができる。
    depends_on:
      - db
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/html/ww  #ドキュメントルートの設定

  php-2:
    image: php:7.4.29-apache
    build: ./dockerfiles/admin
    container_name: php-2
    volumes:
      - ./var/www/html:/var/www/html
    ports:
      - 8081:80
     # もう一つのPHPコンテナとは違うポート番号にする → http://localhost:8081/でローカルでサイトを開くことができる。
    depends_on:
      - db
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/html/admin  #ドキュメントルートの設定

  db:
    image: mysql:8.0.29
    container_name: mydatabase
    platform: linux/amd64
    environment:
      TZ: Asia/Tokyo
      MYSQL_HOST: localhost
      MYSQL_ROOT_PASSWORD: ××××1234
      MYSQL_DATABASE: my-database
    ports:
      - 3306:3306
    volumes:
      - ./mysql/:/docker-entrypoint-initdb.d/
    command: |
      mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci &&
      mysqld --innodb_use_native_aio=0

Discussion