[RUBY] [Rails] So erstellen Sie eine Umgebung mit Docker

Entwicklungsumgebung

・ Docker: 19.03.8 ・ Docker-Compose: 1.25.5 ・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Implementierung

1. Arbeitsverzeichnis erstellen / verschieben

Der Ordnername lautet "myapp" (alles ist in Ordnung).

Terminal


$ mkdir myapp

Terminal


$ cd myapp

2. Erstellen / bearbeiten Sie "Dockerfile"

Terminal


$ vi Dockerfile

Dockerfile


FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

#Es wurde ein Skript hinzugefügt, das bei jedem Start des Containers ausgeführt wird
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

#Starten Sie den Hauptprozess
CMD ["rails", "server", "-b", "0.0.0.0"]

[Erläuterung]

★ Übersicht

FROM: Stellen Sie das zu verwendende Bild und die zu verwendende Version ein RUN: Befehl ausführen WORKDIR: Legen Sie das Arbeitsverzeichnis fest COPY: Kopiert lokale Dateien in den Container ENTRYPOINT: Legen Sie den Befehl fest, der zuerst ausgeführt werden soll EXPOSE: Legen Sie die Portnummer fest, an der der Container lauscht CMD: Software-Ausführung im Image

★ Details

** ◎ Erhalten Sie die neueste stabile Version vom 19. Juli 2020 als zu verwendendes Image. ** **.

FROM ruby:2.7.1

** ◎ Installieren Sie die Pakete Node.js und PostgreSQL. ** **.

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

** ◎ Erstellen Sie ein myapp-Verzeichnis im Container. ** **.

RUN mkdir /myapp

** ◎ Stellen Sie das Arbeitsverzeichnis auf die oben erstellte myapp ein **

WORKDIR /myapp

** ◎ Kopiere die lokale Gemfile nach myapp in den Container. ** **.

COPY Gemfile /myapp/Gemfile

** ◎ Kopieren Sie das lokale Gemfile.lock nach myapp im Container. ** **.

COPY Gemfile.lock /myapp/Gemfile.lock

** ◎ Bundle-Installation ausführen. ** **.

RUN bundle install

** ◎ Kopieren Sie das aktuelle Verzeichnis (lokale myapp) nach myapp im Container. ** **.

COPY . /myapp

** ◎ Kopieren Sie den lokalen entrypoint.sh nach usr / bin im Container. ** **.

COPY entrypoint.sh /usr/bin/

** ◎ Erlaube den Zugriff auf die oben kopierte entrypoint.sh. ** **.

RUN chmod +x /usr/bin/entrypoint.sh

** ◎ Legen Sie entrypoint.sh als ersten Befehl fest, der beim Starten des Containers ausgeführt wird. ** **.

ENTRYPOINT ["entrypoint.sh"]

** ◎ Stellen Sie die Portnummer auf 3000. ** **.

EXPOSE 3000

** ◎ Starten Sie den Rails-Server. ** **.

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

3. Erstellen / bearbeiten Sie Gemfile

Geben Sie die Rails-Version an. Dieses Mal werden wir es mit Rails 6 kompatibel machen.

Terminal


$ vim Gemfile

Gemfile


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

4. Erstellen Sie "Gemfile.lock"

Terminal


$ touch Gemfile.lock

5. Erstellen / bearbeiten Sie entrypoint.sh

Terminal


$ vi entrypoint.sh

entrypoint.sh


#!/bin/bash
set -e

#Rails-kompatibler Dateiserver.Löschen Sie die PID, falls vorhanden.
rm -f /myapp/tmp/pids/server.pid

#Führen Sie den Prozess des Containers aus. (Die in CMD in der Docker-Datei festgelegte.)
exec "$@"

5. Erstellen / bearbeiten Sie "docker-compose.yml"

Terminal


$ vi docker-compose.yml

docker-compose.yml


version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
  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

[Erläuterung]

version: Legt die Version von Docker-Compose fest. services: Erstellen Sie Services im folgenden Hash. Sie können es frei benennen, aber normalerweise nennen Sie es web und db. image: zu verwendendes Bild (PostgreSQL in db angeben) Volumes: Einstellungen für die Verzeichnisbereitstellung (Datenbankdaten usw. können belassen werden) build: Pfad mit Dockerfile usw. (im Grunde das aktuelle Verzeichnis) command: Befehl (lösche die Datei server.pid und starte dann den Rails-Server) ports: Portnummer (Host: im Container festgelegt) deponiert_on: Zeigt die Abhängigkeiten an und ermöglicht die Angabe der Startreihenfolge. Beginnen Sie hier mit db → web.

6. Überprüfen Sie die Verzeichnisstruktur

Terminal


myapp
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
- docker-compose.yml

7. Erstellen Sie das Projekt

Terminal


$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle

[Erläuterung]

--force: Gemfile überschreiben --no-deps: Starten Sie den verknüpften Dienst nicht --database = postgresql: Geben Sie PostgreSQL für DB an --skip-bundle: Bundle überspringen

8. Führen Sie bundle install aus

Terminal


Could not find gem 'pg (>= 0.18, < 2.0)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

