[RUBY] Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen

Ich sehe oft Artikel über das Ausführen von "Ruby on Rails" mit Docker, aber ich sehe "Padrino" nicht so oft, also ein Memo des Verfahrens, als ich es nach dem Studium ausprobiert habe. Das Erstellen eines Docker-Images ist etwas umständlich, da das Padrino g-Projekt ein Unterverzeichnis erzwingt.

Überprüfungsumgebung

Windows10 Home Edition
VirtualBox 6.1.10

# Docker Host OS (CoreOS)
$ uname -a
Linux default 4.9.93-boot2docker #1 SMP Thu Jul 19 18:29:50 UTC 2018 x86_64 GNU/Linux

Docker version 18.06.1-ce, build e68fc7a
docker-compose version 1.20.1, build 5d8c71b

Übersicht über den Installationsvorgang

  1. Erstellen Sie zuerst ein Docker-Image, das das ursprüngliche Projekt enthält, das von "padrino g project" erstellt wurde (als "Basisbild" bezeichnet).
  2. Erstellen Sie einen Container aus dem Basis-Image und kopieren Sie den ersten Projektordner mit Docker-CP auf die Seite des Host-Betriebssystems.
  3. Erstellen Sie ein Image, das das Projekt auf der Seite des Host-Betriebssystems überschreibt, basierend auf dem Basis-Image (als App-Image bezeichnet).
  4. Nachfolgende Entwicklungsarbeiten ändern den Quellcode des Projekts auf dem Host-Betriebssystem und erstellen das App-Image neu.

Da das Unterverzeichnis von "padrino g project" erstellt wird, ändert sich "WORKDIR" vor und nach dem Erstellen des Projekts, sodass das obige Verfahren ausgeführt wird.

Anfängliche Verzeichnisstruktur

Anfangs nur docker-compose.yml und Dockerfile im Ordner padrino

padrino
|   docker-compose.yml
|   Dockerfile

docker-compose.yml

Inhalt zum Erstellen eines Basisbildes

docker-compose.yml


version: "3.4"
services:
  base: 
    build:
      context: .
      dockerfile: ./Dockerfile
      target: "padrino-base"
    image: takaya030/padrino-base
    ports: 
      - "3000:3000"
    working_dir: /workspace/myapp
    command: "bundle exec padrino s -h 0.0.0.0"

Dockerfile

Dies ist auch der Inhalt zum Erstellen eines Basisbildes

Dockerfile


FROM ruby:2.7.1 as padrino-base
LABEL maintainer "takaya030"

