Erstellen Sie mit Docker eine Ruby2.7.x + Rails6.0.x + MySQL8.0.x-Umgebung

Die von Beispiel im Docker erstellte Umgebung war Ruby2.5 + Rails5 + PostgreSQL, das alt und PostgreSQL war. Es wird für jede neue Version, Ruby2.7 & Rails6.0 & MySQL8.0, neu geschrieben.

Datei vorbereiten

  1. Dockerfile

1. Vorbereitung der Docker-Datei

FROM ruby:2.7
# or latest

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

#Garn einlegen
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. Vorbereitung von Gemfile

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

3. Bereiten Sie Gemfile.lock vor

$ 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. Vorbereitung von 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. Bereiten Sie docker-compose.yml vor

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. Bereiten Sie .env vor

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

Damit ist die Dateivorbereitung abgeschlossen. Folgendes habe ich bisher beschrieben. https://github.com/madai0517/rails6-mysql8_docker


Build-Ausführung

rails new

$ docker-compose run web rails new . --force --no-deps --database=mysql --webpacker --skip-test
$ sudo chown -R $USER:$USER . #Erforderlich für Linux. Nicht erforderlich, wenn Sie einen Mac verwenden

DB-Verbindungseinstellungen

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'] %>

Starten Sie, erteilen Sie DB-Benutzern Berechtigungen, erstellen Sie DB

$ 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

Damit ist der Umgebungsaufbau abgeschlossen. Sie sollten in der Lage sein, den üblichen Bildschirm zu sehen, indem Sie auf http: // localhost: 3000 / zugreifen. スクリーンショット 2020-06-08 3.07.23.png

Recommended Posts

Erstellen Sie mit Docker eine Ruby2.7.x + Rails6.0.x + MySQL8.0.x-Umgebung
Erstellen Sie eine Umgebung mit Docker unter AWS
[Rails] So erstellen Sie eine Umgebung mit Docker
Erstellen Sie mit Docker eine Umgebung für "API-Entwicklung + API-Überprüfung mithilfe der Swagger-Benutzeroberfläche"
Erstellen einer Docker-Umgebung mit WSL
So erstellen Sie mit Docker ~ Vue ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Erstellen Sie mit Docker eine Node.js-Umgebung
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
[Docker] Erstellen Sie die Ausführungsumgebung von Jupyter Lab mit Docker
Erstellen Sie eine Ultra96v2-Entwicklungsumgebung auf Docker 1
Erstellen Sie mit Docker eine TensorFlow-Betriebsüberprüfungsumgebung
So erstellen Sie eine Rails 6-Umgebung mit Docker
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
Erstellen Sie eine E2E-Testumgebung mit Selenium (Java).
Erstellen Sie mit Docker (Ubuntu) eine Mecab-Umgebung (NEologd Dictionary).
Als ich versuchte, mit Docker eine Umgebung für PHP7.4 + Apache + MySQL zu erstellen, blieb ich stecken [Windows & Mac]
[Fehlerbehebung] Tritt auf, wenn versucht wird, mit Docker eine Umgebung für den Frühling zu erstellen
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Erstellen Sie eine Ruby-Debug-Umgebung mit VS Code von Windows 10
Erstellen Sie mit Docker x Cypress eine E2E-Testumgebung
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Erstellen Sie mit Docker ein Android-Image für Orange Pi 4
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Erstellen Sie DynamoDB local mit Docker
So erstellen Sie mit Docker ~ Express ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie die Node.js-Umgebung mit Docker Compose
Erstellen Sie eine Umgebung, in der pip3 mit CentOS7 + Python3 verwendet werden kann
Build Go-Entwicklungsumgebung mit WSL2 + Docker Desktop + VSCode (Remote - Container)
Erstellen Sie mit Pleiades 4.8 eine Tomcat 8.5-Umgebung
Umgebungsbau mit Docker für Anfänger
Ich habe versucht, mit Eclipse + Tomcat eine http2-Entwicklungsumgebung zu erstellen
So erstellen Sie mit Docker ~ MySQL ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Erstellen Sie mit Docker eine SolrCloud-Überprüfungsumgebung