Docker compose v2をmacOSにインストールする方法

DOCKER
この記事は 3 分で読めます。
概要

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イメージ」を使って利用する方法を確認しました。

次回の記事をご期待下さい。どうぞよろしくお願いいたします。

関連リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次