Docker上にRails環境(DBはmariadb)を構築したい!
ローカル環境上にRailsの環境構築を行うと、どんどんローカルが汚れていくので嫌だなと。
なのでローカル上でDocker for Windowsを使用してRails環境を構築したく記事を書きました。
※色々弄りすぎた結果、この投稿に記載しているDockerファイルやdocker-composeファイルも汚れた状態での投稿になっています。。。綺麗にしたい。。。
構築にあたっての前提環境
- Windows10 Pro(HomeだとDocker for Windowsがインストールできないため)
- Docker for Windowsのインストール 公式を見てインストール
構築手順
-
プロジェクトを作成したい場所にフォルダを作成
-
上記で作成したフォルダ内にDockerファイルを作成
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
-
同一フォルダにdocker-compose.ymlを作成
docker-compose.ymlversion: '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
-
プロジェクトの作成
コマンドプロンプトを立ち上げプロジェクトを作成するフォルダまで移動後、下記コマンドを実行する$ docker-compose run --rm api rails new . --force --database=mysql --skip-bundle $ docker-compose run --rm api bundle exec spring binstub --all
-
databaseの接続情報を設定
プロジェクトフォルダ/config/database.ymlにDBの接続情報を記載
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: hoge
password: hoge
host: maria-db
```
- 起動する
$ docker-compose up