Construire un environnement Rails 6 + MySQL avec Docker compose

Le site officiel Docker a un tutoriel de composition Docker pour les applications Rails (https://docs.docker.com/compose/rails/), mais il est un peu vieux et ne fonctionnait pas bien avec Rails 6, donc Rails 6 Voici comment le déplacer avec. Puisque les bases suivent la procédure du tutoriel officiel, les suppléments sont principalement ajoutés aux modifications apportées pour Rails 6.

DB décrit comment utiliser MySQL au lieu de Postgres.

Préparation du répertoire du projet

mkdir myrailsapp
cd myrailsapp

Préparation du fichier de réglage

Dockerfile


FROM ruby:2.5

##nodejs et yarn sont requis lors de l'installation de webpack
#Installer l'outil de gestion des packages de fils
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 && apt-get install -y yarn

RUN apt-get update -qq && apt-get install -y nodejs yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

RUN yarn install --check-files
RUN bundle exec rails webpacker:compile

# Add a 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"]

Rails 6 nécessite du fil pour exécuter Webpacker, alors ajoutez la procédure d'installation de fil au Dockerfile. Si vous installez normalement avec apt-get yarn avec l'image de ruby: 2.5, une version étrange de 0.32 + git sera installée et une erreur se produira plus tard, j'ai donc ajouté le référentiel selon les instructions sur le site officiel de yarn. Plus tard, apt-get install yarn.

Référence: https://qiita.com/shunichi_com/items/4dca141d8b9342c51a04

De plus, dans l'environnement de production, il est nécessaire de compiler Webpacker à l'avance, j'ai donc ajouté la mise à jour du package de fil et webpacker: compile.

Exclus car postgres n'est pas utilisé.

Gemfile


source 'https://rubygems.org'
gem 'rails', '~>6'

Spécifiez la série Rails 6 dans Gemfile. Ce Gemfile sera écrasé par le contenu du projet Rails après la création du projet Rails.

touch Gemfile.lock

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

Cette zone est toujours un échantillon officiel, donc l'explication est omise.

docker-compose.yml


version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
      - "3306:3306"
    volumes:
      - ./tmp/db:/var/lib/mysql

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

Modifiez le paramètre pour utiliser MySQL.

Créer un projet Rails


docker-compose run web rails new . --force --no-deps --database=mysql

Créez un projet avec le paramètre DB défini sur MySQL avec --database = mysql.

docker-compose build

Paramètres de connexion à la base de données

database.yml


development:
  <<: *default
  database: myapp_development
  host: db
  username: root
  password: password

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: myapp_test
  host: db
  username: root
  password: password

Décrit le paramètre pour que development et test utilisent l'image MySQL db démarrée par docker-compose.

Création de DB

docker-compose run web rails db:create

Présentation de Webpacker

docker-compose run web rails webpacker:install 

Cette étape est nécessaire car Webpacker est utilisé à la place de Sprockets from Rails 6.

Image de lancement

docker-compose up

Scaffold

docker-compose run web rails g scaffold article title:string body:text published_at:timestamp
docker-compose run web rails db:migrate

Lors du développement à l'aide de docker-compose, exécutez les commandes de génération, y compris l'échafaudage et la migration avec docker-compose run web.

docker-compose up

スクリーンショット 2020-09-22 0.07.07.png

Recommended Posts

Construire un environnement Rails 6 + MySQL avec Docker compose
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
[Docker] Construction de l'environnement Rails 5.2 avec docker
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Créez un environnement Vue3 avec Docker!
Créer un environnement Node.js avec Docker Compose
Créer un environnement de vérification SolrCloud avec Docker
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Créez un environnement pour Rails5 et postgresql avec Docker afin que pgadmin puisse également être utilisé
Construction d'environnement de rails avec Docker (apocalypse personnelle)
Construction de Rails 6 et environnement PostgreSQL avec Docker
Déployer sur heroku avec Docker (Rails 6, MySQL)
Modifier Mysql avec des commandes dans l'environnement Docker
Créer un environnement de développement Spring Boot-gradle-mysql avec Docker
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
[Docker] Créez un environnement Node.js + express + webpack avec Docker
Construire un environnement pour Laravel + MySQL + phpMyadmin avec Docker
Comment créer un environnement Rails 6 avec Docker
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]
Créer un environnement de développement pour Django + MySQL + nginx avec Docker Compose
Procédure de construction de l'environnement Docker "Rails 6 x MySQL 8" à partager avec les équipes
Construction de l'environnement Rails Docker
[Rails] Développement avec MySQL
[Memo] Créez facilement un environnement CentOS 8 avec Docker
[Rails] Comment créer un environnement avec Docker
Créer un environnement de développement Spring Boot avec docker
J'ai construit un environnement de rails avec docker et mysql, mais j'étais malade
[Docker] Créez une recherche élastique, environnement Kibana!
[Première construction d'environnement] J'ai essayé de créer un environnement Rails6 + MySQL8.0 + Docker sur Windows 10.
Rails6 (MySQL, environnement Ubuntu, Cloud9)
Mémo de construction de l'environnement MySQL 5.7 (Docker)
Créer un environnement de test E2E avec Docker x Cypress
Rails5 + MySQL8.0 + Construction d'environnement de volumes de premier niveau avec docker-compose
Exécuter des rails à chaque fois dans le docker
Créer un environnement Docker avec WSL
[Note] Créez un environnement Java à partir de zéro avec docker
[Rails / MySQL] Construction de l'environnement Mac
[Docker] À utiliser à tout moment avec Docker + Rails
Créer un environnement de développement Chisel avec Windows10 + WSL2 + VScode + Docker
Commande Docker pour créer un projet Rails avec un seul coup dans l'environnement sans Ruby
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
J'ai essayé de créer un environnement de développement padrino avec Docker
Créer un portfolio avec rails + postgres sql