Ich wollte Docker ansprechen, also habe ich beschlossen, die oben genannte Umgebung zu erstellen. Ich wiederholte Versuch und Irrtum, weil ich keine Vorkenntnisse hatte ... Ich habe es jedoch geschafft, es zu bauen, also werde ich eine Notiz hinterlassen. Ich habe den Notizen und Erklärungen für die Teile, die ich nicht gut verstanden habe, "?" Hinzugefügt.
Bereiten Sie einen Ordner mit einem beliebigen Namen vor, und hier ist es "my_app".
$ mkdir my_app
Bereiten Sie die folgenden Dateien in my_app
vor
$ touch xxx(Erforderlicher Dateiname)
- my_app
- .dockerignore
- Dockerfile
- docker-compose.yml
- Gemfile
- Gemfile.lock
- entrypoint.sh
Bearbeiten Sie jede Datei wie folgt.
.dockerignore Verhindert, dass lokale Module und Debug-Protokolle in das Docker-Image kopiert werden. Die erforderlichen Module unterscheiden sich zwischen der Mac-Umgebung und der Linux-Umgebung in Docker ... Ist es das? Ohne dies erhalte ich jedenfalls einen Fehler in Bezug auf Node.js 12.x.
.dockerignore:.dockerignore
node_modules
npm-debug.log
.Dockerfile Installieren Sie postgresql und Garn sowie Node.js, die für rails6 Webpacker erforderlich sind. Ich kann jeden der aufgelisteten Befehle nur grob verstehen (Fu) Ich denke ich muss lernen ...
Dockerfile
FROM ruby:2.7.1
#Erforderliche Bibliotheksinstallation
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
#Installieren Sie das Garnpaket-Verwaltungstool
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.installiere js
RUN curl -SL https://deb.nodesource.com/setup_12.x | bash
RUN apt-get install -y nodejs
#Erstellen Sie einen Arbeitsordner in einem Container
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 und Verbindungseinstellungen
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 Hier sind der in Postgresql verwendete Benutzername und das Passwort "postgres". Es gibt "Web" und "DB" im 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 Sie müssen den Inhalt nicht bearbeiten, sondern nur die Datei generieren.
entrypoint.sh
entrypoint.sh
#!/bin/bash
set -e
#Der Server, der seit dem letzten Start des Rails-Servers geblieben ist.Verarbeitung zum Löschen von PID?
rm -f /my_app/tmp/pids/server.pid
#Führen Sie den Hauptprozess des Containers aus(Von CMD in Dockerfile angegebener Befehl)
exec "$@"
run
baut das Web alleine auf? Und läuft Rails new
im Webcontainer
$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle
--no-deps
: Starten Sie den verknüpften Dienst nicht (starten Sie die mit dem Web verknüpfte Datenbank jetzt nicht?)
--skip-bundle
: Bundle nicht ausführen
bundle install Das Gemfile wurde mit den vorherigen "Rails New" umgeschrieben. Wenn Sie das Image erstellen, wird auch die Bundle-Installation ausgeführt. Führen Sie daher den folgenden Befehl aus.
$ docker-compose build
Ich denke, der Arbeitsordner enthält bereits eine Reihe bekannter Rails-Dateien
Bearbeiten Sie config / database.yml
wie folgt.
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
#docker-compose.Stimmen Sie mit dem in yml geschriebenen Postgresql-Benutzernamen und -Kennwort überein
username: postgres
password: postgres
pool: 5
development:
<<: *default
database: my_app_development
test:
<<: *default
database: my_app_test
Führen Sie "Bundle Exec Rails Webpacker: Install" im Webcontainer aus.
$ docker-compose run web bundle exec rails webpacker:install
In meinem Fall tritt beim Starten des Servers ein Fehler auf, wenn ich diese Einstellung nicht vornehme. Bearbeiten Sie die von "Rails Webpacker: Install" generierte "config / webpacker.yml" wie folgt:
config/webpacker.yml
development:
dev_server:
host: webpacker
hmr: true
Fügen Sie außerdem den folgenden Code zu config / environment / development.rb
hinzu.
Aber vielleicht ist dieser Prozess allein nicht notwendig.
config/environments/development.rb
config.webpacker.check_yarn_integrity = false
$ docker-compose up
An dieser Stelle können Sie auf http: // localhost: 3000 /
zugreifen.
Ein Fehlerbildschirm wird angezeigt, da die Datenbank noch nicht erstellt wurde.
Es ist wirklich rudimentär, aber es war ein langer Weg, also war ich ziemlich ungeduldig (lacht)
$ docker-compose run web rails db:create
Wenn Sie "Yay! Sie sind auf Schienen!" Unter "http: // localhost: 3000 /" sehen, sind Sie erfolgreich! Wenn Sie unnötige Docker-Images oder -Container erstellt haben, löschen Sie diese bitte selbst.
Ich denke, es gibt viele Punkte, die für den ersten veröffentlichten Artikel nicht erreicht werden können. Vielen Dank, dass Sie bis zum Ende bei uns bleiben. Wenn Sie Fehler im Artikel finden, lassen Sie es uns bitte wissen.
Aufbau der Docker + Rails6 + PostgreSQL-Umgebung Problem und Lösung, dass der Container unmittelbar nach dem Zusammenstellen des Dockers aufgrund eines Garnfehlers abstürzt Make Node.js Web Application Docker Ich möchte eine vorhandene Rails6-App mit einer Kombination aus Docker und Webpacker verwenden Docker-Compose Ich habe den Unterschied zwischen 'up', 'build' und 'start' nicht verstanden, also habe ich ihn zusammengefasst.
Recommended Posts