Je vois souvent des articles sur l'exécution de Ruby on Rails avec Docker, mais je ne vois pas tellement padrino, donc un mémo de la procédure lorsque je l'ai essayé après avoir étudié.
Créer une image Docker est un peu fastidieux car le projet padrino g force un sous-répertoire.
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
padrino g project (appelée l'image de base)base et copiez le dossier de projet initial sur le côté du système d'exploitation hôte avec docker cp.base (appelée l'image ʻapp`)Puisque le sous-répertoire est créé par padrino g project, WORKDIR change avant et après la création du projet, donc la procédure ci-dessus est suivie.
Initialement, uniquement docker-compose.yml et Dockerfile dans le dossier padrino
padrino
| docker-compose.yml
| Dockerfile
docker-compose.yml
Contenu pour créer une image de base
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
C'est aussi le contenu pour créer une image de base
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
Démarrer le conteneur Docker
$ docker-compose up -d
Si vous accédez à http://192.168.99.100:3000/ avec un navigateur Web et que ce qui suit s'affiche, cela fonctionne correctement.

Arrêtez le conteneur une fois
$ docker-compose stop
Copiez le dossier du projet dans le conteneur arrêté du côté du système d'exploitation hôte Ceci est l'environnement de développement actuel
$ docker cp padrino_base_1:/workspace/myapp .
# "padrino_base_1"Est-ce le nom du conteneur que vous venez d'arrêter
Lorsque la copie est terminée, l'environnement de développement sera créé dans le dossier padrino / myapp /.
padrino
| docker-compose.yml
| Dockerfile
|
\---myapp
Supprimer le conteneur lorsque la copie est terminée
$ docker-compose rm
docker-compose.yml
Passer au contenu suivant
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
Passer au contenu suivant
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
Démarrer le conteneur Docker
$ docker-compose up -d
Accédez à http://192.168.99.100:3000/ avec un navigateur Web et vérifiez que le même écran que précédemment s'affiche.
Avec le conteneur en cours d'exécution, modifiez myapp / app / app.rb comme suit
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
Si vous accédez à nouveau à http://192.168.99.100:3000/ avec un navigateur Web et qu'il s'affiche comme indiqué dans l'image ci-dessous, cela fonctionne normalement.

Vérifier les packages actuellement installés
$ 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
Décrivez le package que vous souhaitez ajouter à myapp / Gemfile
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'
Installez le package avec la commande suivante
$ docker-compose run --rm app bundle install
Vérifiez s'il a été installé avec succès (Confirmez que les packages liés à ʻomniauth` ont été ajoutés)
$ 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