[RUBY] Comment créer un environnement Rails 6 avec Docker

introduction

Je vais vous présenter comment créer un environnement Rail 6 avec Docker. Webpack a été introduit à partir de Rails6, et la procédure est un peu différente de Rails5, j'ai donc pris cela en considération.

Page officielle de Docker Quickstart: Compose and Rails

environnement

Docker3 Rails6.0.3 Ruby2.7.1 DB:PostgeSQL

1. Créez les fichiers requis

Cette fois, nous allons créer l'environnement dans un dossier nommé "myapp". Si vous souhaitez modifier le nom, veuillez modifier "myapp" en conséquence.

La structure de fichiers à créer à partir de maintenant est la suivante.

organisation des fichiers


myapp
  --Dockerfile
  --Gemfile
  --Gemfile.lock
  --entrypoint.sh
  --docker-compose.yml

Commencez par créer un dossier.

Terminal


$ mkdir myapp
$ cd myapp

1.1 Dockerfile

Terminal


$ touch Dockerfile

Dockerfile


FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

##nodejs et yarn sont requis lors de l'installation de webpack
#Installer l'outil de gestion des packages de fils
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn

# Node.installer js
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs

RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

1.2 Gemfile

Terminal


$ touch Gemfile

Gemfile


source 'https://rubygems.org'
gem 'rails', '~>6'

1.3 Gemfile.lock

Terminal


$ touch Gemfile.lock

Rien n'est répertorié ici.

1.4 entrypoint.sh

Terminal


$ touch entrypoint.sh

entrypoint.sh


#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

1.5 docker-compose.yml

Terminal


$ touch docker-compose.yml

docker-compose.yml


version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    
    #######ajouter à#########################
    environment:
      POSTGRES_HOST_AUTH_METHOD: 'trust'
    ###################################

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

2. Construisez le projet

2.1 rails new

Terminal


$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle

À propos des options de commande --force: écraser même si le fichier existe --no-deps: ne démarre pas le service lié --database = postgresql: DB spécifie PostgreSQL --skip-bundle: ignorez l'installation du bundle (après avoir créé l'application)

2.2 docker-compose build Maintenant qu'un nouveau Gemfile a été créé, utilisez la commande suivante pour regrouper l'installation.

Terminal


$ docker-compose build

2.3 Modifier les paramètres de connexion en DB

config/database.yml


default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  #####ajouter à#####
  host: db
  username: postgres
  passowrd:
  #############

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

2.4 Confirmation du démarrage du conteneur Docker

Terminal


$ docker-compose up

C'est OK si le conteneur démarre et se connecte au serveur. Je n'ai pas encore créé de base de données, donc j'obtiens l'erreur suivante. スクリーンショット 2020-06-09 10.33.12.png

2.5 Création de DB

Depuis que j'ai pu me connecter au serveur, j'ai créé une base de données. Après la déconnexion avec Ctrl + C

Terminal


  #Arrêtez Docker une fois
$ docker-compose stop
$ docker-compose down
 
  #Création de DB
$ docker-compose run web rake db:create

  #Lancez à nouveau Docker
$ docker-compose up

3. Assurez-vous que le conteneur et le serveur fonctionnent

Si vous vous connectez à [http: // localhost: 3000 /](http: // localhost: 3000 /), vous pouvez confirmer qu'il a démarré correctement. La version est Rails6, Ruby2.7.1 tel que défini. スクリーンショット 2020-06-09 10.36.35.png

Autre

Vous devez utiliser les commandes Docker lors du développement dans Docker.

$ docker-commande compose run web bundle exec rails

Exemple


$ docker-compose run web bundle exec rails g model User
$ docker-compose run web bundle exec rails g controller Homepages index
$ docker-compose run web bundle exec rails g rspec:install 

référence

Page officielle de Docker Quickstart: Compose and Rails Étapes de création d'un environnement Ruby on Rails avec Docker [compatible Rails 6] J'étais accro à la création d'un environnement de développement Rails 6 avec Docker L'image Docker Postgres a changé et ne peut plus être démarrée [Rails] ActiveRecord::NoDatabaseError [Docker]

Recommended Posts

Comment créer un environnement Rails 6 avec Docker
[Rails] Comment créer un environnement avec Docker
Comment créer un environnement Rails + Vue + MySQL avec Docker [dernière version 2020/09]
Comment créer un environnement Docker avec Gradle pour IntelliJ
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ MySQL ~
[Docker] Construction de l'environnement Rails 5.2 avec docker
Créer un environnement Docker avec WSL
Comment créer une API avec GraphQL et Rails
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Sequelize ~
[Environnement Docker] Comment gérer ActiveSupport :: MessageEncryptor :: InvalidMessage
Comment créer un environnement de développement Java avec VS Code
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Créer un environnement local Couchbase avec Docker
Créer un environnement Node.js avec Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Créez un environnement Docker + Laravel avec Laradock
Comment créer CloudStack à l'aide de Docker
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Vue ~
Comment définir des variables d'environnement lors de l'utilisation de Payjp avec Rails
Comment partager des fichiers avec Docker Toolbox
Construction d'environnement de rails avec Docker (apocalypse personnelle)
Construction de Rails 6 et environnement PostgreSQL avec Docker
Construire un environnement Rails 6 + MySQL avec Docker compose
Déployer sur heroku avec Docker (Rails 6, MySQL)
Créer un environnement de développement Wordpress avec Docker
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
[Docker] Construisez l'environnement d'exécution de Jupyter Lab avec Docker
Créer un environnement avec Docker sur AWS
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Le super débutant construit Rails 6 + environnement Postgresql avec Docker jusqu'à la fin
Étapes pour créer un environnement de développement Ruby on Rails avec Vagrant
Comment écrire des rails
Construction de l'environnement Rails Docker
Comment installer Docker
Comment désinstaller Rails
Créer un environnement de développement pour Docker + Rails6 + Postgresql
Comment lier Rails6 Vue (à partir de la construction de l'environnement)
Créez rapidement un environnement de développement WordPress avec Docker
Comment donner votre image à quelqu'un avec Docker
Rails6.0 ~ Comment créer un environnement de développement respectueux de l'environnement