RUN apt-get update -qq && \
    apt-get install -y build-essential libpq-dev nodejs && \
	apt-get clean && \
	rm -rf /var/lib/apt/lists/*

# insall padrino
RUN mkdir /workspace
WORKDIR /workspace
RUN bundle init && \
	echo 'gem "padrino"' >>Gemfile && \
	bundle config set path 'vendor/bundle' && \
	bundle install && \
	bundle exec padrino g project myapp -t rspec -e erb -c sass -s jquery -d activerecord && \
	rm -rf Gemfile Gemfile.lock .bundle vendor

# create project
WORKDIR /workspace/myapp
RUN bundle config set path 'vendor/install' && \
	bundle install

CMD ["true"]

Erstellen Sie das Basis-Image

$ cd padrino
$ docker-compose build base

Überprüfen Sie die Funktion des Basisbilds

Starten Sie den Docker-Container

$ docker-compose up -d

Wenn Sie mit einem Webbrowser auf http://192.168.99.100:3000/ zugreifen und Folgendes angezeigt wird, funktioniert es ordnungsgemäß.

padrino_1.png

Stoppen Sie den Behälter einmal

$ docker-compose stop

Kopieren Sie den Projektordner auf die Seite des Host-Betriebssystems

Kopieren Sie den Projektordner im gestoppten Container auf die Seite des Host-Betriebssystems Dies ist die eigentliche Entwicklungsumgebung

$ docker cp padrino_base_1:/workspace/myapp .

# "padrino_base_1"Ist der Name des Containers, den Sie gerade angehalten haben

Wenn der Kopiervorgang abgeschlossen ist, wird die Entwicklungsumgebung im Ordner "padrino / myapp /" erstellt.

padrino
|   docker-compose.yml
|   Dockerfile
|   
\---myapp

Löschen Sie den Container, wenn der Kopiervorgang abgeschlossen ist

$ docker-compose rm

app Einstellungen für die Bilderstellung hinzufügen

docker-compose.yml

Wechseln Sie zu den folgenden Inhalten

docker-compose.yml


version: "3.4"
services:
  base: 
    build:
      context: .
      dockerfile: ./Dockerfile
      target: "padrino-base"
    image: takaya030/padrino-base
  app: 
    build:
      context: .
      dockerfile: ./Dockerfile
      target: "padrino-app"
    image: takaya030/padrino-app
    ports: 
      - "3000:3000"
    volumes:
      - ./myapp:/workspace/myapp
    working_dir: /workspace/myapp
    command: "bundle exec padrino s -h 0.0.0.0"

Dockerfile

Wechseln Sie zu den folgenden Inhalten

Dockerfile


FROM ruby:2.7.1 as padrino-base
LABEL maintainer "takaya030"

RUN apt-get update -qq && \
    apt-get install -y build-essential libpq-dev nodejs && \
	apt-get clean && \
	rm -rf /var/lib/apt/lists/*

# insall padrino
RUN mkdir /workspace
WORKDIR /workspace
RUN bundle init && \
	echo 'gem "padrino"' >>Gemfile && \
	bundle config set path 'vendor/bundle' && \
	bundle install && \
	bundle exec padrino g project myapp -t rspec -e erb -c sass -s jquery -d activerecord && \
	rm -rf Gemfile Gemfile.lock .bundle vendor

# create project
WORKDIR /workspace/myapp
RUN bundle config set path 'vendor/install' && \
	bundle install

CMD ["true"]

#=========================================
FROM padrino-base as padrino-app

COPY ./myapp /workspace/myapp
WORKDIR /workspace/myapp

CMD ["bundle","exec","padrino","s","-h","0.0.0.0"]

Erstellen Sie das App-Image

$ docker-compose build app

Überprüfen Sie die Funktion des App-Images

Starten Sie den Docker-Container

$ docker-compose up -d

Gehen Sie mit einem Webbrowser zu http://192.168.99.100:3000/ und überprüfen Sie, ob derselbe Bildschirm wie zuvor angezeigt wird.

Bestätigung der Reflexion von Quellcodeänderungen

Ändern Sie bei laufendem Container "myapp / app / app.rb" wie folgt

myapp/app/app.rb


--- a/app.rb      Sat Jun 06 19:19:23 2020
+++ b/app.rb      Sat Jun 06 22:30:27 2020
@@ -62,5 +62,10 @@
     #     render 'errors/500'
     #   end
     #
+
+    get '/' do
+      "Hello World"
+    end
+
   end
 end

Wenn Sie mit einem Webbrowser erneut auf http://192.168.99.100:3000/ zugreifen und es wie in der Abbildung unten gezeigt angezeigt wird, funktioniert es normal.

padrino_2.png

So fügen Sie ein Edelsteinpaket hinzu

Überprüfen Sie die aktuell installierten Pakete

$ docker-compose run --rm app bundle list
Gems included by the bundle:
  * activemodel (6.0.3.1)
  * activerecord (6.0.3.1)
  * activesupport (6.0.3.1)
  * concurrent-ruby (1.1.6)
  * diff-lcs (1.3)
  * erubi (1.9.0)
  * ffi (1.13.0)
  * i18n (1.8.3)
  * mail (2.7.1)
  * mime-types (3.3.1)
  * mime-types-data (3.2020.0512)
  * mini_mime (1.0.2)
  * minitest (5.14.1)
  * moneta (1.1.1)
  * mustermann (1.1.1)
  * padrino (0.15.0)
  * padrino-admin (0.15.0)
  * padrino-cache (0.15.0)
  * padrino-core (0.15.0)
  * padrino-gen (0.15.0)
  * padrino-helpers (0.15.0)
  * padrino-mailer (0.15.0)
  * padrino-support (0.15.0)
  * rack (2.2.2)
  * rack-protection (2.0.8.1)
  * rack-test (1.1.0)
  * rake (13.0.1)
  * rb-fsevent (0.10.4)
  * rb-inotify (0.10.1)
  * rspec (3.9.0)
  * rspec-core (3.9.2)
  * rspec-expectations (3.9.2)
  * rspec-mocks (3.9.1)
  * rspec-support (3.9.3)
  * ruby2_keywords (0.0.2)
  * sass (3.7.4)
  * sass-listen (4.0.0)
  * sinatra (2.0.8.1)
  * sqlite3 (1.4.2)
  * thor (0.20.3)
  * thread_safe (0.3.6)
  * tilt (2.0.10)
  * tzinfo (1.2.7)
  * zeitwerk (2.3.0)
Use `bundle info` to print more detailed information about a gem

Beschreiben Sie das Paket, das Sie zu "myapp / Gemfile" hinzufügen möchten

myapp/Gemfile


--- a/Gemfile     Sat Jun 06 19:19:23 2020
+++ b/Gemfile     Sun Jun 07 21:57:33 2020
@@ -22,6 +22,10 @@
 gem 'activerecord', '>= 3.1', :require => 'active_record'
 gem 'sqlite3'

+# OAuth
+gem "omniauth"
+gem "omniauth-twitter"
+
 # Test requirements
 gem 'rspec', :group => 'test'
 gem 'rack-test', :require => 'rack/test', :group => 'test'

Installieren Sie das Paket mit dem folgenden Befehl

$ docker-compose run --rm app bundle install

Überprüfen Sie, ob es erfolgreich installiert wurde (Bestätigen Sie, dass das Paket zu "Omniauth" hinzugefügt wurde.)

$ docker-compose run --rm app bundle list
Gems included by the bundle:
  * activemodel (6.0.3.1)
  * activerecord (6.0.3.1)
  * activesupport (6.0.3.1)
  * concurrent-ruby (1.1.6)
  * diff-lcs (1.3)
  * erubi (1.9.0)
  * ffi (1.13.0)
  * hashie (4.1.0)
  * i18n (1.8.3)
  * mail (2.7.1)
  * mime-types (3.3.1)
  * mime-types-data (3.2020.0512)
  * mini_mime (1.0.2)
  * minitest (5.14.1)
  * moneta (1.1.1)
  * mustermann (1.1.1)
  * oauth (0.5.4)
  * omniauth (1.9.1)
  * omniauth-oauth (1.1.0)
  * omniauth-twitter (1.4.0)
  * padrino (0.15.0)
  * padrino-admin (0.15.0)
  * padrino-cache (0.15.0)
  * padrino-core (0.15.0)
  * padrino-gen (0.15.0)
  * padrino-helpers (0.15.0)
  * padrino-mailer (0.15.0)
  * padrino-support (0.15.0)
  * rack (2.2.2)
  * rack-protection (2.0.8.1)
  * rack-test (1.1.0)
  * rake (13.0.1)
  * rb-fsevent (0.10.4)
  * rb-inotify (0.10.1)
  * rspec (3.9.0)
  * rspec-core (3.9.2)
  * rspec-expectations (3.9.2)
  * rspec-mocks (3.9.1)
  * rspec-support (3.9.3)
  * ruby2_keywords (0.0.2)
  * sass (3.7.4)
  * sass-listen (4.0.0)
  * sinatra (2.0.8.1)
  * sqlite3 (1.4.2)
  * thor (0.20.3)
  * thread_safe (0.3.6)
  * tilt (2.0.10)
  * tzinfo (1.2.7)
  * zeitwerk (2.3.0)
Use `bundle info` to print more detailed information about a gem

Referenz

Recommended Posts

Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Erstellen Sie mit Docker eine Vue3-Umgebung!
Ich habe versucht, ein Portfolio mit AWS, Docker, CircleCI, Laravel [mit Referenzlink] zu erstellen.
[Erste Umgebungskonstruktion] Ich habe versucht, eine Rails6 + MySQL8.0 + Docker-Umgebung unter Windows 10 zu erstellen.
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe versucht, eine React.js x TypeScript x Material-Benutzeroberfläche in einer Docker-Umgebung zu erstellen
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Erstellen Sie mit Docker eine Spring Boot-gradle-mysql-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe versucht, mit Eclipse + Tomcat eine http2-Entwicklungsumgebung zu erstellen
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
[Memo] Erstellen Sie mit Docker ganz einfach eine CentOS 8-Umgebung
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
Ich habe versucht, eine LINE-Klon-App zu erstellen
Ich habe versucht, den Block mit Java zu brechen (1)
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)
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
Ich habe BIND mit Docker ausprobiert
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Erstellen Sie eine Chisel-Entwicklungsumgebung mit Windows 10 + WSL2 + VScode + Docker
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 3 ~ Übung ~ erstellt
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Erstellen Sie mit Docker eine Node.js-Umgebung
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, mit Wercker ein Docker-Image zu erstellen und zu veröffentlichen, mit dem GlassFish 5 gestartet wird
Ich habe versucht, mit Java zu interagieren
Erstellen Sie mit Docker eine SolrCloud-Überprüfungsumgebung
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
[SAP] Erstellen Sie eine Entwicklungsumgebung mit NW AS ABAP Developer Edition (1).
Ich habe versucht, eine einfache Karten-App in Android Studio zu erstellen
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
Erstellen einer PostgreSQL-Umgebung mit Docker (vom Setup bis kurz vor der Entwicklung)
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Erstellen Sie mit Docker schnell eine Webumgebung