Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
72
Help us understand the problem. What is going on with this article?
@Esfahan

DockerのMySQLコンテナに外部のサーバーから接続する

More than 1 year has passed since last update.

概要

DockerでMySQLコンテナを立て、ホストOS、または外部サーバーから接続する方法。

docker runの場合

$ sudo docker run \
    --rm \
    -v $(pwd)/db/mysql_init:/docker-entrypoint-initdb.d \
    -v $(pwd)/db/mysql_data:/var/lib/mysql \
    --name mysql \
    -e MYSQL_ROOT_PASSWORD=your_password \
    --hostname my-mysql \
    -e BIND-ADDRESS=0.0.0.0 \
    -p 3306:3306 \
    -itd mysql:5.7

docker-composeを使う場合

docker-compose.yml
version: '3.1'

services:
  db:
    image: mysql:5.7
    restart: always
    hostname: my-mysql
    env_file:
      - .env
    environment:
      MYSQL_USER: sample_user
      MYSQL_DATABASE: sample_db
      TZ: "Asia/Tokyo"
      BIND-ADDRESS: 0.0.0.0
    ports:
      - 3306:3306
    # データを永続化させる場合
    volumes:
      # 初期データを投入するSQLが格納されているdir
      - ./db/mysql_init:/docker-entrypoint-initdb.d
      # 永続化するときにマウントするdir
      - ./db/mysql_data:/var/lib/mysql
    tty: true

envファイルにMySQLのROOTのパスワードを定義する

.env
MYSQL_ROOT_PASSWORD=your_password

コンテナ起動

$ docker-compose up -d --build

MySQLに接続

ホストOSから接続

$ mysql -u root -p -h localhost -P 3306 --protocol=tcp

外部のサーバーから接続

$ mysql -u root -p -h hostname -P 3306 --protocol=tcp

コンテナ間通信

ネットワークを作成

sample-networkというネットワークを作成。

$ sudo docker network create sample-network

sample-networkを定義したコンテナ同士で、コンテナ間通信が可能となる。

DBコンテナを作成

Dockerコマンドの場合

$ docker run --rm \
    --name sample-db \
    --network sample-network \
    -itd sample-web /bin/bash

docker-composeの場合

version: '3.2'

services:
  db:
    container_name: sample-db
    image: mysql:5.7
    restart: always
    hostname: sample-db
    env_file:
      - .env
    environment:
      MYSQL_USER: sample_admin
      MYSQL_DATABASE: sample
      TZ: "Asia/Tokyo"
      BIND-ADDRESS: 0.0.0.0
    ports:
      - "3306:3306"
    # データを永続化させる場合
    volumes:
      # 初期データを投入するSQLが格納されているdir
      #- ./db/mysql_init:/docker-entrypoint-initdb.d
      # 永続化するときにマウントするdir
      - ./mysql_data:/var/lib/mysql
      - ./conf/my.cnf:/etc/my.cnf
    tty: true
    networks:
      - sample-network

networks:
    sample-network:
        external: true

WEBコンテナを作成

Dockerコマンドの場合

$ docker run --rm \
    --name sample-web \
    --network sample-network \
    -itd sample-web /bin/bash

docker-composeの場合

version: '3.2'

services:
  web:
    container_name: sample-web
    build:
      context: ./
      dockerfile: Dockerfile
    hostname: sample-web
    volumes:
      - ./code:/code
    ports:
      - "3000:3000"
    tty: true
    networks:
      - sample-network

networks:
    sample-network:
        external: true
72
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Esfahan
WEB系出身。現在はビッグデータの基盤構築、ETLなどがメイン。 / YouTubeで料理チャンネルやってます → https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw / ゲームもやってます -> https://www.youtube.com/channel/UCeqPhExV09EF5o8lZLO15Eg

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
72
Help us understand the problem. What is going on with this article?