Der Autor, der überhaupt keine praktische Erfahrung mit Docker hat, fasste den Prozess der Migration der Entwicklungsumgebung seiner eigenen Rails-Anwendung auf Docker zusammen.
Die Zeit bis zum Übergang betrug ungefähr eine Woche, einschließlich des grundlegenden Lernens (vielleicht hätte es in ungefähr der Hälfte gemacht werden können, wenn es keine Fehler gegeben hätte ...)
Ich hoffe, es ist hilfreich für diejenigen, die Docker berühren möchten und Fehler haben.
**※Hinweis! ** ** ** Das Standardauthentifizierungsformat für MySQL unterscheidet sich zwischen den Serien 5.0 und 8.0. (Stand 18. August 2020) Infolgedessen unterscheidet sich die Beschreibung der Datei (docker-compose.yml), die zum Erstellen von Docker erforderlich ist, je nach Version **. ** ** ** Stellen Sie daher sicher, dass die von Ihnen verwendete MySQL-Version mit der in der Literatur beschriebenen MySQL-Version übereinstimmt.
Unterrichtsmaterialien: Docker für Einführung
Einführung Docker ist eine kostenlose praktische Website, auf der Sie leicht Begriffe und Strukturen in Bezug auf Docker erlernen können.
Wenn Sie nichts über Docker wissen, dauert es ungefähr einen halben Tag bis zu einem Tag, um den gesamten Inhalt zu erstellen. Lesen Sie daher ungefähr unter Introduction Docker. empfehlen.
Es gibt drei Dateien, die einer vorhandenen Anwendung hinzugefügt werden müssen, und Dateien, die geändert werden müssen.
Die Dateistruktur ist wie folgt.
sampleApp ---- Dockerfile #Dateien zum Hinzufügen
|-- docker-compose.yml #Dateien zum Hinzufügen
|-- Gemfile
|-- Gemfile.lock
|-- README.md
|-- Rakefile
|-- app
|-- bin
|-- config ---- application.rb
| |-- boot.rb
| |-- cable.yml
| |-- credentials.yml.enc
| |-- database.yml #Zu ändernde Datei
| |-- environment.rb
| |-- environments
| |-- initializers
| |-- locales
| |-- master.key
| |-- puma.rb
| |-- routes.rb
| |-- spring.rb
| |-- storage.yml
|
|-- config.ru
|-- db
|-- lib
|-- log
|-- package.json
|-- public
|-- storage
|-- test
|-- tmp
|-- vendor
Dockerfile
Dockerfile
#Geben Sie das Docker-Image an. Geben Sie die Version der App an, die Sie verwenden.
FROM ruby:2.5.1
#Installation der erforderlichen Pakete. Knoten.In Bezug auf js ist in der ursprünglichen Beschreibung ein Fehler aufgetreten, der korrigiert wurde.
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*
#Arbeitsverzeichnis erstellen und einrichten
RUN mkdir /workdir
WORKDIR /workdir
#Erstellt die Host-Seite (lokal) Gemfile oben/Zum Arbeitsverzeichnis hinzufügen
ADD Gemfile /workdir/Gemfile
ADD Gemfile.lock /workdir/Gemfile.lock
#Gemfile Bundle installieren
#Ich habe einen Fehler erhalten, als ich es ohne ENV ausgeführt habe. BUNDLER_Durch Angabe von VERSION vermieden.
ENV BUNDLER_VERSION 2.1.4
RUN gem install bundler
RUN bundle install
#Alle Verzeichnisse auf der Hostseite (lokal) des Docker-Containers/Hinzugefügt unter workdir.
ADD . /workdir
docker-compose.yml
docker-compose.yml
# docker-Gibt die Erstellungsversion an. Diesmal'3'verwenden.
version: '3'
#Definieren Sie den zu startenden Container. Db in dieser Datei, db-test ,Es definiert drei der Web.
services:
db:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password #Das Standardauthentifizierungsformat ist MySQL_native_Zum Passwort wechseln. MySQL5.Nicht erforderlich für 0-Serien.
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: appname_development
MYSQL_USER: yuki #Jeder Benutzer
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
volumes:
- ./mysql/mysql_data:/var/lib/mysql
- ./logs:/var/log/mysql
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- "4306:3306"
db-test:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: appname_test
MYSQL_USER: yuki
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
volumes:
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
tmpfs:
- /var/lib/mysql
- /var/log/mysql
web:
build:
context: .
dockerfile: Dockerfile
command: /bin/sh -c "rm -f /workdir/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
tty: true
stdin_open: true
depends_on:
- db
ports:
- "3000:3000"
volumes:
- .:/workdir
database.yml
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: appname_development
username: yuki
password: password
host: db
socket: /tmp/mysql.sock
test:
<<: *default
database: appname_test
host: db-test
username: yuki
password: password
socket: /tmp/mysql.sock
production:
<<: *default
database: <%= ENV['DB_NAME'] %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
host: <%= ENV['DB_HOSTNAME'] %>
python
$ docker-compose build #Container erstellen
$ docker-compose up -d #Gleichzeitiger Start von Containern
$ docker-compose run web bundle exec rake db:create #DB-Erstellung
$ docker-compose run web bundle exec rake db:migrate #Migration
Wenn möglich, sollten Sie unter http: // localhost: 3000 darauf zugreifen können.