[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen

Ich möchte die Befehle und die Umgebungskonstruktion zusammenfassen, die ich zum Erstellen eines Portfolios mit Rails benötigte. Dies ist nur auf der Ebene der Portfolioerstellung erforderlich.

Überblick

  1. Häufig verwendete Befehle zur Behandlung von Docker-Compose
  2. Beschreibung verschiedener Dateien (Dockerfile, docker-compose.yml, database.yml)

1. Häufig verwendete Befehle zur Behandlung von Docker-Compose

Befehl Schienen (Schienen g Modellbenutzer, Schienen db: migrieren usw.)

terminal


$ docker compose run --rm web <Schienen Befehl>

Die Option --rm ist ein Befehl zum Löschen des Containers nach der Ausführung. Wenn Sie dies nicht anhängen, wird ein unnötiger Container erstellt, der Druck auf den Speicher ausübt. Bringen Sie ihn daher unbedingt an.

Verbindung zum Standardeingang / -ausgang herstellen (was bei lokaler Entwicklung auf dem Terminal angezeigt wird)

terminal


$ docker attach <Name des Webserver-Containers>

Sie können den Kommunikationsstatus überprüfen, indem Sie eine Verbindung zum Standardeingang / -ausgang auf dem Server herstellen. Dieser Befehl wird auch beim Debuggen mit binding.pry verwendet. Bei richtiger Verarbeitung abnehmen. (Wenn Sie Strg + C drücken, wird der Container gelöscht.)

Ctrl + P, Ctrl + Q

Verbindung zur Datenbank herstellen (MySQL)

terminal


$ docker exec -it <Name des DB-Containers> bash

Aus dem Inneren des Behälters

terminal


$ mysql -u root -p

Erstellen Sie ein Docker-Image, starten Sie den Container und führen Sie ihn aus.

terminal


$ docker-compose stop
#Dockerfile oder Docker-compose.Nach yml Korrektur
$ docker-compose up -d --build

Zum Ändern von Dockerfile oder docker-compose.yml.

Befehl löschen

Selbst mit der Option --rm sammeln sich Container und Bilder an, die Sie nicht entwickeln müssen. Hier ist der Befehl, um sie zu löschen.

Massenlöschstopp-Container, Bilder ohne Tags, nicht verwendete Volumes und nicht verwendete Netzwerke

terminal


docker system prune

Massenlöschung gestoppter Container

terminal


docker container prune

Löschen Sie nicht verwendete Bilder in großen Mengen

terminal


docker image prune

Beschreibung verschiedener Dateien

Dockerfile Zuerst die Docker-Datei. Lesen Sie zuerst das offizielle Dokument. https://docs.docker.com/compose/rails/

Dockerfile


FROM ruby:2.7.1

#Debian-Installation
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

RUN apt-get update -qq && apt-get install -y nodejs yarn imagemagick mariadb-client vim

RUN 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"]

Garnmontage

Ab Rails 6.0 wurde der JavaScript-Compiler in Webpacker geändert, und Garn, der für die Installation von Webpacker erforderliche Paketmanager, wird installiert.

Installieren Sie ImageMagick

Installiert, weil ich MiniMagic zum Hochladen von Bildern verwenden wollte. Wenn Sie MiniMagick mit einer Rails-App verwenden möchten, müssen Sie ImageMagick in der Umgebung installieren, in der die Rails-App ausgeführt wird. Das Folgende ist von Read Me von minimagic

ImageMagick or GraphicsMagick command-line tool has to be installed. You can check if you have it installed by running

Installation von Mariadb-Client

Installieren Sie, wenn Sie Schienen db: consol verwenden möchten. Es gibt einen Artikel, in dem MySQL-Client steht, aber seien Sie vorsichtig, da er jetzt mit Mariadb-Client vereinheitlicht ist. Dies ist möglicherweise nicht erforderlich, da Sie mit dem obigen Befehl auf die Datenbank zugreifen können

installiere vim

Installieren Sie den Editor nach Bedarf. Nach der Bereitstellung der App in der Produktionsumgebung wollte ich credentials.yml.enc mit dem folgenden Befehl bearbeiten, habe aber zu diesem Zeitpunkt vim verwendet.

terminal


$ docker-compose run -e EDITOR=vim web rails credentials:edit

docker-compose.yml Als nächstes kommt docker-compose.yml

docker-compose.yml


version: "3"
services:
  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - 4306:3306
    
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - mysql-data:/var/lib/mysql

  web:
    build: .
    tty: true
    stdin_open: true
    #Ein Server läuft bereits, wenn Schienen s.Kann erscheinen. Um dies zu verhindern, rm-f tmp/pids/server.Es ist pid.
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
      - bundle:/usr/local/bundle
    ports:
      - "3100:3000"
    depends_on:
      - db

volumes:
  bundle:
    driver: local
  mysql-data:
    driver: local

Einstellung der Portnummer

docker-compose.yml


db
  ports:
    - 4306:3306
web
  ports:
    - 3100:3000

Die Portnummer des Hostcomputers befindet sich links und die Portnummer des Containers rechts. Wenn sich MySQL auf dem Host befindet (LISTEN) oder wenn Sie localhost: 3000 verwenden möchten, setzen Sie die vom Computer verwendeten Portnummern auf 4306 bzw. 3100, da die verwendeten Ports doppelt vorhanden sind. Wenn Sie es nicht tragen, können Sie 3307 oder 10000 verwenden.

Die MySQL-Authentifizierungsmethode wurde geändert

docker-compose.yml


command: --default-authentication-plugin=mysql_native_password

Die Standardauthentifizierungsmethode wurde von MySQL 8.0 (caching_sha2_password) geändert. Da die Rails-App sie jedoch noch nicht unterstützt, ändern Sie sie wieder in mysql_native_password.

Standardeingabe aktivieren

docker-compose.yml


tty: true
stdin_open: true

Sehr wichtig für das Debuggen. Wenn Sie dies nicht tun, können Sie bind.pry usw. nicht ausführen. tty: true Entspricht der Option -t des Docker-Laufs und ist eine Einstellung, die Pseudo-Terminals aktiviert. Selbst wenn es aktiviert ist, kann es nicht eingegeben werden, daher ist stdin_open: true unten immer als Satz enthalten. stdin_open: true Eine Einstellung, die der Option -i des Docker-Laufs entspricht und die Standardeingabe verbunden hält. Dies ermöglicht die Ausführung von Befehlen.

Steuern Sie die Startreihenfolge von Containern

docker-compose.yml


depends_on:
      - db

Steuern Sie die Reihenfolge, in der Container mit abhängigen_on gestartet werden (in diesem Fall db → web).

Erstellen eines Datenvolumencontainers

docker-compose.yml


volumes:
  bundle:
    driver: local
  mysql-data:
    driver: local

Auf Lautstärke montieren

docker-compose.yml


volumes:
  - mysql-data:/var/lib/mysql
volumes:
  - .:/myapp
  - bundle:/usr/local/bundle

Behalten Sie Daten mit dem zuvor erstellten Datenvolumencontainer bei. Selbst wenn Sie den Container zerstören und neu erstellen, bleiben die Daten in der Datenbank unverändert, und der Gem wird installiert und ist einsatzbereit.

database.yml Schließlich database.yml

database.yml


default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
  password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
  host: <%= ENV.fetch("MYSQL_HOST", "db") %>

development:
  <<: *default
  database: myapp_development

Zeichencode

database.yml


encoding: utf8mb4

Ich wollte Piktogramme in der Datenbank registrieren, deshalb habe ich den Zeichencode in utf8mb4 anstelle von utf8 geändert.

Bitte lassen Sie mich wissen, ob es weitere nützliche Einstellungen oder Befehle gibt ^^

Referenz

https://docs.docker.com/compose/rails/ Einführung in die praktische Containerentwicklung von Docker / Kubernetes https://qiita.com/neko-neko/items/abe912eba9c113fd527e https://qiita.com/chisaki0606/items/68e21d9a31f1eaaeac00 https://qiita.com/nsy_13/items/9fbc929f173984c30b5d

Recommended Posts

[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
[Erste Umgebungskonstruktion] Ich habe versucht, eine Rails6 + MySQL8.0 + Docker-Umgebung unter Windows 10 zu erstellen.
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
Ich habe versucht, das auf Vagrant erstellte Portfolio in die Entwicklungsumgebung von Docker zu migrieren
Ich habe versucht, ein Portfolio mit AWS, Docker, CircleCI, Laravel [mit Referenzlink] zu erstellen.
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
Ich habe versucht, mit Wercker ein Docker-Image zu erstellen und zu veröffentlichen, mit dem GlassFish 5 gestartet wird
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Ich habe versucht, eine React.js x TypeScript x Material-Benutzeroberfläche in einer Docker-Umgebung zu erstellen
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, die Stream-API zusammenzufassen
Was ist Docker? Ich habe versucht zusammenzufassen
Ich habe eine Rails-Umgebung mit Docker und MySQL erstellt, aber ich war krank
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
[Aufbau der Rails & Docker & MySQL-Umgebung] Ich habe den Container gestartet, kann aber MySQL nicht finden ...?
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
Führen Sie Docker in die Entwicklungs- und Testumgebung vorhandener Rails- und MySQL-Apps ein
Aufbau der Rails Docker-Umgebung
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Umweltbauweise und Fehlerbehebung zum Zeitpunkt der gemeinsamen Entwicklung (Schienen, Docker und Github)
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
Ich habe versucht, eine Nachrichtenfunktion der Rails Tutorial-Erweiterung (Teil 1) zu erstellen: Erstellen Sie ein Modell
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
Ich habe versucht, die Telefonnummer (Festnetz / Mobiltelefon) mit einem regulären Ausdruck in Rails auszudrücken und Validierung und Test zu schreiben
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
Ich habe versucht, node-jt400 (Umgebungskonstruktion)
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Eine Reihe von Schritten zum Erstellen von Ergebnissen für Portfolios mit Rails
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Entwicklungstools) zusammenzufassen.
[Für Swift-Anfänger] Ich habe versucht, den chaotischen Layoutzyklus von ViewController und View zusammenzufassen
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Apps) zusammenzufassen.