Hello,Qiita! :sunny: Dieses Mal werde ich eine vorhandene Rails-App auf Docker stellen! Es ist so einfach wie das Verschieben der Umgebung in einem Container. Ich habe mich ein wenig mit der Installation von Webpack und Garn beschäftigt, also habe ich einen Artikel geschrieben! Lassen Sie uns zwei Container, Rails und MySQL, mit Docker-Compose orchestrieren: musical_score: Lass uns gehen! !! : whale2:
Beschreiben Sie wie folgt.
Dockerfile
FROM ruby:2.7.1
ENV BUNDLER_VERSION="2.1.4" \
APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn \
TZ=Asia/Tokyo
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs \
mariadb-client \
sudo \
vim && \
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
WORKDIR /app
COPY Gemfile Gemfile.lock /app/
COPY . /app
RUN bundle install -j4 && \
yarn upgrade && \
rails webpacker:install && \
yarn install --check-files
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"]
FROM Holen Sie sich das offizielle Bild (diesmal Ruby Version 2.7.1) von Docker Hub.
ENV Umgebungsvariablen definieren.
APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
↑ Sie können die Warnmeldung ausblenden, indem Sie dies schreiben
RUN Führen Sie den Befehl im Docker-Container aus.
apt-get
Dieser Befehl bedeutet, Pakete mit der APT-Bibliothek (Advanced Package Tool) zu betreiben und zu verwalten, einem Paketverwaltungssystem für Debian-basierte Distributionen (Debian und Ubuntu). Dieses Mal habe ich das Image von Ruby aufgenommen, aber Ruby ist auf dem Debian-Image installiert. Da Debian den Linux-Kernel verwendet, können Linux-Befehle verwendet werden.
WORKDIR Stellen Sie das Arbeitsverzeichnis ein. Es kann mehrfach in derselben Docker-Datei angegeben werden, und der in ENV registrierte Pfad kann verwendet werden.
COPY Kopieren Sie die neue Datei in einen Ordner (komprimierte Dateien werden nicht erweitert).
ENTRYPOINT Führen Sie den beschriebenen Befehl aus.
EXPOSE Geben Sie einen bestimmten Port frei.
CMD Legen Sie den Standardwert des auszuführenden Containers fest. Nur __ einmal __ kann in derselben Docker-Datei verwendet werden, und es ist möglich, ein Argument für ENTRYPOINT festzulegen. Die Docker-Datei sollte mindestens einmal ENTRYPOINT oder CMD enthalten. __ __
Beschreiben Sie wie folgt.
docker-compose.yml
version: '3'
services:
app:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
- ./vendor/bundle:/myapp/vendor/bundle:delegated
ports:
- "19802:3000" # "Beliebiger Port:3000"Zu
depends_on:
- db
tty: true
stdin_open: true
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: "password"
ports:
- "19801:3306" #ich auch,"Beliebiger Port:3306"Zu
volumes:
- ./tmp/db:/var/lib/mysql
version Definieren Sie die zu verwendende Version von Docker-Compose.
services
Definieren Sie jedes Element (jeden Dienst), um die Anwendung auszuführen. (Diesmal app
und db
)
build Führen Sie die Erstellungsdatei aus und geben Sie den Pfad an, wenn sie erstellt wird.
command Überschreiben Sie den Standardbefehl.
volumes Geben Sie den Pfad der Konfigurationsdatei an, die bereitgestellt werden soll.
ports Geben Sie die Portnummer an, wenn Sie das Docker-Image starten.
depends_on Geben Sie die Abhängigkeit zwischen Diensten an.
environment Geben Sie Umgebungsvariablen an.
tty: true
Stellen Sie den Container so ein, dass er weiterläuft.
stdin_open: true
Legen Sie die Standard-Eingabe- / Ausgabeberechtigungen im Container fest.
Beschreiben Sie wie folgt.
entrypoint.sh
#!/bin/bash
set -e
#Rails Server.Entfernen Sie die PID-Datei
rm -f /app/tmp/pids/server.pid
#Führen Sie den Hauptprozess des Containers aus(Was ist in der Docker-Datei als CMD eingestellt?)。
exec "$@"
Beschreiben Sie wie folgt.
database.yml
default: &default
adapter: mysql2
pool: 5
timeout: 5000 #Irgendein
development:
<<: *default
database: myapp_development
username: root
password: password
host: db
port: 3306
Dieses Mal werden wir die vorhandene App auf Docker stellen. Wir müssen also nur sicherstellen, dass Gemfile und Gemfile.lock vorhanden sind.
Am Terminal
docker-compose build
Ausführen.
Terminal
Successfully built ~
Successfully tagged ~
Wird ausgegeben, ist der Build erfolgreich.
Nächster,
docker-compose exec app bash
So geben Sie den App-Container ein danach,
bundle exec rails db:create
bundle exec rails db:migrate
bundle exec rails db:seed
Und du bist fertig! : Sonnenbrille:
Danke, dass du bis zum Ende zugesehen hast. Persönlich macht es wirklich Spaß, im Container zu arbeiten. Ich weiß nicht warum. (Es fühlt sich an wie ein Anfang) Ich würde mich auch freuen, wenn Sie mich wissen lassen könnten, wenn Sie unangemessene Ausdrücke haben.
Wir sehen uns wieder! : Rakete:
Recommended Posts