[RUBY] Vorgehensweise zum Migrieren der Rails-Anwendungsentwicklungsumgebung zu Docker, auch wenn Sie unerfahren sind (Rails5 + MySQL8.0 + Docker-Compose)

Einführung

Der Autor, der überhaupt keine praktische Erfahrung mit Docker hat, fasste den Prozess der Migration der Entwicklungsumgebung seiner eigenen Rails-Anwendung auf Docker zusammen.

Die Zeit bis zum Übergang betrug ungefähr eine Woche, einschließlich des grundlegenden Lernens (vielleicht hätte es in ungefähr der Hälfte gemacht werden können, wenn es keine Fehler gegeben hätte ...)

Ich hoffe, es ist hilfreich für diejenigen, die Docker berühren möchten und Fehler haben.

Umgebung

**※Hinweis! ** ** ** Das Standardauthentifizierungsformat für MySQL unterscheidet sich zwischen den Serien 5.0 und 8.0. (Stand 18. August 2020) Infolgedessen unterscheidet sich die Beschreibung der Datei (docker-compose.yml), die zum Erstellen von Docker erforderlich ist, je nach Version **. ** ** ** Stellen Sie daher sicher, dass die von Ihnen verwendete MySQL-Version mit der in der Literatur beschriebenen MySQL-Version übereinstimmt.

Grundlegendes Lernen

Unterrichtsmaterialien: Docker für Einführung

Einführung Docker ist eine kostenlose praktische Website, auf der Sie leicht Begriffe und Strukturen in Bezug auf Docker erlernen können.

Wenn Sie nichts über Docker wissen, dauert es ungefähr einen halben Tag bis zu einem Tag, um den gesamten Inhalt zu erstellen. Lesen Sie daher ungefähr unter Introduction Docker. empfehlen.

Annahme

Für die Verwendung von Docker erforderliche Dateien

Es gibt drei Dateien, die einer vorhandenen Anwendung hinzugefügt werden müssen, und Dateien, die geändert werden müssen.

Die Dateistruktur ist wie folgt.

sampleApp ---- Dockerfile #Dateien zum Hinzufügen
           |-- docker-compose.yml  #Dateien zum Hinzufügen
           |-- Gemfile
           |-- Gemfile.lock
           |-- README.md
           |-- Rakefile
           |-- app
           |-- bin
           |-- config ---- application.rb
           |           |-- boot.rb
           |           |-- cable.yml
           |           |-- credentials.yml.enc
           |           |-- database.yml     #Zu ändernde Datei
           |           |-- 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



#Geben Sie das Docker-Image an. Geben Sie die Version der App an, die Sie verwenden.
FROM ruby:2.5.1 

#Installation der erforderlichen Pakete. Knoten.In Bezug auf js ist in der ursprünglichen Beschreibung ein Fehler aufgetreten, der korrigiert wurde.
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/*

#Arbeitsverzeichnis erstellen und einrichten
RUN mkdir /workdir
WORKDIR /workdir

#Erstellt die Host-Seite (lokal) Gemfile oben/Zum Arbeitsverzeichnis hinzufügen
ADD Gemfile /workdir/Gemfile
ADD Gemfile.lock /workdir/Gemfile.lock

#Gemfile Bundle installieren
#Ich habe einen Fehler erhalten, als ich es ohne ENV ausgeführt habe. BUNDLER_Durch Angabe von VERSION vermieden.
ENV BUNDLER_VERSION 2.1.4
RUN gem install bundler
RUN bundle install

#Alle Verzeichnisse auf der Hostseite (lokal) des Docker-Containers/Hinzugefügt unter workdir.
ADD . /workdir

docker-compose.yml

docker-compose.yml



# docker-Gibt die Erstellungsversion an. Diesmal'3'verwenden.
version: '3'

#Definieren Sie den zu startenden Container. Db in dieser Datei, db-test ,Es definiert drei der Web.
services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password #Das Standardauthentifizierungsformat ist MySQL_native_Zum Passwort wechseln. MySQL5.Nicht erforderlich für 0-Serien.
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: appname_development
      MYSQL_USER: yuki #Jeder Benutzer
      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'] %>

Starten Sie Docker / Create DB

python


$ docker-compose build #Container erstellen
$ docker-compose up -d #Gleichzeitiger Start von Containern

$ docker-compose run web bundle exec rake db:create  #DB-Erstellung
$ docker-compose run web bundle exec rake db:migrate #Migration

Wenn möglich, sollten Sie unter http: // localhost: 3000 darauf zugreifen können.

Recommended Posts

Vorgehensweise zum Migrieren der Rails-Anwendungsentwicklungsumgebung zu Docker, auch wenn Sie unerfahren sind (Rails5 + MySQL8.0 + Docker-Compose)
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
Verfahren zum Einführen von Docker in die Entwicklungsumgebung vorhandener Rails-Apps [Rails, MySQL, Docker]
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Rails 6 (API-Modus) + MySQL Docker-Umgebungserstellung durch Docker-Compose (für Mac)
Konstruktionsverfahren für die Docker-Umgebung "Rails 6 x MySQL 8" für die gemeinsame Nutzung mit Teams
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
Führen Sie Docker in die Anwendung ein, die Sie erstellen
Führen Sie Docker in die Entwicklungs- und Testumgebung vorhandener Rails- und MySQL-Apps ein
So installieren Sie Docker in der lokalen Umgebung einer vorhandenen Rails-App [Rails 6 / MySQL 8]
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
<Punktinstallation> Was tun, wenn Sie aufgrund eines Fehlers beim Erstellen einer Entwicklungsumgebung für das Rails-Lernen nicht fortfahren können?
Erstellung einer Webanwendungsentwicklungsumgebung in Java (für unerfahrene Personen)
[Verfahren 1 für Anfänger] Ruby on Rails: Aufbau einer Entwicklungsumgebung
[Docker] So sichern und wiederherstellen Sie DB-Daten der Rails-Anwendung auf Docker-Compose [MySQL]
Ruby on Rails - Von der Umgebungskonstruktion bis zur einfachen Anwendungsentwicklung auf WSL2
Wenn Sie die Java-Entwicklungsumgebung von Eclipse aus ändern möchten
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
So erstellen Sie eine Rails + Vue + MySQL-Umgebung mit Docker [neueste Version 2020/09]
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Umgebungskonstruktion für die Entwicklung von Servlet-Anwendungen
Erstellen Sie mit Docker CE für Windows eine Webanwendungsentwicklungsumgebung, die Java, MySQL und Redis verwendet
Konstruktionsverfahren für Rails on Docker-Umgebungen
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Erstellen Sie eine Debug-Umgebung auf einem Container. Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials.
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials (Rails 6 + PostgreSQL + Webpack)
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
Ich habe versucht, das auf Vagrant erstellte Portfolio in die Entwicklungsumgebung von Docker zu migrieren
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
So erstellen Sie eine Rails 6-Umgebung mit Docker
[Erste Umgebungskonstruktion] Ich habe versucht, eine Rails6 + MySQL8.0 + Docker-Umgebung unter Windows 10 zu erstellen.
[Rails5.2] Unterstützung für Piktogramme von MySQL 5.7 in Docker (Zeichencode in utf8mb4 ändern)