[RUBY] [Construction de l'environnement avec Docker] Rails 6 et MySQL 8

1.Tout d'abord

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.

Environnement d'exploitation

2. Préparez les fichiers nécessaires

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 "$@"

3. Créez un projet Rails

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.

4. Modifiez database.yml

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».

5. Construisez l'image Docker et créez une base de données

docker-compose build
docker-compose run web bin/rails db:create
  1. Yay! You’re on Rails!
docker-compose up -d

Démarrez le conteneur et lorsque l'écran initial Rails s'affiche, vous avez terminé. rails_new.png

référence

Recommended Posts

[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Construction de l'environnement Rails Docker
Construction d'environnement de rails avec Docker (apocalypse personnelle)
Construire un environnement Rails 6 + MySQL avec Docker compose
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
Construire un environnement pour Laravel + MySQL + phpMyadmin avec Docker
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Mémo de construction de l'environnement MySQL 5.7 (Docker)
[Rails / MySQL] Construction de l'environnement Mac
Procédure de construction de l'environnement Docker "Rails 6 x MySQL 8" à partager avec les équipes
Créer un environnement Node.js avec Docker Compose
Construction d'environnement avec Docker pour les débutants
Rails5 + MySQL8.0 + Construction d'environnement de volumes de premier niveau avec docker-compose
Rails sur la procédure de construction de l'environnement Docker
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Apprentissage des instructions SQL ~ Construction de l'environnement ~ Docker + MySQL
Construction de l'environnement GPU avec Docker [version d'octobre 2020]
Construction de l'environnement de développement Laravel avec Docker (Mac)
Déployer sur heroku avec Docker (Rails 6, MySQL)
Modifier Mysql avec des commandes dans l'environnement Docker
Rails & React & Webpacker & Manuel de construction de l'environnement MySQL
Comment créer un environnement Rails 6 avec Docker
Création d'un environnement de développement pour Ruby on Rails à l'aide de Docker + VSCode (Remote Container)
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
Comment créer un environnement Rails + Vue + MySQL avec Docker [dernière version 2020/09]
[Rails] Comment créer un environnement avec Docker
Procédure de construction et de développement de l'environnement local Wordpress avec Docker
J'ai construit un environnement de rails avec docker et mysql, mais j'étais malade
[Construction de l'environnement] Rails + MySQL + Docker (les débutants peuvent également l'utiliser en 30 minutes!)
[Rails API x Docker] Construction facile de l'environnement avec contrôle de la coque et du fonctionnement avec Flutter
Construction de l'environnement de développement Rails6 [Mac]
Ingénieur Rails Environnement Construction Ruby2.7.1
Rails6 (MySQL, environnement Ubuntu, Cloud9)
Construction de l'environnement des rails Rails5.2.1 ruby2.5.1 Catalina
Exécuter des rails à chaque fois dans le docker
Mémo de construction de l'environnement Redmine (Docker)
Créer un environnement Docker avec WSL
Construction de l'environnement Docker × Spring Boot
[Docker] postgres, construction de l'environnement pgadmin4
[Docker] À utiliser à tout moment avec Docker + Rails
Manuel de construction de l'environnement de développement stable pour "Rails6" avec "Docker-compose"
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Créez un environnement Vue3 avec Docker!
Créer un environnement local Couchbase avec Docker
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.