Hello,Qiita! :sunny: Cette fois, je vais mettre une application Rails existante sur Docker! C'est aussi simple que de déplacer l'environnement à l'intérieur d'un conteneur, Je suis resté un peu coincé avec l'installation de webpack et de fil, alors j'ai écrit un article! Orchestrons deux conteneurs, Rails et MySQL, avec docker-compose: musical_score: Allons-y! !! : baleine2:
Décrivez comme suit.
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 Obtenez l'image officielle (cette fois Ruby version 2.7.1) depuis Docker Hub.
ENV Définissez les variables d'environnement.
APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
↑ Vous pouvez masquer le message d'avertissement en écrivant ceci
RUN Exécutez la commande sur le conteneur Docker.
apt-get
Cette commande signifie utiliser et gérer les paquets en utilisant la bibliothèque APT (Advanced Package Tool), qui est un système de gestion de paquets pour les distributions basées sur Debian (Debian et Ubuntu). Cette fois j'ai pris l'image de Ruby, mais ruby est installé sur l'image Debian. Puisque Debian utilise le noyau Linux, les commandes Linux peuvent être utilisées.
WORKDIR Définissez le répertoire de travail. Il peut être spécifié plusieurs fois dans le même Dockerfile, et le chemin enregistré dans ENV peut être utilisé.
COPY Copiez le nouveau fichier dans un dossier (les fichiers compressés ne seront pas développés).
ENTRYPOINT Exécutez la commande décrite.
EXPOSE Libérez un port spécifique.
CMD Définissez la valeur par défaut du conteneur à exécuter. Vous ne pouvez utiliser qu'une seule fois__ dans le même Dockerfile et vous pouvez définir un argument pour ENTRYPOINT. Le Dockerfile doit contenir au moins une fois ENTRYPOINT ou CMD. __
Décrivez comme suit.
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" # "Tout port:3000"À
depends_on:
- db
tty: true
stdin_open: true
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: "password"
ports:
- "19801:3306" #moi aussi,":3306"À
volumes:
- ./tmp/db:/var/lib/mysql
version Définissez la version de docker-compose à utiliser.
services
Définissez chaque élément (service) pour exécuter l'application. (Cette fois, app
et db
)
build Exécutez le fichier de composition et spécifiez le chemin lors de sa création.
command Remplacez la commande par défaut.
volumes Spécifiez le chemin du fichier de configuration à monter.
ports Spécifiez le numéro de port lors du lancement de l'image Docker.
depends_on Spécifiez la dépendance entre les services.
environment Spécifiez les variables d'environnement.
tty: true
Réglez le conteneur pour qu'il continue de fonctionner.
stdin_open: true
Définissez les autorisations d'entrée / sortie standard dans le conteneur.
Décrivez comme suit.
entrypoint.sh
#!/bin/bash
set -e
#.Supprimer le fichier pid
rm -f /app/tmp/pids/server.pid
#Exécutez le processus principal du conteneur(Ce qui est défini comme CMD dans le Dockerfile)。
exec "$@"
Décrivez comme suit.
database.yml
default: &default
adapter: mysql2
pool: 5
timeout: 5000 #Tout
development:
<<: *default
database: myapp_development
username: root
password: password
host: db
port: 3306
Cette fois, nous allons mettre l'application existante sur Docker, donc tout ce que nous avons à faire est de nous assurer que Gemfile et Gemfile.lock existent.
Au terminal
docker-compose build
Éxécuter.
Terminal
Successfully built ~
Successfully tagged ~
Est sortie, la construction est réussie.
prochain,
docker-compose exec app bash
Pour entrer dans le conteneur de l'application. ensuite,
bundle exec rails db:create
bundle exec rails db:migrate
bundle exec rails db:seed
Et tu as fini! : des lunettes de soleil:
Merci d'avoir regardé jusqu'à la fin. Personnellement, c'est vraiment amusant de travailler à l'intérieur du conteneur. Je ne sais pas pourquoi. (Cela ressemble à une création) J'apprécierais également que vous me fassiez savoir si vous avez des expressions inappropriées.
À la prochaine! : fusée:
Recommended Posts