【Docker】初心者がDocker ComposeでMySQLとアプリを起動してみた

スポンサーリンク
プログラミング
スポンサーリンク
スポンサーリンク

【Docker】初心者がDocker ComposeでMySQLとアプリを起動してみた

Docker初心者が、DockerComposeを使ってDocker環境を作ったので備忘

やりたいこと
  1. DockerComposeを使って、アプリケーション用コンテナ app とデータベース用コンテナ db を定義する
  2. アプリケーション用コンテナ app は、こちらの記事で作ったPHP Webサーバーを利用する
  3. データベース用コンテナ db は、MySQLを作成する。
    Docker Imageには MySQL 5.7.29 を使用する。
  4. アプリケーション用コンテナ app とデータベース用コンテナ db は、連携しない

作成したファイル

.
├── docker-compose.yml
└── services
    └── app
        ├── Dockerfile
        └── src
            └── index.php
version: '2'
services:
  app:
    build: "./services/app"
    container_name: "app"
    ports:
    - "8000:80"
  db:
    image: "mysql:5.7.29"
    container_name: "db"
    ports:
    - "33060:3306"
    environment:
      MYSQL_DATABASE: dbname
      MYSQL_ROOT_PASSWORD: Password
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
services/db/data/*
FROM ubuntu:16.04

RUN apt-get update
RUN apt-get install -y software-properties-common
RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
RUN apt-get update
RUN apt-get install -y php7.4

COPY ./src/index.php /var/www/html/

CMD [ "php", "-S", "0.0.0.0:80", "-t", "/var/www/html/" ]
Hello world!

起動コマンド

-- docker compose 起動
$ docker-compose up

http://localhost:8000にアクセスしてHello world! が表示されれば成功
データベースを tcp 33060 ポートでホストマシンから接続できれば成功

解説

docker-compose.yml
version: '2'
services:

volume機能などversion指定しないと使えないので、version:2を指定する。詳細はこちら参照
バージョン2の Compose ファイルでは、ドキュメントの冒頭でバージョン番号を明示する必要があります。 services キーの下で全ての サービス を定義する必要があります。


  app:
    build: "./services/app"
    container_name: "app"
    ports:
    - "8000:80"
  • build
    Dockerfileがあるパスを指定する
  • container_name
    デフォルトで生成される名前の代わりに、カスタム・コンテナ名を指定します。
  • ports
    公開用のポートです。ホスト側とコンテナ側の両方のポートを指定( ホスト側:コンテナ側 )

  db:
    image: "mysql:5.7.29"
    container_name: "db"
    ports:
    - "33060:3306"
    environment:
      MYSQL_DATABASE: dbname
      MYSQL_ROOT_PASSWORD: Password
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./services/db/data:/var/lib/mysql
  • image
    コンテナを実行時に元となるイメージを指定します。リポジトリ名・タグあるいはイメージ ID の一部を指定できます。
  • environment
    MySQLのDBとROOTパスワードを設定
  • command
    MySQLの文字コードを utf8mb4 に設定する
  • volumes
    マウント・パスまたは名前を付けたボリュームは、オプションでホストマシン( ホスト:コンテナ )上のパス指定や、アクセス・モード( ホスト:コンテナ:rw ) を指定できます。 バージョン2のファイル では名前を付けたボリュームを使うにはトップ・レベルの volumes キー を指定する必要があります。 バージョン1 の場合は、ボリュームが存在していなければ Docker Engine が自動的に作成します。

タイトルとURLをコピーしました