[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8

Einführung

Es fiel mir schwer, die Umgebung mit Rails6 und MySQL mit Docker aufzubauen, daher werde ich auch im Artikel ein Memorandum hinterlassen.

Als Stolperstein Im Gegensatz zu Rails5 erforderte Rails6 die Einführung von Webpacker, einem Juwelenpaket für die Verwendung von Webpack mit Ruby on Rails, das die moderne Front-End-Entwicklung stark unterstützt.

Umgebung / Version

Verfahren zur Fertigstellung der Umgebungskonstruktion

  1. Bereiten Sie den Projektordner vor
  2. Bereiten Sie 5 Dateien vor
  3. Beschreiben Sie jede Datei
  4. Starten Sie das Rails-Projekt (Rails neu)
  5. Erstellen Sie das Docker-Image
  6. Bearbeiten Sie database.yml
  7. DB erstellen (db: create)
  8. Starten Sie den Container

Bauen Sie tatsächlich die Umgebung auf

1. Bereiten Sie den Projektordner vor

Erstellen Sie einen Ordner mit einem beliebigen Namen (es muss kein Befehl sein)

mkdir dockerSampleApp 

2. Bereiten Sie 5 Dateien vor

Erstellen Sie eine Datei in dem Ordner, der in 1 erstellt wurde.

3. Beschreiben Sie jede Datei

Dockerfile

Unabhängig vom Ordnernamen des Projekts kann der Teil von myapp als myapp belassen werden.

Dockerfile


FROM ruby:2.7

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 nodejs yarn \
    && mkdir /myapp
    
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml

docker-compose.yml


version: '3'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - mysql-data:/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
    stdin_open: true
    tty: true
volumes:
  mysql-data:
    driver: local

Gemfile

Gemfile


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

Gemfile.lock

Gemfile.lock


#Schreiben Sie nichts in diese Datei

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

4. Starten Sie das Rails-Projekt (Rails neu)

Befehl ausführen

$ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker --api

Informationen zu den diesmal verwendeten Optionen

-- --force Vorhandene Gemfile überschreiben -- --no-deps Starten Sie den verknüpften Dienst nicht -- --database = mysql Geben Sie MySQL für die Datenbank an -- --skip-test Überspringe die Installation von Minitest (da der Test RSpec einführt)

5. Erstellen Sie das Docker-Image

Der Image-Build dient zum Installieren verschiedener abhängiger Bibliotheken und Middleware sowie zum Installieren und Festlegen einer eigenen Anwendung.

Befehl ausführen

$ docker-compose build

6. Bearbeiten Sie database.yml

Der relevante Teil von database.yml wurde korrigiert. Der relevante Teil wurde gemäß den Einstellungen von services und MYSQL_ROOT_PASSWORD in docker-compose.yml korrigiert.

config/database.yml


# ~Kürzung~

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password  # ->Korrigieren Sie das Leerzeichen auf Passwort
  host: db  # ->Von localhost zu db behoben

# ~Kürzung~

7. DB erstellen (db: create)

Führen Sie den Befehl aus, um eine Datenbank zu erstellen

$ docker-compose run web rails db:create

8. Starten Sie den Container

Führen Sie abschließend den Befehl aus, um den Container zu starten

$ docker-compose up

Es kann einige Zeit dauern, aber es ist in Ordnung, wenn ein solches Protokoll im Terminal fließt

web_1  | => Booting Puma
web_1  | => Rails 6.0.3.4 application starting in development 
web_1  | => Run `rails server --help` for more startup options
web_1  | Puma starting in single mode...
web_1  | * Version 4.3.6 (ruby 2.7.2-p137), codename: Mysterious Traveller
web_1  | * Min threads: 5, max threads: 5
web_1  | * Environment: development
web_1  | * Listening on tcp://0.0.0.0:3000
web_1  | Use Ctrl-C to stop

Wenn ich auf localhost: 3000 zugreife, wird die Seite sicher angezeigt. Sollte sein! !!

Schließlich

Ich habe es geschafft, eine Umgebung aufzubauen! In Zukunft möchte ich etwas über Infrastruktur wie Docker lernen und mein Verständnis vertiefen!

Referenzmaterial

Ich war sehr hilfreich!

Vielen Dank! !!

Recommended Posts

[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Aufbau der Rails6-Entwicklungsumgebung [Mac]
Rails Engineer Environment Construction Ruby2.7.1
Schienen Umgebungsbau Schienen5.2.1 ruby2.5.1 Catalina
Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
[Rails / MySQL] Aufbau einer Mac-Umgebung
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
Konstruktionsverfahren für Rails on Docker-Umgebungen
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Sapper × Go (Echo) × Aufbau einer Docker-Entwicklungsumgebung
Aufbau der Spring Boot + Docker Java-Entwicklungsumgebung
Erstellen einer Umgebung für Laravel + MySQL + phpMyadmin mit Docker
Rails & React & Webpacker & MySQL Environment Konstruktionshandbuch
Muskel Rubin auf Schienen Tag 1 ~ Umweltbau ~
CentOS8.2 (x86_64) + ruby2.5 + Rails5.2 + MariaDB (10.3.17) Umgebungskonstruktion
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
Konstruktionsverfahren für die Docker-Umgebung "Rails 6 x MySQL 8" für die gemeinsame Nutzung mit Teams
Java Entwicklungsumgebung Konstruktion
[Rails] Entwicklung mit MySQL
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
[Persönliches Memo] Ruby on Rails-Umgebungskonstruktion (Windows)
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
[Umgebungskonstruktion] Rails + MySQL + Docker (Anfänger können es auch in 30 Minuten verwenden!)
[Aufbau der Rails & Docker & MySQL-Umgebung] Ich habe den Container gestartet, kann aber MySQL nicht finden ...?
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Vorlage: Erstellen Sie eine Ruby / Rails-Entwicklungsumgebung mit einem Docker-Container (Ubuntu-Version).
Vorlage: Erstellen Sie eine Ruby / Rails-Entwicklungsumgebung mit einem Docker-Container (Mac-Version).
WSL2 + VSCode + Docker-Entwicklungsumgebung
[Erste Umgebungskonstruktion] Ich habe versucht, eine Rails6 + MySQL8.0 + Docker-Umgebung unter Windows 10 zu erstellen.
Erstellen Sie eine Ruby on Rails-Entwicklungsumgebung in AWS Cloud9
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
Verfahren zum Einführen von Docker in die Entwicklungsumgebung vorhandener Rails-Apps [Rails, MySQL, Docker]
Rails5 + MySQL8.0 + Top-Level-Volume-Umgebungskonstruktion mit Docker-Compose
Bereitstellen auf Ruby on Rails Elastische Bohnenstange (Umgebungskonstruktion)
Führen Sie Docker in die Entwicklungs- und Testumgebung vorhandener Rails- und MySQL-Apps ein
Redmine (Docker) Umgebungskonstruktionsnotiz
[Umgebungskonstruktion Mac] Ruby on Rails (+ Webpacker behandelt Fehler)
Offline-Umgebungskonstruktion Ruby Edition
Aufbau der Docker x Spring Boot-Umgebung
[Super einfach] Ruby-Umgebungskonstruktion
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
[Ruby on Rails] Von der MySQL-Konstruktion zum Datenbankwechsel
[Docker] postgres, pgadmin4-Umgebungskonstruktion