Je voudrais résumer les commandes et la construction d'environnement dont j'avais besoin pour créer un portfolio avec Rails. Cela n'est nécessaire qu'au niveau de la création de portefeuille.
terminal
$ docker compose run --rm web <commande rails>
L'option --rm est une commande pour supprimer le conteneur après l'exécution. Si vous ne l'attachez pas, un conteneur inutile sera créé et il exercera une pression sur la mémoire, alors assurez-vous de le joindre.
terminal
$ docker attach <Nom du conteneur du serveur Web>
Vous pouvez vérifier l'état de la communication en vous connectant à l'entrée / sortie standard sur le serveur. Cette commande est également utilisée lors du débogage avec binding.pry. Détachez avec un traitement approprié. (Ctrl + C provoquera la chute du conteneur)
Ctrl + P, Ctrl + Q
terminal
$ docker exec -it <nom du conteneur de base de données> bash
De l'intérieur du conteneur
terminal
$ mysql -u root -p
terminal
$ docker-compose stop
#Dockerfile ou docker-compose.Après correction yml
$ docker-compose up -d --build
Pour lors de la modification de Dockerfile ou docker-compose.yml.
Même avec l'option --rm, les conteneurs et les images que vous n'avez pas besoin de développer s'accumulent. Voici la commande pour les supprimer.
terminal
docker system prune
terminal
docker container prune
terminal
docker image prune
Dockerfile Tout d'abord, le Dockerfile. Tout d'abord, lisez le document officiel. https://docs.docker.com/compose/rails/
Dockerfile
FROM ruby:2.7.1
#Installation de Debian
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"]
À partir de rails 6.0, le compilateur JavaScript a été changé en webpacker et yarn, qui est le gestionnaire de packages requis pour installer webpacker, est installé.
Installé parce que je voulais utiliser MiniMagic pour le téléchargement d'images. Si vous souhaitez utiliser MiniMagick avec une application Rails, vous devez installer ImageMagick dans l'environnement où l'application Rails s'exécute. Ce qui suit est tiré de Lisez-moi de minimagic
ImageMagick or GraphicsMagick command-line tool has to be installed. You can check if you have it installed by running
Installez si vous souhaitez utiliser les rails db: consol. Il y a un article qui dit mysql-client, mais attention car il est maintenant unifié à mariadb-client. Cela peut ne pas être nécessaire car vous pouvez accéder à la base de données avec la commande ci-dessus
Installez l'éditeur car vous en aurez besoin. Après avoir déployé l'application dans l'environnement de production, je voulais modifier credentials.yml.enc avec la commande suivante, mais j'ai utilisé vim à ce moment-là.
terminal
$ docker-compose run -e EDITOR=vim web rails credentials:edit
docker-compose.yml Vient ensuite 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
#Un serveur est déjà en cours d'exécution lorsque les rails s.Peut apparaître. Pour éviter cela, rm-f tmp/pids/server.C'est pide.
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
Le numéro de port de la machine hôte est à gauche et le numéro de port du conteneur est à droite. Si MySQL est (LISTEN) sur l'hôte ou si vous souhaitez utiliser localhost: 3000, définissez les numéros de port utilisés par la machine sur 4306 et 3100, respectivement, car les ports utilisés sont dupliqués. Si vous ne le portez pas, vous pouvez utiliser 3307 ou 10000.
docker-compose.yml
command: --default-authentication-plugin=mysql_native_password
La méthode d'authentification par défaut a changé depuis MySQL 8.0 (caching_sha2_password), mais comme l'application Rails ne la prend pas encore en charge, changez-la en mysql_native_password.
docker-compose.yml
tty: true
stdin_open: true
Très important pour le débogage. Si vous ne le faites pas, vous ne pourrez pas effectuer de binding.pry etc. tty: true Correspond à l'option -t de docker run et est un paramètre qui active les pseudo terminaux. Même s'il est activé, il ne peut pas être entré, donc stdin_open: true ci-dessous est toujours inclus comme un ensemble. stdin_open: true Un paramètre qui correspond à l'option -i de docker run et maintient l'entrée standard connectée. Cela permet d'exécuter des commandes.
docker-compose.yml
depends_on:
- db
Contrôlez l'ordre dans lequel les conteneurs sont démarrés avec depend_on (dans ce cas, db → web)
docker-compose.yml
volumes:
bundle:
driver: local
mysql-data:
driver: local
Normalement, si vous recréez le conteneur, toutes les données des fichiers installés et de la base de données du bundle seront supprimées, vous devrez donc reconstruire ou enregistrer les données. C'est trop ennuyeux d'utiliser un conteneur de volume de données. Le conteneur Volume de données est un conteneur qui ne contient que des données et utilise un mécanisme de partage entre conteneurs. Les paramètres pour créer ceci avec le bundle de noms et mysql-data sont comme ci-dessus.
docker-compose.yml
volumes:
- mysql-data:/var/lib/mysql
volumes:
- .:/myapp
- bundle:/usr/local/bundle
Conserver les données à l'aide du conteneur Data Volume créé précédemment. Désormais, même si vous détruisez le conteneur et le reconstruisez, les données de la base de données resteront telles quelles et le Gem sera installé et prêt à être utilisé.
database.yml Enfin 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
Je voulais enregistrer des pictogrammes dans la base de données, j'ai donc changé le code de caractère en utf8mb4 au lieu de utf8.
Veuillez me faire savoir s'il existe d'autres paramètres ou commandes utiles ^^
https://docs.docker.com/compose/rails/ Introduction au développement pratique de conteneurs Docker / Kubernetes https://qiita.com/neko-neko/items/abe912eba9c113fd527e https://qiita.com/chisaki0606/items/68e21d9a31f1eaaeac00 https://qiita.com/nsy_13/items/9fbc929f173984c30b5d
Recommended Posts