-#Construire le contexte
% mkdir product-register
% cd product-register
-#Gemfile et Gemfile.Créer un verrou
% touch Gemfile Gemfile.lock
-#Édition de Gemfile
% vim Gemfile
product-register/Gemfile
source 'https://rubygems.org'
gem 'rails', '~>5.2'
-#Modification du Dockerfile
% vim Dockerfile
product-register/Dockerfile
FROM ruby:2.5
RUN apt-get update && apt-get install -y && \
buile-essential \
libpq-dev \
nodejs \
postgresql-client \
yarn
WORKDIR /product-register
COPY Gemfile Gemfile.lock /product-register/
RUN bundle install
-#Créer un conteneur
% docker build .
-# docker-compose.Modification de yml
% vim docker-compose.yml
docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- '.:/product-register'
tty: true
stdin_open: true
-#Lancement du conteneur
% docker-compose up -d
-#Lorsque vous travaillez à l'intérieur d'un conteneur
% docker-compose exec web bash
-#Depuis la création de l'application, le paramétrage de la base de données et le bundle sont effectués avec Dockerfile - skip
# rails new . —force —database=postgresql —skip-bundle
-#Confirmez que le contenu de Gemfile a changé du côté hôte
% cat Gemfile
-#J'ai besoin de regrouper l'installation, alors arrêtez-vous une fois
# exit
$ docker-compose down
-# docker-Si vous composez, l'image précédente sera utilisée, alors construisez à nouveau
$ docker-compose up —build -d
% docker-compose exec web bash
-#Démarrer le serveur de rails
$ rails s -b 0.0.0.0
Je peux me connecter avec localhost: 3000, mais j'obtiens une page d'erreur car je n'ai pas défini la base de données.
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
user: postgres
port: 5432
password: <%= ENV.fetch("DATABASE_PASSWORD") %>
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
Puisqu'il n'est pas souhaitable d'écrire le mot de passe directement pour des raisons de sécurité, appelez-le avec une variable d'environnement.
docker-compose.yml
version: '3'
#volume du docker Les données sont enregistrées ici
volumes:
db-data:
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- '.:/product-register'
#Le paramètre de variable d'environnement du conteneur, à l'origine le mot de passe ne doit pas être écrit directement.
environment:
- 'DATABASE_PASSWORD=postgres'
tty: true
stdin_open: true
#Créé une fois le service de base de données créé
depends_on:
- db
#Vous pouvez accéder à db depuis le Web
links:
- db
#conteneur postgres
db:
image: postgres
#Base de données hôte-Stocker les données dans les données
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
% docker-compose up -d
-#Vous pouvez voir que les deux services fonctionnent
Creating product-register_db_1 ... done
Recreating product-register_web_1 ... done
% docker-compose exec web bash
-#Création de DB
# rails db:create
Created database 'product-register_development'
Created database 'product-register_test'
Vous pouvez voir que la base de données a été créée. De là, vous pouvez créer des applications Rails.
-#Créez une application simple avec échafaudage
# rails g scaffold product name:string price:integer vender:string
-#Définir la table créée
# rails db:migrate
-#Démarrez le serveur
# rails s -b 0.0.0.0
Vous pouvez vous connecter avec localhost: 3000 et vous pouvez voir que la page rails est affichée. Vous pouvez vous connecter à des applications créées avec localhost: 3000 / products.
Recommended Posts