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.
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
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.
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"]
$ cd padrino
$ docker-compose build base
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äß.
Stoppen Sie den Behälter einmal
$ docker-compose stop
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ügendocker-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"]
$ docker-compose build app
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.
Ä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.
Ü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