DockerでMySQLとDB管理ツールのAdminerを実行する
docker-compose.ymlを作成
version: '3.8'
services:
mysql:
image: mysql
restart: always
ports:
- 33306:3306
environment:
- MYSQL_ROOT_PASSWORD=mysql
- MYSQL_DATABASE=test_db
- MYSQL_USER=user
- MYSQL_PASSWORD=password
command: ['--default-time-zone=+09:00']
volumes:
- ./mysql-data:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8080:8080
depends_on:
- mysql
DB管理にAdminerではなくphpMyAdminを使用したい場合は「adminer」を下記に書き換える
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- 80:80
depends_on:
- mysql
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=mysql
- PMA_PORT=3306
- PMA_USER=root
- PMA_PASSWORD=mysql
起動コマンド
docker-compose up -d
停止コマンド
docker-compose down
Adminerへのアクセス
http://localhost:8080へアクセスすると下記画面が表示される
コンテナへのアクセスについて
- ローカルからのアクセス先は「localhost」になる
コンテナのポートについて
- ポートは「ローカルの転送元:Dockerへの転送先」になる
- DockerのサービスAとサービスBのポートが被っている場合は、下記のようにポートを設定しておけばそれぞれのサービスに転送される
- サービスAのポート:10080:80
- サービスAのポート:10081:80
- DockerのサービスAとサービスBのポートが被っている場合は、下記のようにポートを設定しておけばそれぞれのサービスに転送される
コンテナ間の連携について
- コンテナ間の連携はdocker-compose.ymlに記載されたサービス名でアクセスが可能になる
- adminerサービスからはmysqlサービスへは「mysql:3306」でアクセスする
データの永続化
- mysqlサービスのvolumesを指定していない場合、停止するたびにDBのデータが初期化される
- volumesの指定は「ローカルの保存先フォルダ:Dockerの保存元フォルダ」になるため、ローカルの「mysql-data」にmysqlのDBデータが保存される
イメージのバージョン指定
- 「mysql」のバージョンを指定したい場合、「mysql:8.0」のように指定する
「restart」とは?
- 「always」指定でコンテナでエラーが発生した場合に自動で再起動する
「depends_on」とは?
- 起動順序を指定する
- adminerサービスに「depends_on: - mysql」が指定されているのでmysql→adminerの順で起動される