在Docker上构建Rails环境并使用mariadb作为数据库
我想在Docker上构建一个Rails环境(使用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
# 安装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/*
# 创建用户和组。
RUN groupadd -r –gid 1000 rails && \
useradd -m -r –uid 1000 –gid 1000 rails
# 创建目录。
RUN mkdir -p $WORKSPACE $BUNDLE_APP_CONFIG && \
chown -R rails:rails $WORKSPACE && \
chown -R rails:rails $BUNDLE_APP_CONFIG
USER rails
WORKDIR $WORKSPACE
# 安装ruby on rails。
ADD –chown=rails:rails . $WORKSPACE
RUN bundle install
ADD . /app
RUN mkdir -p tmp/sockets
# 向前端公开卷
VOLUME /app/public
VOLUME /app/tmp
# 启动服务器
# TODO: 环境
CMD bundle exec puma
在同一文件夹中创建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
创建项目
打开命令提示符并移动到想要创建项目的文件夹,然后运行以下命令。
$ docker-compose run –rm api rails new . –force –database=mysql –skip-bundle
$ docker-compose run –rm api bundle exec spring binstub –all
设置数据库连接信息
在项目文件夹/config/database.yml中添加数据库连接信息。
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: hoge
password: hoge
host: maria-db
启动
$ docker-compose up