mysql8単体のDocker環境を作成する

docker

記事について

mysql-8.xの自由にいじれる環境が欲しかったので、その環境作成のメモ。

Dockerの各ファイル作成

ディレクトリ作成

まずは必要なディレクトリの作成。

$ mkdir -p mysql8-general
$ cd mysql8-general
$ mkdir -p docker/init
$ mkdir -p logs
mkdir -p var

最終的に以下のような構成になる予定。

mysql8-general
├── docker
│   ├── Dockerfile
│   ├── init
│   └── my.cnf
├── docker-compose.yml
├── .env
├── logs
└── var

環境設定ファイルの作成

コンテナ名が適当な名前でできると困るので名前を指定する。

$ vi .env
COMPOSE_PROJECT_NAME=mysql8-general

Dockerfileの作成

Dockefileを作成する。特筆点はなし。

$ vi docker/Dockerfile
$ vi docker/Dockerfile
FROM mysql:8.0.31

ADD ./my.cnf /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]

my.cnfの作成

my.cnfを作成する。

$ vi docker/my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
default-time-zone = SYSTEM
log_timestamps = SYSTEM
default-authentication-plugin = mysql_native_password
log-error = /var/log/mysql/mysqld-error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0
general_log = 1
general_log_file = /var/log/mysql/mysql-general.log

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4

docker-compose.ymlの作成

デフォルトのポートを変えていないので、複数起動をする場合は外部接続ポートを変更する。

version: '3.9'
services:
  mysql8-general:
    image: mysql:8.0.31
    container_name: mysql8-general
    build: ./docker/
    volumes:
      - ./var:/var/lib/mysql
      - ./logs:/var/log/mysql
      - ./docker/init:/docker-entrypoint-initdb.d
    environment:
      TZ: 'Asia/Tokyo'
      MYSQL_ROOT_PASSWORD: "password"
      #command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    ports:
      # 外部接続ポートは重複すると起動できないので、複数起動する場合はポートを変更する
      #- 3316:3306
      - 3306:3306
        #restart: always
    tty: true
    networks:
      - local-network
networks:
  local-network:
    external: true
    name: local-network

ビルド・起動

起動してみる。

$ docker-compose build
$ docker-compose up -d
$ docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED              STATUS              PORTS
                       NAMES
5f70a7e373b3   mysql:8.0.31               "docker-entrypoint.s…"   1 minutes ago        Up 1 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp          mysql8-general

ubuntu側(コンテナの外)から接続する。外部接続ポートを変更している場合はポートを変更して接続する。passwordはdocker-compose.ymlで指定したMYSQL_ROOT_PASSWORDを使用する。

$ mysql -u root -h 127.0.0.1 -P3306 -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>

余談

コンテナ間でDBに接続する場合にはまず、docker-compose.yml内のnetworksで、接続元(アプリケーション)と接続先(DB)が同一ネットワークに属している必要がある。

また、アプリケーション側からDBへ接続する場合には、docker-compose.ymlで定義したコンテナ名で接続が可能。今回の例で言えば「mysql8-general」。127.0.0.1ではつながらないので注意。

コメント

タイトルとURLをコピーしました