Ich möchte die Befehle und die Umgebungskonstruktion zusammenfassen, die ich zum Erstellen eines Portfolios mit Rails benötigte. Dies ist nur auf der Ebene der Portfolioerstellung erforderlich.
terminal
$ docker compose run --rm web <Schienen Befehl>
Die Option --rm ist ein Befehl zum Löschen des Containers nach der Ausführung. Wenn Sie dies nicht anhängen, wird ein unnötiger Container erstellt, der Druck auf den Speicher ausübt. Bringen Sie ihn daher unbedingt an.
terminal
$ docker attach <Name des Webserver-Containers>
Sie können den Kommunikationsstatus überprüfen, indem Sie eine Verbindung zum Standardeingang / -ausgang auf dem Server herstellen. Dieser Befehl wird auch beim Debuggen mit binding.pry verwendet. Bei richtiger Verarbeitung abnehmen. (Wenn Sie Strg + C drücken, wird der Container gelöscht.)
Ctrl + P, Ctrl + Q
terminal
$ docker exec -it <Name des DB-Containers> bash
Aus dem Inneren des Behälters
terminal
$ mysql -u root -p
terminal
$ docker-compose stop
#Dockerfile oder Docker-compose.Nach yml Korrektur
$ docker-compose up -d --build
Zum Ändern von Dockerfile oder docker-compose.yml.
Selbst mit der Option --rm sammeln sich Container und Bilder an, die Sie nicht entwickeln müssen. Hier ist der Befehl, um sie zu löschen.
terminal
docker system prune
terminal
docker container prune
terminal
docker image prune
Dockerfile Zuerst die Docker-Datei. Lesen Sie zuerst das offizielle Dokument. https://docs.docker.com/compose/rails/
Dockerfile
FROM ruby:2.7.1
#Debian-Installation
RUN 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
RUN apt-get update -qq && apt-get install -y nodejs yarn imagemagick mariadb-client vim
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
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"]
Ab Rails 6.0 wurde der JavaScript-Compiler in Webpacker geändert, und Garn, der für die Installation von Webpacker erforderliche Paketmanager, wird installiert.
Installiert, weil ich MiniMagic zum Hochladen von Bildern verwenden wollte. Wenn Sie MiniMagick mit einer Rails-App verwenden möchten, müssen Sie ImageMagick in der Umgebung installieren, in der die Rails-App ausgeführt wird. Das Folgende ist von Read Me von minimagic
ImageMagick or GraphicsMagick command-line tool has to be installed. You can check if you have it installed by running
Installieren Sie, wenn Sie Schienen db: consol verwenden möchten. Es gibt einen Artikel, in dem MySQL-Client steht, aber seien Sie vorsichtig, da er jetzt mit Mariadb-Client vereinheitlicht ist. Dies ist möglicherweise nicht erforderlich, da Sie mit dem obigen Befehl auf die Datenbank zugreifen können
Installieren Sie den Editor nach Bedarf. Nach der Bereitstellung der App in der Produktionsumgebung wollte ich credentials.yml.enc mit dem folgenden Befehl bearbeiten, habe aber zu diesem Zeitpunkt vim verwendet.
terminal
$ docker-compose run -e EDITOR=vim web rails credentials:edit
docker-compose.yml Als nächstes kommt docker-compose.yml
docker-compose.yml
version: "3"
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- 4306:3306
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql-data:/var/lib/mysql
web:
build: .
tty: true
stdin_open: true
#Ein Server läuft bereits, wenn Schienen s.Kann erscheinen. Um dies zu verhindern, rm-f tmp/pids/server.Es ist pid.
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
- bundle:/usr/local/bundle
ports:
- "3100:3000"
depends_on:
- db
volumes:
bundle:
driver: local
mysql-data:
driver: local
docker-compose.yml
db
ports:
- 4306:3306
web
ports:
- 3100:3000
Die Portnummer des Hostcomputers befindet sich links und die Portnummer des Containers rechts. Wenn sich MySQL auf dem Host befindet (LISTEN) oder wenn Sie localhost: 3000 verwenden möchten, setzen Sie die vom Computer verwendeten Portnummern auf 4306 bzw. 3100, da die verwendeten Ports doppelt vorhanden sind. Wenn Sie es nicht tragen, können Sie 3307 oder 10000 verwenden.
docker-compose.yml
command: --default-authentication-plugin=mysql_native_password
Die Standardauthentifizierungsmethode wurde von MySQL 8.0 (caching_sha2_password) geändert. Da die Rails-App sie jedoch noch nicht unterstützt, ändern Sie sie wieder in mysql_native_password.
docker-compose.yml
tty: true
stdin_open: true
Sehr wichtig für das Debuggen. Wenn Sie dies nicht tun, können Sie bind.pry usw. nicht ausführen. tty: true Entspricht der Option -t des Docker-Laufs und ist eine Einstellung, die Pseudo-Terminals aktiviert. Selbst wenn es aktiviert ist, kann es nicht eingegeben werden, daher ist stdin_open: true unten immer als Satz enthalten. stdin_open: true Eine Einstellung, die der Option -i des Docker-Laufs entspricht und die Standardeingabe verbunden hält. Dies ermöglicht die Ausführung von Befehlen.
docker-compose.yml
depends_on:
- db
Steuern Sie die Reihenfolge, in der Container mit abhängigen_on gestartet werden (in diesem Fall db → web).
docker-compose.yml
volumes:
bundle:
driver: local
mysql-data:
driver: local
docker-compose.yml
volumes:
- mysql-data:/var/lib/mysql
volumes:
- .:/myapp
- bundle:/usr/local/bundle
Behalten Sie Daten mit dem zuvor erstellten Datenvolumencontainer bei. Selbst wenn Sie den Container zerstören und neu erstellen, bleiben die Daten in der Datenbank unverändert, und der Gem wird installiert und ist einsatzbereit.
database.yml Schließlich database.yml
database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
host: <%= ENV.fetch("MYSQL_HOST", "db") %>
development:
<<: *default
database: myapp_development
database.yml
encoding: utf8mb4
Ich wollte Piktogramme in der Datenbank registrieren, deshalb habe ich den Zeichencode in utf8mb4 anstelle von utf8 geändert.
Bitte lassen Sie mich wissen, ob es weitere nützliche Einstellungen oder Befehle gibt ^^
https://docs.docker.com/compose/rails/ Einführung in die praktische Containerentwicklung von Docker / Kubernetes https://qiita.com/neko-neko/items/abe912eba9c113fd527e https://qiita.com/chisaki0606/items/68e21d9a31f1eaaeac00 https://qiita.com/nsy_13/items/9fbc929f173984c30b5d