稚拙ですが、mysql57用のdocker-compose.yamlを公開します。
docker-compose
$ docker-compose -v
docker-compose version 1.29.2, build unknown
ubuntuのVMでやってるので、公式サイトのバージョンとは一致しないようですが、そこまで古いバージョンでは有りません。
ファイルツリー構造
$ tree .
.
├── data
│ └── mysql
│ └── sample.sql
├── docker-compose.yaml
└── mysql
└── my.cnf
3 directories, 3 files
data配下のsample.sqlは、DB初期化用のSQLdumpです。
CREATE DATABASEとか、CREATE TABLEが書いてあるもの。
yamlファイル
docker-compose.yaml
version: '3.9'
services:
db:
container_name: db
image: mysql:5.7
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- "./mysql/my.cnf:/etc/mysql/conf.d/my.cnf"
- "./data/mysql:/docker-entrypoint-initdb.d"
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: hoge
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
networks:
- infra_default
restart: always
networks:
infra_default:
external: true
data配下をマウントしてます。
docker-entrypoint-initdb.d
ディレクトリにsqlファイルを置くことで、コンテナ起動時にインポートしてくれます。
my.cnf
もコンテナに送り込むことで、文字コードをutf-8に修正します。
起動
docker-compose.yamlがある階層で実行します。
docker-compose up --build
停止はCtrl + cとかで止めてます。(止め忘れるので。)
コマンド実行時に、以下のようなエラーが出た場合は…。
ERROR: Network infra_default declared as external, but could not be found. Please create the network manually using `docker network create infra_default` and try again.
ネットワークを作ってあげると、うまくいきます。
docker network create infra_default
bridgeネットワークができます。
コンテナ起動後は3306(mysql)のポートができます。
# netstat -nlpt
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 468/systemd-resolve
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 31264/docker-proxy
tcp 0 0 127.0.0.1:42171 0.0.0.0:* LISTEN 798/containerd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 778/sshd: /usr/sbin
tcp6 0 0 :::3306 :::* LISTEN 31271/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 778/sshd: /usr/sbin
おまけ
my.cnf
mysql/my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
log-bin=/var/log/mysql/bin-log
server-id=1
query_cache_size=16M
max_allowed_packet=1G
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[Service]
LimitNOFILE=5000