MySQL
CentOS
docker
docker-compose

CentOSからMySQLが接続出来る環境をDocker Composeを利用して作成する

目的

  • 既存のDockerコンテナ間で接続不良が発生しているように思える事に対する、比較検証用Dockerイメージを作成
  • 筆者が今まで数時間しかDocker使ったことがないため、学習目的を兼ねてます

Dockerとは

コンテナ型の仮想環境
VirtualBoxなどの仮想環境と比べ、ゲストOSや仮想ハードウェアを利用していないため、軽量で起動が早く利用できる

Docker Composeとは

複数のDockerコンテナを同時に管理出来る機能


前提

Mac OS High Sierra 10.13.5
MacのMySQL Ver 8.0.11 for osx10.13 on x86_64 (Homebrew)


Dockerのインストール

Docker Community Editionをインストールする

$ brew cask info docker
docker: 18.03.1-ce-mac65,24312
https://www.docker.com/community-edition
$ brew cask install docker

Dockerを起動し、マシンのパスワードを入力した後、インストール確認を行う

$ docker version
 ~
 Version:      18.03.1-ce
 ~

Docker IDの作成及びログイン

Sign in Create Docker IDからDocker IDを作成してログインする

signin.png

作業前

作業用ディレクトリを作成して移動(※必須ではない)

$ mkdir dockerpractice
$ cd dockerpractice

Dockerfileの作成

docker-compose用のディレクトリを作成する

$ mkdir centos
$ mkdir mysql

CentOS

Docker Hub:centosから対象のタグ(centos6, 6 (docker/Dockerfile))を確認しつつDockerfileに設定する

$ vi centos/Dockerfile
centos/Dockerfile
FROM centos:6

RUN yum -y update && yum -y install mysql && yum clean all

MySQL

Docker Hub:mysqlから対象のタグ(5.6.40, 5.6 (5.6/Dockerfile))を確認しつつDockerfileに設定する

$ vi mysql/Dockerfile
mysql/Dockerfile
FROM mysql:5.6.40

docker-composeを利用した複数コンテナの管理

設定ファイル作成

docker-compose.ymlを作成して

$ vi docker-compose.yml

イメージの構成を記載する

docker-compose.yml
version: '3'
services:
  mysql:
    build: ./mysql
    image: mysql:5.6.40
    ports:
     - "3306:3306"
    environment:
     MYSQL_ROOT_PASSWORD: mysql
  centos6:
    build: ./centos
    image: centos:6

Docker image立ち上げ

docker-composeを利用してイメージを立ち上げる

$ docker-compose up -d --build

起動確認

$ docker-compose ps
          Name                       Command             State           Ports
---------------------------------------------------------------------------------------
dockerpractice_centos6_1   /bin/bash                     Up
dockerpractice_mysql_1     docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp

接続確認

MySQLから

$ docker exec -it dockerpractice_mysql_1 bin/bash
# mysql -uroot -p
Enter password: パスワード
~
mysql>

ローカルからMySQL

$ mysql --port=3306 --host=127.0.0.1 -uroot -p
Enter password: パスワード
~
mysql>

CentOSからMySQL

docker-compose.ymlで定義したbuildに対して接続を実施する

$ docker exec -it dockerpractice_centos6_1 /bin/bash
$ mysql --port=3306 --host=mysql -uroot -p

結果

CentOSからMySQLに接続する際、127.0.0.1ではなく、docker-compose.ymlに定義したbuildをhostに設定しないとならないのが分かりましたのと、Dockerの操作方法が理解できました。

参考