在Docker上构建Rails环境并使用mariadb作为数据库

我想在Docker上构建一个Rails环境(使用mariadb数据库)!

在本地环境上构建Rails配置时,由于本地会越来越乱,所以我不太喜欢。因此,我想使用Docker for Windows在本地上构建Rails环境,并写了一篇文章。
*由于我玩得太过分,因此在这篇文章中所提到的Docker文件和docker-compose文件也处于混乱状态…我想将其整理得更整洁一些…

構築环境的前提条件

    • Windows10 Pro(HomeだとDocker for Windowsがインストールできないため)

 

    Docker for Windowsのインストール 公式を見てインストール

建造程序

    1. 在想创建项目的位置创建一个文件夹。

在上面创建的文件夹中创建一个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
广告
将在 10 秒后关闭
bannerAds