Dockerイメージのビルドや各コンテナの起動・停止などを簡単に行うことができるオーケストレーション型のツールDocker compose v2をmacOSにインストールし、データーベースサーバー「mySQL」立ち上げまでの方法を解説します。
本記事の読者層は以下の方を想定しています。
- 最新版のDocker Composeをインストールしたい方。
- Docker Composeを最新版にアップグレードしたい方。
Docker compose とは?
「Docker compose」は複数のコンテナで構成されるアプリケーションをDockerで簡単に利用するために、Dockerイメージのビルドや各コンテナの起動・停止などを行うことができるオーケストレーション型のツールです。
M1のmacOSで「Docker Desktop for mac」を利用すると、Docker のインストールが簡単にできます。同時に「Docker compose」も同時にインストールしてくれます。
インストールの詳細は、以下の記事ご参照ください。
この「Docker Desktop for mac」のインストールによって、Docker Engine や、Compose プラグイン対応の Docker CLI だけでなく、ほかのコンポーネントやツールも同時にインストールされます。インストール時に、Docker composeもバージョン2がインストールされます。
今回のmacOSの環境ですが、
Dockerの環境
- Docker Desktop for mac (M1チップ搭載macOS Monterey memory 16GB)
バージョン 20.21 - Docker compose
バージョン 2.12.2 - mySQL
バージョン 5.7
にて使用しています。
Docker compose v2の使用方法
Docker compose V1とV2の違い (V1 vs V2)
Docker composeにはファイル形式のバージョン情報とDocker compose のプログラムバージョンという異なるバージョン情報があります。ここでは、Docker composeのバージョン情報に関して説明を致します。
【1】Docker compose V1
Compose V1 はPythonで実装されたスタンドアロンバイナリ形式で提供されています。このバージョンは2023年4月までにV2へ以降することが推奨されています。それ以降の新機能の追加は停止されます。また、セキュリティ対応やバグ修正等の対応は2022年10月まで行われていました。
【2】Docker compose V2
2020年半ばにCompose V2がリリースされて以降、ファイル形式V2とV3をマージしたものがDocker compose V2です。
Docker compose v2 はCompose V1のすべての機能を提供し、マルチコンテナーやアプリケーションを効率的に実行するように設計されています。
Docker compose のインストール方法
macOSでDocker composeのバージョンを確認してみます。
以下のコマンドからはバージョン2.12.2が入っています。
% docker compose version
Docker Compose version v2.12.2
% docker-compose version
Docker Compose version v2.12.2
今回「docker compose」と「docker-compose」の2つのコマンドが利用できました。
理由は以下の通りです。
Docker composeのV1とV2の違い
Compose V1 は コマンドが「docker-compose」 ですが、 Compose V2 は 「docker compose」 となっています。現在の Docker Compose は、両方のバージョンが共存していますので、上記のように両方のコマンドが利用できます。
macOS上では、以下のようにDockerはフォルダ「/usr/local/bin/」上にインストールされており、Docker-composeも同一フォルダ上にあるようです。
$ which docker
/usr/local/bin/docker
$ which docker-compose
/usr/local/bin/docker-compose
mySQLのDocker立ち上げ
まず、「Docker Hub」よりmySQLの最新版のイメージを引っ張ってきます。
$ sudo docker pull mysql
イメージがダウンロードさえrているかを「docker images」で確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker101tutorial latest daf03c34a1e1 6 days ago 28.4MB
mysql latest e8ff7e619492 7 days ago 550MB
nextcloud latest 0541d48c4009 7 days ago 947MB
alpine/git latest 9793ee61fc75 2 weeks ago 43.4MB
次に、Dockerで使用するnetworkの設定を行います。「todo-app」というネットワークを作成します。
docker network create todo-app
composeを使用せずにDcokerが動くか確認してみます。
% docker run -d --network todo-app --network-alias mysql -v todo-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=future -e MYSQL_DATABASE=todos mysql
5fa1fb941606f225ded364939d5342519ca92ea1f5267882e8f7d7eeb8c1dfe5
更にイメージリストを確認してみて、リスト内にあることから、Dockerが動くことが確認できました。
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fa1fb941606 mysql "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp goofy_edison
a84e6e640891 nextcloud "/entrypoint.sh apac…" 6 days ago Up 6 days 0.0.0.0:8080->80/tcp quizzical_brown
次にMySQLを立ち上げます。
コマンド「docker exec -it <CONTAINER ID> mysql -p」をタイプして、パスワードを入力すると。
% docker exec -it 5fa1fb941606 mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.31 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のサーバーバージョン 8.0.31が立ち上がります。
「show databases;」を入力するとtodosが出来ていることが分かります。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| todos |
+--------------------+
5 rows in set (0.03 sec)
最後に「exit」コマンドでdockerから抜けておきます。
Docker-composeの利用
この状態でdocker compose upをしてみましょう。最初にdocker compose upコマンドを入力します。
% docker compose up
no configuration file provided: not found
当然、ファイルがないと怒られてしまいますね。
macOSのルートディレクトリ(ホームディレクトリ上で良いかと思います。)に以下のファイル「docker-compose.yml」を作成します。
【docker-compose.yml】
version: "3.9"
services:
mysql:
image: mysql
platform: linux/arm64/v8
container_name: mysql-container
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: demo
TZ: "Asia/Tokyo"
volumes:
- ./my.cnf:/etc/mysql/conf.d/my.cnf
同様にconfigurationファイルも作成します。
【my.cnf】
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_ja_0900_as_cs # 照合順序
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
以上終了したら、再度、composeを実行してみます。
% docker-compose up -d
[+] Running 1/1
⠿ Container mysql-container Started
Runningとでているので、これで立ち上がっています。ただ、imagesでは見えませんでした。
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
しかし、psファイルではイメージファイルが見えています。
$ docker images ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5171c8c5f1f mysql "docker-entrypoint.s…" 42 seconds ago Up 42 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-container
5fa1fb941606 mysql "docker-entrypoint.s…" 21 minutes ago Up 21 minutes 3306/tcp, 33060/tcp goofy_edison
a84e6e640891 nextcloud "/entrypoint.sh apac…" 6 days ago Up 6 days 0.0.0.0:8080->80/tcp quizzical_brown
これでmyqlがdocker composeで立ち上がります。
次にdockerイメージ内に入ってmysqlの環境を確認してみます。
% docker exec -it c5171c8c5f1f bash
bash-4.4#
#IDの確認
bash-4.4# id
uid=0(root) gid=0(root) groups=0(root)
bash-4.4# uname -a
Linux c5171c8c5f1f 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
bash-4.4# cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="8.7"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.7"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:7:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.7
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.7
#mySQLのバージョンの確認
bash-4.4# mysql --version
mysql Ver 8.0.31 for Linux on aarch64 (MySQL Community Server - GPL)
#mySQLの起動
bash-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.31 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>
以上のようにmysqlが動いていることが確認できます。
#データベースの確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| demo |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.02 sec)
#データベースのdemo内の確認
mysql> use demo
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| demo |
+------------+
1 row in set (0.00 sec)
#データベースの文字列の確認
mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.02 sec)
#データベースの文字列の確認
mysql> show variables like '%collation%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| collation_connection | utf8mb4_unicode_520_ci |
| collation_database | utf8mb4_ja_0900_as_cs |
| collation_server | utf8mb4_ja_0900_as_cs |
| default_collation_for_utf8mb4 | utf8mb4_unicode_520_ci |
+-------------------------------+-----------------------+
4 rows in set (0.00 sec)
mysql>
mysqlを離脱する際には、「exit」
コンテナを抜け得る際にも、「exit」
コマンドを入力します。
更に、docker-composeを終了する際には以下のコマンドを入力します。
% docker-compose down
[+] Running 2/1
⠿ Container mysql-container Removed 1.3s
⠿ Network tomitatakahiro_default Removed
docker-compose update の方法
「docker compose」のインストールは「Docker Desktop for Mac」から行っているため、このアプリ側からアップグレードを行うのが良い。詳細は以下の記事を参照のこと。
まとめ
本記事のまとめは
- Docker compose v2をmacOSで「mySQLイメージ」を使って利用する方法を確認しました。
次回の記事をご期待下さい。どうぞよろしくお願いいたします。
コメント