[RUBY] Procédure de migration de l'environnement de développement d'applications Rails vers Docker même si vous êtes inexpérimenté (Rails5 + MySQL8.0 + docker-compose)

introduction

L'auteur, qui n'a aucune expérience pratique de Docker, a résumé le processus de migration de l'environnement de développement de sa propre application Rails vers Docker.

La période jusqu'à la transition était d'environ une semaine, y compris l'apprentissage de base (peut-être aurait-il pu être fait environ la moitié s'il n'y avait pas d'erreurs ...)

J'espère que cela sera utile pour ceux qui veulent toucher Docker et sont coincés avec des erreurs.

environnement

**※Mise en garde! ** ** Le format d'authentification par défaut pour MySQL est différent entre les séries 5.0 et 8.0. (Au 18 août 2020) Par conséquent, la description du fichier (docker-compose.yml) requis pour créer Docker diffère selon la version **. ** ** Par conséquent, assurez-vous que la version de MySQL que vous utilisez correspond à la version de MySQL décrite dans la littérature.

Apprentissage de base

Matériel pédagogique: Introduction docker

Introduction Docker est un site pratique gratuit où vous pouvez facilement apprendre les termes et les structures liés à Docker.

Si vous ne savez rien sur Docker, il faut environ une demi-journée à une journée pour faire tout le contenu, alors étudiez grossièrement sur Introduction Docker. recommander.

supposition

Fichiers requis pour utiliser Docker

Il y a trois fichiers à ajouter à une application existante et des fichiers qui doivent être modifiés.

La structure des fichiers est la suivante.

sampleApp ---- Dockerfile #Fichiers à ajouter
           |-- docker-compose.yml  #Fichiers à ajouter
           |-- Gemfile
           |-- Gemfile.lock
           |-- README.md
           |-- Rakefile
           |-- app
           |-- bin
           |-- config ---- application.rb
           |           |-- boot.rb
           |           |-- cable.yml
           |           |-- credentials.yml.enc
           |           |-- database.yml     #Fichier à modifier
           |           |-- environment.rb
           |           |-- environments
           |           |-- initializers
           |           |-- locales
           |           |-- master.key
           |           |-- puma.rb
           |           |-- routes.rb
           |           |-- spring.rb
           |           |-- storage.yml
           |
           |-- config.ru
           |-- db
           |-- lib
           |-- log
           |-- package.json
           |-- public
           |-- storage
           |-- test
           |-- tmp
           |-- vendor

Dockerfile

Dockerfile



#Spécifiez l'image Docker. Spécifiez la version de l'application que vous utilisez.
FROM ruby:2.5.1 

#Installation des packages requis. nœud.Concernant js, une erreur s'est produite dans la description d'origine, elle a donc été corrigée.
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*

#Créer et définir un répertoire de travail
RUN mkdir /workdir
WORKDIR /workdir

#Création du Gemfile côté hôte (local) ci-dessus/Ajouter à workdir
ADD Gemfile /workdir/Gemfile
ADD Gemfile.lock /workdir/Gemfile.lock

#Installation du bundle Gemfile
#J'ai eu une erreur lorsque je l'ai exécuté sans ENV. BUNDLER_Évité en spécifiant VERSION.
ENV BUNDLER_VERSION 2.1.4
RUN gem install bundler
RUN bundle install

#Tous les répertoires du côté hôte (local) du conteneur Docker/Ajouté sous workdir.
ADD . /workdir

docker-compose.yml

docker-compose.yml



# docker-Spécifie la version de composition. Cette fois'3'utilisation.
version: '3'

