Dockerを通じてMySQLを使⽤するための起動や使⽤方法について記録しました。
環境
- macOS Big Sur 11.1 (Silicon m1 chip)
- Docker 20.10.6
事前準備
- MySQL Workbench
MySQL Workbench は、データベースアーキテクト、開発者、DBA のための統合ビジュアルツールです。(公式サイトより)
インストールの仕方は主に二つあります:
- 公式サイトで提供されたインストーラにてインストールします。
- macOSの場合は、homebrewでのインストールが可能です。
Docker環境でDBに接続する手順(MySQL)
MySQLのイメージファイルをpullするには、MySQLのDocker Hubで使用したいバージョンのTagを指定します。
M1 Macを使っているので CPU アーキテクチャは ARM ですが、公式リファレンスにも、「Intel イメージの実行には、エミュレーションのもとで--platform linux/amd64をつけて実行することが必要です。 特に mysql イメージは ARM64 向けには利用できません。 これに対する当面の対処としては mariadb イメージを利用してください。」という記述があります。色々と調べたら、この記事により、platform
を linux/x86_64
に指定することでミュレーションとして動作することが解りましたので、この方式で進めます。
$ docker pull --platform linux/x86_64 mysql:8
8: Pulling from library/mysql
15115158dd02: Pull complete
d733f6778b18: Pull complete
1cc7a6c74a04: Pull complete
c4364028a805: Pull complete
82887163f0f6: Pull complete
097bfae26e7a: Pull complete
e1b044d6a24f: Pull complete
cd2978bd4d12: Pull complete
28bce5cc1677: Pull complete
907b6d695760: Pull complete
c5049403458b: Pull complete
f360718d6f4e: Pull complete
Digest: sha256:0eb33f0094ef5351639d9d9847c963ee9f22f5631cde046babd4ec239aaeaf06
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8
イメージがうまくpullされたか確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8 c1558761f285 3 days ago 519MB
作業用ディレクタリを作成します。
$ mkdir docker_mysql
$ cd docker_mysql
先ほどpullしたMySQLイメージでコンテナを回すため、作業用ディレクタリに以下のYAMLファイル(docker-compose.yml
)を作成ます。
# docker-compose.ymlのバージョン
version: "3.8"
# services以下にmysql8コンテナの設定を書く
# services.mysql8.image: 使用するイメージ名称。
# services.mysql8.container_name: コンテナ名称。
# services.mysql8.platform: M1 Macで起動できるように linux/x86_64 を指定する。
# services.mysql8.volumes: マウント・パス
# services.mysql8.environment: 環境変数
# services.mysql8.ports: 公開用のポート
services:
mysql8:
image: mysql:8
container_name: mysql8
platform: linux/x86_64
volumes:
- ~/mysql-docker-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 12345
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
services.environment.MYSQL_ROOT_PASSWORD
は接続際に使用するパスワードです。
YAMLファイルを作成したら、docker-compose
でコンテナーをYAMLファイルに書いてあった設定の通りに起動します。
$ docker-compose up -d
Creating network "docker_mysql_default" with the default driver
Creating mysql8 ... done
コンテナーがうまく起動されたか確認します。以下の結果が表⽰されたらDocker環境のDBにの接続する準備は完了です。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8583e916916e mysql:8 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql8
以下のコマンドでdocker-compose.ymlで設定したパスワードで接続し、MySQLモニターに⼊ります。
$ docker exec -it mysql8 mysql -u root -p
Enter password: 12345
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
これでDBへの接続が完了です。
MySQL workbenchの使用
コンテナーが起動されたら、MySQL Workbenchを起動し、ポート3306(YAMLファイルに設定したポート)に接続してください。MySQL Workbenchの起動画面が表示されます。
DB接続にはYAMLファイルに設定したパスワードを入力します。
OKをクリックしたら、MySQL Workbenchが使えます。
コンテナの停止、削除
コンテナを停止するときには以下のコマンドを入力します。
$ docker stop mysql8
コンテナを削除するには以下のコマンドを入力します。
$ docker rm mysql8
参考サイト一覧
https://phoenixnap.com/kb/mysql-docker-container
https://matthung0807.blogspot.com/2020/08/docker-mysql.html