L'auteur, qui n'a aucune expérience pratique de Docker, a résumé le processus de migration de l'environnement de développement de sa propre application Rails vers Docker.
La période jusqu'à la transition était d'environ une semaine, y compris l'apprentissage de base (peut-être aurait-il pu être fait environ la moitié s'il n'y avait pas d'erreurs ...)
J'espère que cela sera utile pour ceux qui veulent toucher Docker et sont coincés avec des erreurs.
**※Mise en garde! ** ** Le format d'authentification par défaut pour MySQL est différent entre les séries 5.0 et 8.0. (Au 18 août 2020) Par conséquent, la description du fichier (docker-compose.yml) requis pour créer Docker diffère selon la version **. ** ** Par conséquent, assurez-vous que la version de MySQL que vous utilisez correspond à la version de MySQL décrite dans la littérature.
Matériel pédagogique: Introduction docker
Introduction Docker est un site pratique gratuit où vous pouvez facilement apprendre les termes et les structures liés à Docker.
Si vous ne savez rien sur Docker, il faut environ une demi-journée à une journée pour faire tout le contenu, alors étudiez grossièrement sur Introduction Docker. recommander.
Il y a trois fichiers à ajouter à une application existante et des fichiers qui doivent être modifiés.
La structure des fichiers est la suivante.
sampleApp ---- Dockerfile #Fichiers à ajouter
|-- docker-compose.yml #Fichiers à ajouter
|-- Gemfile
|-- Gemfile.lock
|-- README.md
|-- Rakefile
|-- app
|-- bin
|-- config ---- application.rb
| |-- boot.rb
| |-- cable.yml
| |-- credentials.yml.enc
| |-- database.yml #Fichier à modifier
| |-- 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
#Spécifiez l'image Docker. Spécifiez la version de l'application que vous utilisez.
FROM ruby:2.5.1
#Installation des packages requis. nœud.Concernant js, une erreur s'est produite dans la description d'origine, elle a donc été corrigée.
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/*
#Créer et définir un répertoire de travail
RUN mkdir /workdir
WORKDIR /workdir
#Création du Gemfile côté hôte (local) ci-dessus/Ajouter à workdir
ADD Gemfile /workdir/Gemfile
ADD Gemfile.lock /workdir/Gemfile.lock
#Installation du bundle Gemfile
#J'ai eu une erreur lorsque je l'ai exécuté sans ENV. BUNDLER_Évité en spécifiant VERSION.
ENV BUNDLER_VERSION 2.1.4
RUN gem install bundler
RUN bundle install
#Tous les répertoires du côté hôte (local) du conteneur Docker/Ajouté sous workdir.
ADD . /workdir
docker-compose.yml
docker-compose.yml
# docker-Spécifie la version de composition. Cette fois'3'utilisation.
version: '3'
#Définissez le conteneur à démarrer. Db dans ce fichier, db-test ,Il définit trois éléments du Web.
services:
db:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password #Le format d'authentification par défaut est mysql_native_Changer de mot de passe. MySQL5.Non requis pour la série 0.
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: appname_development
MYSQL_USER: yuki #Tout utilisateur
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 #Construire un conteneur
$ docker-compose up -d #Démarrage simultané des conteneurs
$ docker-compose run web bundle exec rake db:create #Création de DB
$ docker-compose run web bundle exec rake db:migrate #migration
Si possible, vous devriez pouvoir y accéder à l'adresse http: // localhost: 3000.
Recommended Posts