Rails5 + Construction de l'environnement MySQL sur Docker par Docker-compose trop poli (Docker pour Mac) C'est presque le même contenu que. Alors si vous voulez en savoir plus, allez-y. C'est un peu différent, comme différentes versions de mysql ou l'utilisation de volumes de premier niveau.
$ mkdir rails_docker
$ cd rails_docker
$ vi Dockerfile
Dockerfile
FROM ruby:2.7.1
RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       libpq-dev \
                       nodejs \
    && rm -rf /var/lib/apt/lists/*
RUN mkdir /recruit_web
ENV APP_ROOT /recruit_web
WORKDIR $APP_ROOT
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install
ADD . $APP_ROOT
$ vi Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails',  '~> 5.2.4', '>= 5.2.4.4'
$ touch Gemfile.lock
$ vi docker-compose.yml
docker-compose.yml
version: '3'
services:
  db:
    image: mysql:8.0.21
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - rails_docker_network
    environment:
        MYSQL_DATABASE: root
        MYSQL_ROOT_PASSWORD: password
    # mysql8.0 plug-in d'authentification(caching_sha2_password)Mysql_native_Changer de mot de passe
    command: --default-authentication-plugin=mysql_native_password
    container_name: rails_db_container
  web:
    build: .
    depends_on:
      - db
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/recruit_web
    networks:
      - rails_docker_network
    ports:
      - "3000:3000"
    container_name: rails_web_container
volumes:
  db_data:
networks:
  rails_docker_network:
    name: rails_docker_network
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
$ vi /confing/database.yml
database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root #ajouter à
  password: password #ajouter à
  host: db #ajouter à
$ docker-compose build
$ docker-compose up -d
Si vous exécutez la commande suivante, une base de données sera créée et vous pourrez y accéder sur localhost: 3000.
$ docker-compose run web rails db:create
docker-compose.yml
version: '3'
services:
  db:
    image: mysql:8.0.21
    volumes:
      - db_data:/var/lib/mysql
    environment:
        MYSQL_DATABASE: root
        MYSQL_ROOT_PASSWORD: password
    #J'ai eu une erreur si j'ai spécifié ce qui suit
    ports:
      - "3306:3306 
  web:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app_sample
    ports:
      - "3000:3000"
    #J'ai eu une erreur si j'ai spécifié ce qui suit(non recommandé+Je n'en avais pas besoin car le nom serait résolu sans lui)
    links:
      - db
volumes:
  db_data:
Pour une raison quelconque, si vous spécifiez le port public des liens et de la base de données
Mysql2::Error::ConnectionError: Access denied for user 'root'@'172.19.0.4' (using password: YES)
J'étais en colère et j'ai trébuché considérablement. .. ..
Pour le moment, j'ai réalisé que je n'avais pas besoin du port et je l'ai supprimé. À partir du document, les liens semblent pouvoir résoudre le nom même s'il n'est pas obsolète, alors supprimez-le https://docs.docker.com/compose/networking/
J'apprécierais s'il y avait des améliorations.
Recommended Posts