Docker上にRails環境構築(DBはmariadb)

# Docker上にRails環境(DBはmariadb)を構築したい！

ローカル環境上にRailsの環境構築を行うと、どんどんローカルが汚れていくので嫌だなと。
なのでローカル上でDocker for Windowsを使用してRails環境を構築したく記事を書きました。
※色々弄りすぎた結果、この投稿に記載しているDockerファイルやdocker-composeファイルも汚れた状態での投稿になっています。。。綺麗にしたい。。。

## 構築にあたっての前提環境
* Windows10 Pro(HomeだとDocker for Windowsがインストールできないため)
* Docker for Windowsのインストール [公式を見てインストール](http://docs.docker.jp/docker-for-windows/step_one.html)

## 構築手順

1. プロジェクトを作成したい場所にフォルダを作成
1. 上記で作成したフォルダ内にDockerファイルを作成

	```Dockerfile
	FROM ruby:2.7

	ENV LANG C.UTF-8
	ENV WORKSPACE=/usr/local/src

	# install bundler.
	RUN apt-get update && \
	    apt-get install -y vim less && \
	    apt-get install -y build-essential libpq-dev nodejs && \
	    apt install -y lsb-release && \
	    apt remove -y libmariadb-dev-compat libmariadb-dev && \
	    apt-get install -y nginx

	RUN wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-common_8.0.18-1debian10_amd64.deb \
	    https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient21_8.0.18-1debian10_amd64.deb \
	    https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client-core_8.0.18-1debian10_amd64.deb \
	    https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client_8.0.18-1debian10_amd64.deb \
	    https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient-dev_8.0.18-1debian10_amd64.deb

	RUN dpkg -i mysql-common_8.0.18-1debian10_amd64.deb \
	    libmysqlclient21_8.0.18-1debian10_amd64.deb \
	    mysql-community-client-core_8.0.18-1debian10_amd64.deb \
	    mysql-community-client_8.0.18-1debian10_amd64.deb \
	    libmysqlclient-dev_8.0.18-1debian10_amd64.deb

	RUN gem install bundler && \
	    apt-get clean && \
	    rm -r /var/lib/apt/lists/*

	# create user and group.
	RUN groupadd -r --gid 1000 rails && \
	    useradd -m -r --uid 1000 --gid 1000 rails

	# create directory.
	RUN mkdir -p $WORKSPACE $BUNDLE_APP_CONFIG && \
	    chown -R rails:rails $WORKSPACE && \
	    chown -R rails:rails $BUNDLE_APP_CONFIG


	USER rails
	WORKDIR $WORKSPACE

	# install ruby on rails.
	ADD --chown=rails:rails . $WORKSPACE
	RUN bundle install

	ADD . /app
	RUN mkdir -p tmp/sockets

	# Expose volumes to frontend
	VOLUME /app/public
	VOLUME /app/tmp

	# Start Server
	# TODO: environment
	CMD bundle exec puma
	```

1. 同一フォルダにdocker-compose.ymlを作成

	```docker-compose.yml
	version: '3.2'
	services:
	  api:
	    build: .
	    command: bundle exec rails s -p 8080 -b '0.0.0.0'
	    container_name: '好きなコンテナー名'
	    ports:
	      - 8080:8080
	    volumes:
	      - type: bind
	        source: ./
	        target: /usr/local/src
	    restart: always
	    environment:
	        TZ: Asia/Tokyo
	    links:
	        - maria-db
	  
	  maria-db:
	    image: mariadb:10.5.2
	    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
	    environment:
	        MYSQL_ROOT_PASSWORD: hoge
	        MYSQL_DATABASE: hoge
	        MYSQL_USER: hoge
	        MYSQL_PASSWORD: hoge
	    ports:
	        - '3306:3306'
	    command: --innodb-use-native-aio=0
	    volumes:
	        - ./docker_config/db/volumes:/var/lib/mariadb
	        - ./docker_config/db/my.cnf:/etc/mysql/conf.d/my.cnf
	```
1. プロジェクトの作成
	コマンドプロンプトを立ち上げプロジェクトを作成するフォルダまで移動後、下記コマンドを実行する

	```
	$ docker-compose run --rm api rails new . --force --database=mysql --skip-bundle
	$ docker-compose run --rm api bundle exec spring binstub --all
	```
1. databaseの接続情報を設定
プロジェクトフォルダ/config/database.ymlにDBの接続情報を記載

	```
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: hoge
  password: hoge
  host: maria-db
	```

1. 起動する

```
$ docker-compose up
```