【Docker】初心者がDocker ComposeでMySQLとアプリを起動してみた
Docker初心者が、DockerComposeを使ってDocker環境を作ったので備忘
やりたいこと
- DockerComposeを使って、アプリケーション用コンテナ
app
とデータベース用コンテナ db
を定義する - アプリケーション用コンテナ
app
は、こちらの記事で作ったPHP Webサーバーを利用する - データベース用コンテナ
db
は、MySQLを作成する。
Docker Imageには MySQL 5.7.29 を使用する。 - アプリケーション用コンテナ
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
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/" ]
起動コマンド
-- docker compose 起動
$ docker-compose up
http://localhost:8000にアクセスしてHello world! が表示されれば成功
データベースを tcp 33060
ポートでホストマシンから接続できれば成功
解説
docker-compose.yml
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 が自動的に作成します。