Vagrantで仮想マシンを立ち上げてDocker上にMySQLを構築する

これは結構便利。
PostgreSQLも追記。




仮想マシン作成



vagrant box add centos7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
vagrant init centos7.2
vagrant up

vagrant で centos7.xを立ち上げる


Docker インストール



vagrant ssh

sudo yum update
sudo yum install -y docker
sudo systemctl enable docker
sudo systemctl start docker

Dockerの実行に権限変更が必要。

sudo groupadd docker
sudo usermod -g docker vagrant
sudo /bin/systemctl restart docker.service
exit

vagrant ssh

Docker compose インストール


sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose



MySQL立ち上げ



docker-compose.yml 作成


version: '3.7' 
services:
    db:
        image: mysql:5.7
        ports:
            - "43306:3306"
        volumes:
            # 初期データを投入するSQLが格納されているdir
            - ./mysql_init:/docker-entrypoint-initdb.d
            # 永続化するときにマウントするdir
            - ./mysql_data:/var/lib/mysql
            - ./mysql_conf/:/etc/mysql/conf.d
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_USER: test
            MYSQL_PASSWORD: test

mysql5.7より新しいバージョンだと若干面倒。

MySQL立ち上げ、動作確認


docker-compose up -d

確認
[vagrant@localhost ~]$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4542ee84ec0b mysql:5.7 "docker-entrypoint..." 3 minutes ago Up About a minute 33060/tcp, 0.0.0.0:43306->3306/tcp mysql_db_1

共有ディレクトリにデータを置くとパフォーマンスに問題が出てくるので注意。



ホストOSからアクセス



ここまで手順通りならアクセス情報は下記になる。A5SQLなどで確認。

Host:192.168.33.10
Username:root
Password:root
Port:43306


PostgreSQLの構築

version: '3.7' 
postgresql:
    image: postgres:12.5
    container_name: postgresql
    ports:
      - 45432:5432
    volumes:
      - ./postgres/init:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_DB: test
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
    hostname: postgres
    restart: always
    user: root



参考



https://qiita.com/TAMIYAN/items/ed9ec892d91e5af962c6
https://budougumi0617.github.io/2018/05/20/create-instant-mysql-by-docker/

2020年7月2日木曜日