Ceci est un article de mémoire car j'ai construit l'environnement avec l'intention de créer une nouvelle application avec Rails. J'ai moins d'un an d'expérience en tant qu'ingénieur et Rails, veuillez donc signaler toute erreur ou une meilleure écriture.
Tout d'abord, créez un répertoire arbitraire et créez un fichier.
mkdir rails_app
cd rails_app
#Créez plusieurs fichiers à la fois
touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,entrypoint.sh,.env}
Dockerfile
Dockerfile
FROM ruby:2.7.2
ENV LANG C.UTF-8
ENV APP_ROOT /app
# install required libraries
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update -qq && \
apt-get install -y --no-install-recommends \
build-essential \
nodejs \
yarn && \
apt-get clean && \
rm --recursive --force /var/lib/apt/lists/*
# create working directory
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT
# bundle install
COPY Gemfile $APP_ROOT/Gemfile
COPY Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install --jobs 4 --retry 3
# create app in container
COPY . $APP_ROOT
# script to be executed every time the container starts
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
docker-compose.yml
version: '3.7'
services:
db:
image: mysql:8.0.20
volumes:
- mysql:/var/lib/mysql:delegated
ports:
- '3307:3306'
command: --default-authentication-plugin=mysql_native_password
env_file: .env
web:
build:
context: .
dockerfile: Dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
tty: true
stdin_open: true
env_file: .env
depends_on:
- db
ports:
- '3000:3000'
volumes:
- .:/app:cached
- bundle:/usr/local/bundle:delegated
- node_modules:/app/node_modules
- tmp-data:/app/tmp/sockets
volumes:
mysql:
bundle:
node_modules:
tmp-data:
.env
.env
MYSQL_ROOT_PASSWORD=password
TZ=Japan
Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '6.0.3'
Gemfile.lock
Gemfile.lock
#Laissez vide
entrypoint.sh
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
Une fois que vous avez créé les fichiers dont vous avez besoin, exécutez la commande rails new
.
docker-compose run --rm web rails new . --force --no-deps --database=mysql --skip-turbolinks --skip-test
docker-compose run --rm web bin/rails webpacker:install
Je pense que vous pouvez ajouter librement des options, mais il est plus facile de spécifier diverses options ici.
database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV.fetch('MYSQL_USERNAME') { 'root' } %>
password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %>
host: <%= ENV.fetch('MYSQL_HOST') { 'db' } %>
development:
<<: *default
database: rails_app_dev
test:
<<: *default
database: rails_app_test
production:
<<: *default
database: rails_app_prd
username: app
password: hoge
Décrivez le mot de passe, etc. afin que vous puissiez y accéder avec les informations définies dans docker-compose.yml
.
host est un conteneur «db».
docker-compose build
docker-compose run web bin/rails db:create
docker-compose up -d
Démarrez le conteneur et lorsque l'écran initial Rails s'affiche, vous avez terminé.
Recommended Posts