Je voulais parler de Docker, j'ai donc décidé de créer l'environnement ci-dessus. J'ai répété des essais et des erreurs parce que je n'avais aucune connaissance préalable ... Cependant, j'ai réussi à le construire, je vais donc laisser une note. J'ai ajouté «?» Aux notes et aux explications des parties que je ne comprenais pas bien.
Préparez un dossier avec un nom arbitraire, et ici c'est my_app
.
$ mkdir my_app
Préparez les fichiers suivants dans my_app
$ touch xxx(Nom de fichier requis)
- my_app
- .dockerignore
- Dockerfile
- docker-compose.yml
- Gemfile
- Gemfile.lock
- entrypoint.sh
Modifiez chaque fichier comme suit.
.dockerignore Empêche les modules locaux et les journaux de débogage d'être copiés dans l'image Docker. Les modules requis sont différents entre l'environnement Mac et l'environnement Linux sur Docker ... Vraiment? Quoi qu'il en soit, sans cela, j'obtiens une erreur liée à Node.js 12.x.
.dockerignore:.dockerignore
node_modules
npm-debug.log
.Dockerfile Installez postgresql et yarn et Node.js requis pour rails6 Webpacker. Je ne peux comprendre approximativement chacune des commandes répertoriées (Fu) Je pense que j'ai besoin d'étudier ...
Dockerfile
FROM ruby:2.7.1
#Installation de la bibliothèque requise
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
#Installer l'outil de gestion des packages de fils
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 && apt-get install -y yarn
# Node.installer js
RUN curl -SL https://deb.nodesource.com/setup_12.x | bash
RUN apt-get install -y nodejs
#Créer un dossier de travail dans un conteneur
RUN mkdir /my_app
WORKDIR /my_app
COPY Gemfile /my_app/Gemfile
COPY Gemfile.lock /my_app/Gemfile.lock
RUN bundle install
COPY . /my_app
#entrypoint.sh et paramètres de connexion
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
Ici, le nom d'utilisateur et le mot de passe utilisés dans Postgresql sont postgres
.
Il y a «web» et «db» dans le service.
docker-compose.yml
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/my_app
ports:
- "3000:3000"
depends_on:
- db
Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6'
Gemfile.lock Vous n'avez pas besoin de modifier le contenu, générez simplement le fichier.
entrypoint.sh
entrypoint.sh
#!/bin/bash
set -e
#Le serveur qui est resté depuis le dernier démarrage du serveur de rails.Traitement pour effacer pid?
rm -f /my_app/tmp/pids/server.pid
#Exécutez le processus principal du conteneur(Commande spécifiée par CMD dans Dockerfile)
exec "$@"
run
construit le Web seul? Et exécute rails new
dans le conteneur Web
$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle
--no-deps
: ne démarre pas le service lié (ne démarre pas la base de données liée au web maintenant?)
--skip-bundle
: ne pas exécuter le bundle
bundle install
Le Gemfile a été réécrit avec les précédents rails new
.
En construisant 'l'image,
bundle install` est également effectuée, alors exécutez la commande suivante.
$ docker-compose build
Je pense que vous avez déjà un ensemble de fichiers de rails familiers dans votre dossier de travail,
Modifiez config / database.yml
comme suit.
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
#docker-compose.Faites correspondre le nom d'utilisateur et le mot de passe Postgresql écrits en yml
username: postgres
password: postgres
pool: 5
development:
<<: *default
database: my_app_development
test:
<<: *default
database: my_app_test
Exécutez bundle exec rails webpacker: install
dans le conteneur Web.
$ docker-compose run web bundle exec rails webpacker:install
Dans mon cas, si je n'effectue pas ce réglage, une erreur se produira au démarrage du serveur.
Modifiez le config / webpacker.yml
généré par rails webpacker: install
comme suit:
config/webpacker.yml
development:
dev_server:
host: webpacker
hmr: true
Ajoutez également le code suivant à config / environnements / development.rb
.
Mais peut-être que ce processus seul n'est pas nécessaire.
config/environments/development.rb
config.webpacker.check_yarn_integrity = false
$ docker-compose up
À ce stade, vous pouvez accéder à http: // localhost: 3000 /
,
Un écran d'erreur s'affiche car le DB n'a pas encore été créé.
C'est vraiment rudimentaire, mais ça a été un long chemin, donc j'étais assez impatient (rires)
$ docker-compose run web rails db:create
Si vous voyez "Yay! You're on Rails!" À http: // localhost: 3000 /
, vous avez réussi!
Si vous avez créé des images ou des conteneurs de docker inutiles, veuillez les supprimer vous-même.
Je pense qu'il y a de nombreux points qui ne peuvent être atteints pour le premier article publié. Merci de rester avec nous jusqu'à la fin. Si vous trouvez des erreurs dans l'article, veuillez nous en informer.
Construction de l'environnement Docker + Rails6 + PostgreSQL Problème et solution selon lequel le conteneur se bloque en raison d'une erreur Yarn immédiatement après docker-compose up Make Node.js Web Application Docker Je souhaite utiliser une application rails6 existante avec une combinaison de Docker et de Webpacker docker-compose Je n'ai pas compris la différence entre "up", "build" et "start", alors je l'ai résumé.
Recommended Posts