🐙

docker-composeでmysql環境を構築する

2022/10/18に公開

docker-compose.yml

docker-compose.yaml
version: '3.9'

services:
  mysql:
    image: mysql:8.0.27
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: mysql
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    restart: always
    networks:
      - mysql-network

  cli:
    image: mysql:8.0.27
    networks:
      - mysql-network
    command: mysql -hmysql -uuser -ppassword db

networks:
  mysql-network:
    driver: bridge
  • services.mysql.environment配下でmysqlの設定を行っている。
    • ここではrootのパスワードをmysql、デフォルトのDB名をdb、ユーザー名をuser、パスワードをpasswordに設定しているので適宜修正する。ここで設定した情報を利用してmysqlクライアントからMySQLへ接続する。
  • services.mysql.restartalwaysに設定することでPCを再起動したとき等もMySQLを起動したままに出来る
  • networksはmysqlクライアントから接続出来るようにするための設定

MySQLの起動

下記コマンドにより、MySQLを起動出来る

docker-compose up -d mysql

MySQL クライアントによる接続

下記コマンドにより、MySQLに接続出来る

docker-compose run cli

以下のような画面が出れば成功

mysql client image

Go言語からの接続

services.mysql.ports 部分でポートフォワーディングの設定も行っているので当然アプリケーションからも接続できる。
例えばGo言語から接続したい場合は以下のようにすれば接続出来る

import (
  "database/sql"
  "time"

  "github.com/go-sql-driver/mysql"
)

func connectDB() *sql.DB {
  jst, err := time.LoadLocation("Asia/Tokyo")
  if err != nil {
    // エラーハンドリング
  }

  c := mysql.Config{
    DBName:    "db",
    User:      "user",
    Passwd:    "password",
    Addr:      "localhost:3306",
    Net:       "tcp",
    ParseTime: true,
    Loc:       jst,
  }

  db, err := sql.Open("mysql", c.FormatDSN())
  // 以下省略
}
GitHubで編集を提案

Discussion