Ich denke, dass der obige Fehler in 7 aufgetreten ist, also führen Sie den folgenden Befehl aus, um ihn zu beheben. Beim Erstellen des Docker-Images wird die Installation gebündelt.

Terminal


$ docker-compose build

9. Bearbeiten Sie database.yml

config/database.yml


#Vorher ändern
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

#Nach der veränderung
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

10. Starten Sie den Container

Terminal


$ docker-compose up

* Wenn der folgende Fehler auftritt

Terminal


Error: No such file or directory @ rb_sysopen - /myapp/config/webpacker.yml (RuntimeError)

Erstellen / bearbeiten Sie webpacker.yml

Terminal


touch config/webpacker.yml

webpacker.yml


# Note: You must restart bin/webpack-dev-server for changes to take effect

default: &default
  source_path: app/javascript
  source_entry_path: packs
  public_root_path: public
  public_output_path: packs
  cache_path: tmp/cache/webpacker
  webpack_compile_output: true

  # Additional paths webpack should lookup modules
  # ['app/assets', 'engine/foo/app/assets']
  additional_paths: []

  # Reload manifest.json on all requests so we reload latest compiled packs
  cache_manifest: false

  # Extract and emit a css file
  extract_css: true

  static_assets_extensions:
    - .jpg
    - .jpeg
    - .png
    - .gif
    - .tiff
    - .ico
    - .svg
    - .eot
    - .otf
    - .ttf
    - .woff
    - .woff2

  extensions:
    - .mjs
    - .js
    - .sass
    - .scss
    - .css
    - .module.sass
    - .module.scss
    - .module.css
    - .png
    - .svg
    - .gif
    - .jpeg
    - .jpg

development:
  <<: *default
  compile: true

  # Set to false if using HMR for CSS
  extract_css: true

  # Reference: https://webpack.js.org/configuration/dev-server/
  dev_server:
    https: false
    host: localhost
    port: 3035
    public: localhost:3035
    hmr: false
    # Inline should be set to true if using HMR
    inline: true
    overlay: true
    compress: true
    disable_host_check: true
    use_local_ip: false
    quiet: false
    pretty: false
    headers:
      'Access-Control-Allow-Origin': '*'
    watch_options:
      ignored: '**/node_modules/**'

test:
  <<: *default
  compile: true

  # Compile test packs to a separate directory
  public_output_path: packs-test

production:
  <<: *default

  # Production depends on precompilation of packs prior to booting for performance.
  compile: false

  # Cache manifest.json for performance
  cache_manifest: true

11. Datenbank erstellen

Terminal


docker-compose run web rake db:create

* Wenn der folgende Fehler auftritt

Terminal


could not translate host name "db" to address: Name or service not known

Terminal


Error: Database is uninitialized and superuser password is not specified.

Bearbeiten Sie "docker-compose.yml"

docker-compose.yml


#Vorher ändern
environment:
  POSTGRES_PASSWORD: password

#Nach der veränderung
environment:
  - POSTGRES_HOST_AUTH_METHOD=trust

Recommended Posts

[Rails] So erstellen Sie eine Umgebung mit Docker
So erstellen Sie eine Rails 6-Umgebung mit Docker
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
So erstellen Sie mit Docker ~ Express ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
So erstellen Sie mit Docker ~ MySQL ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
So erstellen Sie mit Docker ~ Sequelize ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So erstellen Sie eine API mit GraphQL und Rails
Erstellen einer Docker-Umgebung mit WSL
So pushen Sie mit Rails entwickelte Apps an Github
Erstellen Sie mit Docker eine Ruby2.7.x + Rails6.0.x + MySQL8.0.x-Umgebung
So erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
[Fehlerbehebung] Tritt auf, wenn versucht wird, mit Docker eine Umgebung für den Frühling zu erstellen
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
So erstellen Sie CloudStack mit Docker
So starten Sie Camunda mit Docker
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
So beschneiden Sie ein Bild in libGDX
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
[Docker] Erstellen einer Umgebung für Hugo
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
Erstellen Sie eine Ultra96v2-Entwicklungsumgebung auf Docker 1
Erstellen Sie mit Docker eine TensorFlow-Betriebsüberprüfungsumgebung
So führen Sie Blazor (C #) mit Docker aus
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Super Anfänger baut Rails 6 + Postgresql-Umgebung mit Docker bis zum Ende
Ich habe versucht, mit Eclipse + Tomcat eine http2-Entwicklungsumgebung zu erstellen
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
Erstellen Sie eine Debug-Umgebung auf einem Container. Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials.
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
Downgrade einer vorhandenen App, die mit Rails 5.2.4 erstellt wurde, auf 5.1.6
Wie schreibe ich Rails
So verknüpfen Sie Rails6 Vue (aus dem Umgebungsbau)
Aufbau der Rails Docker-Umgebung
Erstellen Sie mit Docker eine Umgebung für "API-Entwicklung + API-Überprüfung mithilfe der Swagger-Benutzeroberfläche"
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
So erstellen Sie eine App mit Ruby on Rails (vorausgesetzt, die Umgebung wurde erstellt)
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung