Dieses Mal werden wir drei Container erstellen.
【Betriebsumgebung】
OS : macOS 10.14.6
Docker : 19.03.8
ruby : 2.6.5
rails : 5.2.4
[Voraussetzungen] Docker für Mac installiert
Erstellen Sie zunächst einen Docker-Ordner und eine leere Datei. Der Inhalt der Datei wird später beschrieben.
Unten finden Sie die Nginx-Docker-Datei. findpro-bangkok ist der App-Name. Ändern Sie ihn in Ihren eigenen App-Namen.
ruby:Dockerfile:nginx
FROM nginx:1.15.8
#Löschen Sie im Include-Verzeichnis
RUN rm -f /etc/nginx/conf.d/*
#Kopieren Sie die Nginx-Konfigurationsdatei in den Container
COPY /docker/nginx/nginx.conf /etc/nginx/conf.d/findpro-bangkok.conf
#Platzieren Sie öffentliche Dateien wie Bilder in Nginx
RUN mkdir -p /findpro-bangkok/public
COPY ./public /findpro-bangkok/public
#Starten Sie Nginx, nachdem der Build abgeschlossen ist
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
Erstellen Sie die Datei nginx.conf, die die Nginx-Einstellungen beschreibt.
nginx.conf
#Angeben des Proxy-Ziels
#Senden Sie die von Nginx erhaltene Anfrage an das Backend-Puma
upstream puma {
#Ich möchte mit Steckdosen kommunizieren, also Puma.Geben Sie die Socke an
server unix:///findpro-bangkok/tmp/sockets/puma.sock;
}
server {
listen 80 default;
#Geben Sie die Domäne oder IP an
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#Angeben des Dokumentstamms
root /findpro-bangkok/public;
client_max_body_size 100m;
error_page 404 /404.html;
error_page 505 502 503 504 /500.html;
try_files $uri/index.html $uri @puma;
keepalive_timeout 5;
#Proxy-bezogene Einstellungen umkehren
location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://puma;
}
}
Erstellen Sie als Nächstes eine Docker-Datei für Schienen.
Dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && \
apt-get install -y apt-utils \
build-essential \
libpq-dev \
nodejs \
vim
#Ändern Sie Ihren eigenen App-Namen
ENV RAILS_ROOT /findpro-bangkok
RUN mkdir $RAILS_ROOT
WORKDIR $RAILS_ROOT
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN gem install bundler:2.1.4
RUN bundle install
#Kopieren Sie alle Dateien im Projektordner in den Rails-Container
COPY . .
#Erstellen Sie ein Verzeichnis für die Socket-Kommunikation
RUN mkdir -p tmp/sockets
Bearbeiten Sie die Puma-Konfigurationsdatei im folgenden Konfigurationsordner.
puma.rb
threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }.to_i
threads threads_count, threads_count
port ENV.fetch('PORT') { 3000 }
environment ENV.fetch('RAILS_ENV') { 'development' }
plugin :tmp_restart
app_root = File.expand_path('..', __dir__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
Docker-Compose ist ein Mechanismus zum gleichzeitigen Ausführen von Builds mehrerer Container.
Erstellen Sie eine Docker-Compose-Datei direkt unter dem Projektordner.
docker-compose.yml
version: '3'
volumes:
tmp_data:
public_data:
services:
nginx:
build:
context: ./
dockerfile: ./docker/nginx/Dockerfile
ports:
- '80:80'
volumes:
- public_data:/findpro-bangkok/public
- tmp_data:/findpro-bangkok/tmp/sockets
depends_on:
- app
links:
- app
app:
build:
context: ./
dockerfile: ./docker/rails/Dockerfile
command: bundle exec puma
volumes:
#.:/findpro-bangkok synchronisiert den aktuellen Projektordner mit dem Containerordner.Dadurch können die Änderungen im Container übernommen werden, ohne dass sie neu erstellt werden müssen..
- .:/findpro-bangkok:cached
#tmp auf dem Host-Computer für die Socket-Kommunikation mit nginx_Erstellen Sie eine Datei mit dem Namen data und geben Sie sie für den Nginx-Container frei.
- tmp_data:/findpro-bangkok/tmp/sockets
- public_data:/findpro-bangkok/public
tty: true
stdin_open: true
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: 'postgres'
Legen Sie abschließend die Datenbank in database.yml fest. Da es sich bei dieser Zeit um eine Entwicklungsumgebung handelt, werden die Einstellungen bis zur Entwicklung beschrieben.
# PostgreSQL. Versions 9.1 and up are supported.
#
# Install the pg driver:
# gem install pg
# On OS X with Homebrew:
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
adapter: postgresql
encoding: unicode
host: db
port: 5432
username: postgres
password: postgres
pool: 5
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: findpro-bangkok_development
###Unten weggelassen
Jetzt ist es Zeit, den erstellten Container zu starten.
Wechseln Sie zunächst zum Projektordner im Terminal und führen Sie den folgenden Befehl aus.
[JS-MAC findpro-bangkok]$ docker-compose build
Führen Sie den folgenden Befehl aus, nachdem der Build erfolgreich war.
[JS-MAC findpro-bangkok]$ docker-compose up
Schließlich müssen wir eine Datenbank erstellen Starten Sie ein anderes neues Terminal und betreten Sie den Rails-Container.
[@JS-MAC findpro-bangkok]$ docker ps #Schienencontainer(findpro-bangkok_app)Überprüfen Sie die ID von
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4549423f21ed findpro-bangkok_nginx "/bin/sh -c '/usr/sb…" 44 minutes ago Up 3 seconds 0.0.0.0:80->80/tcp findpro-bangkok_nginx_1
22ecc47308ae findpro-bangkok_app "bundle exec puma" 44 minutes ago Up 5 seconds findpro-bangkok_app_1
755cb83a9bf4 postgres "docker-entrypoint.s…" 44 minutes ago Up 5 seconds 5432/tcp findpro-bangkok_db_1
[@JS-MAC findpro-bangkok]$ docker exec -it 22e /bin/sh #Melden Sie sich beim Rails-Container an.22e ist eine Abkürzung für App Container ID.
# rails db:create #Erstellen Sie eine Datenbank.
Database 'findpro-bangkok_development' already exists
Database 'findpro-bangkok_test' already exists
# rails db:migrate #Führen Sie die Migration durch.
Geben Sie abschließend localhost in Chrome ein, um dies zu bestätigen.