[Rails 6] Dockerisieren Sie vorhandene Rails-Apps [Docker]

Einführung

Hello,Qiita! :sunny: Dieses Mal werde ich eine vorhandene Rails-App auf Docker stellen! Es ist so einfach wie das Verschieben der Umgebung in einem Container. Ich habe mich ein wenig mit der Installation von Webpack und Garn beschäftigt, also habe ich einen Artikel geschrieben! Lassen Sie uns zwei Container, Rails und MySQL, mit Docker-Compose orchestrieren: musical_score: Lass uns gehen! !! : whale2:

Voraussetzungen

Beschreibung der Docker-Datei

Beschreiben Sie wie folgt.

Dockerfile


FROM ruby:2.7.1

ENV BUNDLER_VERSION="2.1.4" \
    APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn \
    TZ=Asia/Tokyo

RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    mariadb-client \
    sudo \
    vim && \
    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 && apt-get install -y yarn

WORKDIR /app

COPY Gemfile Gemfile.lock /app/

COPY . /app

RUN bundle install -j4 && \
    yarn upgrade && \
    rails webpacker:install && \
    yarn install --check-files

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

Was machst du

FROM Holen Sie sich das offizielle Bild (diesmal Ruby Version 2.7.1) von Docker Hub.

ENV Umgebungsvariablen definieren.

APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn ↑ Sie können die Warnmeldung ausblenden, indem Sie dies schreiben

RUN Führen Sie den Befehl im Docker-Container aus.

apt-get Dieser Befehl bedeutet, Pakete mit der APT-Bibliothek (Advanced Package Tool) zu betreiben und zu verwalten, einem Paketverwaltungssystem für Debian-basierte Distributionen (Debian und Ubuntu). Dieses Mal habe ich das Image von Ruby aufgenommen, aber Ruby ist auf dem Debian-Image installiert. Da Debian den Linux-Kernel verwendet, können Linux-Befehle verwendet werden.

WORKDIR Stellen Sie das Arbeitsverzeichnis ein. Es kann mehrfach in derselben Docker-Datei angegeben werden, und der in ENV registrierte Pfad kann verwendet werden.

COPY Kopieren Sie die neue Datei in einen Ordner (komprimierte Dateien werden nicht erweitert).

ENTRYPOINT Führen Sie den beschriebenen Befehl aus.

EXPOSE Geben Sie einen bestimmten Port frei.

CMD Legen Sie den Standardwert des auszuführenden Containers fest. Nur __ einmal __ kann in derselben Docker-Datei verwendet werden, und es ist möglich, ein Argument für ENTRYPOINT festzulegen. Die Docker-Datei sollte mindestens einmal ENTRYPOINT oder CMD enthalten. __ __

Beschreibung von docker-compose.yml

Beschreiben Sie wie folgt.

docker-compose.yml


version: '3'

services:
  app:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
      - ./vendor/bundle:/myapp/vendor/bundle:delegated
    ports:
      - "19802:3000" # "Beliebiger Port:3000"Zu
    depends_on:
      - db
    tty: true
    stdin_open: true

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "password"
    ports:
      - "19801:3306" #ich auch,"Beliebiger Port:3306"Zu
    volumes:
      - ./tmp/db:/var/lib/mysql

Was machst du

version Definieren Sie die zu verwendende Version von Docker-Compose.

services Definieren Sie jedes Element (jeden Dienst), um die Anwendung auszuführen. (Diesmal app und db)

build Führen Sie die Erstellungsdatei aus und geben Sie den Pfad an, wenn sie erstellt wird.

command Überschreiben Sie den Standardbefehl.

volumes Geben Sie den Pfad der Konfigurationsdatei an, die bereitgestellt werden soll.

ports Geben Sie die Portnummer an, wenn Sie das Docker-Image starten.

depends_on Geben Sie die Abhängigkeit zwischen Diensten an.

environment Geben Sie Umgebungsvariablen an.

tty: true Stellen Sie den Container so ein, dass er weiterläuft.

stdin_open: true Legen Sie die Standard-Eingabe- / Ausgabeberechtigungen im Container fest.

Beschreibung von entrypoint.sh

Beschreiben Sie wie folgt.

entrypoint.sh


#!/bin/bash
set -e

#Rails Server.Entfernen Sie die PID-Datei
rm -f /app/tmp/pids/server.pid

#Führen Sie den Hauptprozess des Containers aus(Was ist in der Docker-Datei als CMD eingestellt?)。
exec "$@"

Beschreibung von database.yml

Beschreiben Sie wie folgt.

database.yml


default: &default
  adapter: mysql2
  pool: 5
  timeout: 5000 #Irgendein

development:
  <<: *default
  database: myapp_development
  username: root
  password: password
  host: db
  port: 3306

Überprüfen von Gemfile und Gemfile.lock

Dieses Mal werden wir die vorhandene App auf Docker stellen. Wir müssen also nur sicherstellen, dass Gemfile und Gemfile.lock vorhanden sind.

Starten Sie Docker-Compose

Am Terminal docker-compose build Ausführen.

Terminal


Successfully built ~
Successfully tagged ~

Wird ausgegeben, ist der Build erfolgreich.

Nächster, docker-compose exec app bash So geben Sie den App-Container ein danach, bundle exec rails db:create bundle exec rails db:migrate bundle exec rails db:seed Und du bist fertig! : Sonnenbrille:

Am Ende

Danke, dass du bis zum Ende zugesehen hast. Persönlich macht es wirklich Spaß, im Container zu arbeiten. Ich weiß nicht warum. (Es fühlt sich an wie ein Anfang) Ich würde mich auch freuen, wenn Sie mich wissen lassen könnten, wenn Sie unangemessene Ausdrücke haben.

Wir sehen uns wieder! : Rakete:

Recommended Posts

[Rails 6] Dockerisieren Sie vorhandene Rails-Apps [Docker]
Rails Docker-Teil 1-
Rails Docker ~ Teil 2 ~
Aufbau der Rails Docker-Umgebung
Docker x Rails 6 (Memo)
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
Führen Sie Rails immer im Docker aus
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
[Docker] Wird immer mit Docker + Rails verwendet
Docker + Rails + Vue.js Verbindung bei localhost abgelehnt
[SRE / Docker] Starten Sie die Steuerung mit Dockerize
Konstruktionsverfahren für Rails on Docker-Umgebungen
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Stellen Sie Rails on Docker für Heroku bereit
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps