UbuntuでDockerを使ってサクッとDBサーバーを立ち上げる

仕事で、バッチサーバー用のDBを立ち上げることがあったので、毎回同じ作業をするのに調べるのが面倒なのでメモとして残しました。

環境

  • サーバー: Google Compute Engine n1-standard-1(vCPU x 1、メモリ 3.75 GB)
  • OS: Ubuntu 18.04
  • DB: MySQL 5.6

無料クレジットがあったので、Google Cloud Platform(GCP)のCompute Engine(GCE)を使いました。AWSやVPSとかでも、基本的には一緒ですが、ネットワーク設定だけは各サービスで異なるので、ご了承ください。

Docker&docker-composeをインストール

Dockerで構築しておけば、OS環境を汚さないので、まずは、Docker関連をインストールします。

Dockerをインストール

sudo apt update

sudo apt install -y \
     apt-transport-https \
     ca-certificates \
     curl \
     software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable"

sudo apt update

sudo apt install -y docker-ce

docker-composeをインストール

export compose='1.23.2'

sudo curl -L https://github.com/docker/compose/releases/download/${compose}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo chmod 0755 /usr/local/bin/docker-compose

MYSQLコンテナをdocker-composeで立ち上げる

Dockerが入ったので、インストールします。

ファイルを用意して、docker-compose up -dするだけです。

ディレクトリ構成

├── db
├── docker-compose.yml
└── my.cnf

共有ネットワークを作る

sudo docker network create common_link

docker-compose.yml

パスワード周りは適宜変更してください

version: "2"
services:
  db:
    image: mysql:5.6
    ports:
      - "33306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_DATABASE: test
      TZ: Asia/Tokyo
    networks:
      - common_link
    restart: always
    volumes:
      - ./db:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
networks:
  common_link:
    external: true

my.cnf

[mysqld]
explicit_defaults_for_timestamp = 1

立ち上げる

sudo docekr-compose up -d

33306ポートを開ける(GCPの場合)

今回は、Google Compute Engineで立ち上げているので、このままではポートが開いていなくてどこからもアクセスができません。

GCPではファイアウォールの設定が管理画面から簡単にできるので、設定していきます。

VPSネットワークでファイアウォールの設定

GCPのコンソール画面をブラウザで開いて、VPSネットワーク->ファイアウォールルールで、「ファイアウォールルールを作成」からルールを作成します。

「ファイアウォールルールを作成」からルールを作成

大事なのは、
– ターゲット (ターゲットタグ)
– ソースフィルタ (IP 範囲)
です。それ以外は任意&デフォルトでOKです。

上の画像の例では、インスタンスに「mysql」というタグが付いている場合に、0.0.0.0/0(つまり全IP)からの許可を与えています。接続元のIPが確定している場合は、IPを指定したほうがいいでしょう。

インスタンスにネットワークタグを追加

設定ができたら、Compute Engineの管理画面に移動して、対象のインスタンスの設定を編集して、「ネットワークタグ」に「mysql」を追加します。

対象のインスタンスの設定を編集して、「ネットワークタグ」に「mysql」を追加

追加ができたら保存すればOKです。これで、外部からアクセスができるようになりました。

docker-copmoseファイルが用意されていれば、インスタンスの作成から使えるようになるまで10分ほどかと思います。

クラウドサーバーとDockerを使うと、サーバー構築が楽でいいですね。