Créez un environnement Ruby2.7.x + Rails6.0.x + MySQL8.0.x avec Docker

L'environnement créé par Sample in docker était Ruby2.5 + Rails5 + PostgreSQL, qui était ancien et PostgreSQL. Il est réécrit pour chaque nouvelle version, Ruby2.7 & Rails6.0 & MySQL8.0.

Préparer le fichier

  1. Dockerfile

1. Préparation du Dockerfile

FROM ruby:2.7
# or latest

#nodejs et mysql-client (default-mysql-client)Installation de
RUN apt-get update -qq && apt-get install -y curl apt-transport-https wget nodejs default-mysql-client

#Installer du fil
RUN 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 -qq && apt-get install -y yarn

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"]

2. Préparation de Gemfile

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

3. Préparez Gemfile.lock

$ touch Gemfile.lock
Step 7/14 : COPY Gemfile.lock /myapp/Gemfile.lock
ERROR: Service 'web' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder424702045/Gemfile.lock: no such file or directory

4. Préparation de 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 "$@"

5. Préparez docker-compose.yml

version: '3'
services:
  db:
    image: mysql:8.0 # or lates:
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - ${DB_PORT}:3306
  web:
    build: .
    env_file: .env
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
      - bundle-data:/usr/local/bundle
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  db-data:
  bundle-data:

6. Préparez .env

DB_ROOT_PASSWORD=mysql_root_password
DB_USER=myapp
DB_PASSWORD=myapp_password
DB_PORT=3306

Ceci termine la préparation du fichier. Voici ce que j'ai décrit jusqu'ici. https://github.com/madai0517/rails6-mysql8_docker


Exécution de la construction

rails new

$ docker-compose run web rails new . --force --no-deps --database=mysql --webpacker --skip-test
$ sudo chown -R $USER:$USER . #Requis pour Linux. Non requis si vous êtes sur un Mac

Paramètres de connexion à la base de données

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  host: db

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

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

Démarrer, accorder des autorisations aux utilisateurs de la base de données, créer une base de données

$ docker-compose build
$ docker-compose up -d
$ docker-compose exec db mysql -uroot -p -e"GRANT ALL PRIVILEGES ON *.* TO 'myapp'@'%';FLUSH PRIVILEGES;"
$ docker-compose run web rails db:create

Ceci termine la construction de l'environnement. Vous devriez pouvoir voir l'écran habituel en accédant à http: // localhost: 3000 /. スクリーンショット 2020-06-08 3.07.23.png

Recommended Posts

Créez un environnement Ruby2.7.x + Rails6.0.x + MySQL8.0.x avec Docker
Créer un environnement avec Docker sur AWS
[Rails] Comment créer un environnement avec Docker
Créez un environnement de "développement d'API + vérification d'API à l'aide de Swagger UI" avec Docker
Créer un environnement Docker avec WSL
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Vue ~
Créer un environnement local Couchbase avec Docker
Créer un environnement Node.js avec Docker
Créez un environnement Docker + Laravel avec Laradock
Créer un environnement de développement PureScript avec Docker
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Créer un environnement de développement Wordpress avec Docker
[Docker] Construisez l'environnement d'exécution de Jupyter Lab avec Docker
Créer un environnement de développement Ultra96v2 sur Docker 1
Créer un environnement de vérification des opérations TensorFlow avec Docker
Comment créer un environnement Rails 6 avec Docker
Créer un environnement Laravel / Docker avec VSCode devcontainer
Créez rapidement un environnement de développement WordPress avec Docker
Créer un environnement de test E2E avec Selenium (Java)
Créer un environnement mecab (dictionnaire NEologd) avec Docker (ubuntu)
Quand j'ai essayé de créer un environnement pour PHP7.4 + Apache + MySQL avec Docker, je suis resté bloqué [Windows & Mac]
[Résolution d'erreur] Se produit lors de la tentative de création d'un environnement pour le printemps avec docker
Comment créer un environnement Docker avec Gradle pour IntelliJ
Créer un environnement de débogage Ruby avec VS Code de Windows 10
Créer un environnement de test E2E avec Docker x Cypress
[Note] Créez un environnement Python3 avec Docker dans EC2
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Créer une image Android pour Orange Pi 4 avec Docker
[Docker] Construction de l'environnement Rails 5.2 avec docker
Construire DynamoDB local avec Docker
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
Créez un environnement Vue3 avec Docker!
Créer un environnement Node.js avec Docker Compose
Créer un environnement où pip3 peut être utilisé avec CentOS7 + Python3
Créer un environnement de développement Go avec WSL2 + Docker Desktop + VSCode (Remote --Containers)
Créer un environnement Tomcat 8.5 avec Pleiades 4.8
Construction d'environnement avec Docker pour les débutants
J'ai essayé de créer un environnement de développement http2 avec Eclipse + Tomcat
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ MySQL ~
Créer un environnement de vérification SolrCloud avec Docker