Cette fois, nous allons créer trois conteneurs.

【Environnement d'exploitation】
OS : macOS 10.14.6
Docker : 19.03.8
ruby : 2.6.5
rails : 5.2.4
[Conditions préalables] Docker pour Mac installé
Tout d'abord, créez un dossier Docker et un fichier vide. Le contenu du fichier sera décrit plus loin.

Vous trouverez ci-dessous le fichier docker nginx. findpro-bangkok est le nom de l'application, alors changez-le en votre propre nom d'application.
ruby:Dockerfile:nginx
FROM nginx:1.15.8
#Supprimer dans le répertoire d'inclusion
RUN rm -f /etc/nginx/conf.d/*
#Copier le fichier de configuration Nginx dans le conteneur
COPY /docker/nginx/nginx.conf /etc/nginx/conf.d/findpro-bangkok.conf
#Placer des fichiers publics tels que des images dans nginx
RUN mkdir -p /findpro-bangkok/public
COPY ./public /findpro-bangkok/public
#Démarrez Nginx une fois la construction terminée
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
Créez nginx.conf qui décrit les paramètres nginx.
nginx.conf
#Spécification de la destination du proxy
#Envoyez la demande reçue par Nginx au backend puma
upstream puma {
  #Je veux communiquer avec des prises, donc puma.Spécifiez la chaussette
  server unix:///findpro-bangkok/tmp/sockets/puma.sock;
}
server {
  listen 80 default;
  #Spécifiez le domaine ou l'adresse IP
  server_name localhost;
  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;
  #Spécifier la racine du document
  root /findpro-bangkok/public;
  client_max_body_size 100m;
  error_page 404             /404.html;
  error_page 505 502 503 504 /500.html;
  try_files  $uri/index.html $uri @puma;
  keepalive_timeout 5;
  #Paramètres liés au proxy inverse
  location @puma {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://puma;
  }
}
Ensuite, créez un Dockerfile pour les rails.
Dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && \
  apt-get install -y apt-utils \
  build-essential \
  libpq-dev \
  nodejs \
  vim
#Changer le nom de votre propre application
ENV RAILS_ROOT /findpro-bangkok
RUN mkdir $RAILS_ROOT
WORKDIR $RAILS_ROOT
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN gem install bundler:2.1.4
RUN bundle install
#Copiez tous les fichiers du dossier du projet dans le conteneur Rails
COPY . .
#Créer un répertoire pour la communication socket
RUN mkdir -p tmp/sockets
Modifiez le fichier de configuration puma dans le dossier de configuration suivant.

puma.rb
threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }.to_i
threads threads_count, threads_count
port        ENV.fetch('PORT') { 3000 }
environment ENV.fetch('RAILS_ENV') { 'development' }
plugin :tmp_restart
app_root = File.expand_path('..', __dir__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
docker-compose est un mécanisme pour exécuter des builds de plusieurs conteneurs à la fois.
Créez un fichier docker-compose directement sous le dossier du projet.

docker-compose.yml
version: '3'
volumes:
  tmp_data:
  public_data:
services:
  nginx:
    build:
      context: ./
      dockerfile: ./docker/nginx/Dockerfile
    ports:
      - '80:80'
    volumes:
      - public_data:/findpro-bangkok/public
      - tmp_data:/findpro-bangkok/tmp/sockets
    depends_on:
      - app
    links:
      - app
  app:
    build:
      context: ./
      dockerfile: ./docker/rails/Dockerfile
    command: bundle exec puma
    volumes:
     #.:/findpro-Bangkok synchronise le dossier actuel du projet avec le dossier du conteneur.Cela permet aux modifications d'être reflétées dans le conteneur sans avoir à le reconstruire..
      - .:/findpro-bangkok:cached
      #tmp sur l'ordinateur hôte pour la communication socket avec nginx_Créez un fichier appelé data et partagez-le avec le conteneur nginx.
      - tmp_data:/findpro-bangkok/tmp/sockets
      - public_data:/findpro-bangkok/public
    tty: true
    stdin_open: true
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: 'postgres'
Enfin, définissez la base de données dans database.yml. Puisque ce temps est un environnement de développement, les paramètres jusqu'au développement sont décrits.

# PostgreSQL. Versions 9.1 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On OS X with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  port: 5432
  username: postgres
  password: postgres
  pool: 5
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
  <<: *default
  database: findpro-bangkok_development
###Omis ci-dessous
Il est maintenant temps de démarrer le conteneur créé.
Tout d'abord, allez dans le dossier du projet dans le terminal et exécutez la commande suivante.
[JS-MAC findpro-bangkok]$ docker-compose build
Exécutez la commande suivante une fois la génération réussie.
[JS-MAC findpro-bangkok]$ docker-compose up
Enfin, nous devons créer une base de données Démarrez un autre nouveau terminal et entrez dans le conteneur Rails.
[@JS-MAC findpro-bangkok]$ docker ps #Conteneur de rails(findpro-bangkok_app)Vérifiez l'ID de
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                NAMES
4549423f21ed        findpro-bangkok_nginx   "/bin/sh -c '/usr/sb…"   44 minutes ago      Up 3 seconds        0.0.0.0:80->80/tcp   findpro-bangkok_nginx_1
22ecc47308ae        findpro-bangkok_app     "bundle exec puma"       44 minutes ago      Up 5 seconds                             findpro-bangkok_app_1
755cb83a9bf4        postgres                "docker-entrypoint.s…"   44 minutes ago      Up 5 seconds        5432/tcp             findpro-bangkok_db_1
[@JS-MAC findpro-bangkok]$ docker exec -it 22e /bin/sh #Connectez-vous au conteneur Rails.22e est un acronyme pour l'ID de conteneur d'application.
# rails db:create #Créer une base de données.
Database 'findpro-bangkok_development' already exists
Database 'findpro-bangkok_test' already exists
# rails db:migrate #Effectuer la migration.
Enfin, tapez localhost dans chrome pour confirmer.