#Définissez le conteneur à démarrer. Db dans ce fichier, db-test ,Il définit trois éléments du Web.
services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password #Le format d'authentification par défaut est mysql_native_Changer de mot de passe. MySQL5.Non requis pour la série 0.
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: appname_development
      MYSQL_USER: yuki #Tout utilisateur
      MYSQL_PASSWORD: password
      TZ: Asia/Tokyo
    volumes:
      - ./mysql/mysql_data:/var/lib/mysql
      - ./logs:/var/log/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    ports:
      - "4306:3306"

  db-test:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: appname_test
      MYSQL_USER: yuki
      MYSQL_PASSWORD: password
      TZ: Asia/Tokyo
    volumes:
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    tmpfs:
      - /var/lib/mysql
      - /var/log/mysql
      
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: /bin/sh -c "rm -f /workdir/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    tty: true
    stdin_open: true
    depends_on:
      - db
    ports:
      - "3000:3000"
    volumes:
      - .:/workdir

database.yml

database.yml



default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: appname_development
  username: yuki
  password: password
  host: db
  socket: /tmp/mysql.sock

test:
  <<: *default
  database: appname_test
  host: db-test
  username: yuki
  password: password
  socket: /tmp/mysql.sock

production:
  <<: *default
  database: <%= ENV['DB_NAME'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  host: <%= ENV['DB_HOSTNAME'] %>

Démarrer Docker / Créer une base de données

python


$ docker-compose build #Construire un conteneur
$ docker-compose up -d #Démarrage simultané des conteneurs

$ docker-compose run web bundle exec rake db:create  #Création de DB
$ docker-compose run web bundle exec rake db:migrate #migration

Si possible, vous devriez pouvoir y accéder à l'adresse http: // localhost: 3000.

Recommended Posts

Procédure de migration de l'environnement de développement d'applications Rails vers Docker même si vous êtes inexpérimenté (Rails5 + MySQL8.0 + docker-compose)
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
Procédure pour introduire Docker dans l'environnement de développement des applications Rails existantes [Rails, MySQL, Docker]
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Rails 6 (mode API) + création d'environnement MySQL Docker par docker-compose (pour Mac)
Procédure de construction de l'environnement Docker "Rails 6 x MySQL 8" à partager avec les équipes
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
Créer un environnement de développement pour Docker + Rails6 + Postgresql
Présentez docker à l'application que vous créez
Présentez Docker à l'environnement de développement et à l'environnement de test des applications Rails et MySQL existantes
Comment installer Docker dans l'environnement local d'une application Rails existante [Rails 6 / MySQL 8]
Manuel de construction de l'environnement de développement stable pour "Rails6" avec "Docker-compose"
<Installation par points> Que faire si vous ne pouvez pas continuer en raison d'une erreur lors de la création d'un environnement de développement pour l'apprentissage Rails.
Construction d'environnement de développement d'applications Web en Java (pour les personnes inexpérimentées)
[Procédure 1 pour les débutants] Ruby on Rails: Construction d'un environnement de développement
[Docker] Comment sauvegarder et restaurer les données de base de données de l'application Rails sur docker-compose [MySQL]
Ruby on Rails - De la construction d'environnement au développement d'application simple sur WSL2
Si vous souhaitez modifier l'environnement de développement Java d'Eclipse
Comment installer Pry après avoir créé un environnement de développement Rails avec 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
Construction d'environnement pour le développement d'applications Servlet
Créez un environnement de développement d'applications Web qui utilise Java, MySQL et Redis avec Docker CE pour Windows
Rails sur la procédure de construction de l'environnement Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Créer un environnement de débogage sur un conteneur - Créer un environnement de développement local pour les didacticiels Rails avec Docker -
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Créez un environnement de développement local pour les didacticiels Rails avec Docker (Rails 6 + PostgreSQL + Webpack)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2
J'ai essayé de migrer le portfolio créé sur Vagrant vers l'environnement de développement de Docker
Construire un environnement Rails 6 + MySQL avec Docker compose
Déployer sur heroku avec Docker (Rails 6, MySQL)
Comment créer un environnement Rails 6 avec Docker
[Première construction d'environnement] J'ai essayé de créer un environnement Rails6 + MySQL8.0 + Docker sur Windows 10.
[Rails5.2] Prise en charge des pictogrammes de Mysql 5.7 dans Docker (changez le code de caractère en utf8mb4)