Docker est un projet open source qui fournit une plate-forme ouverte aux développeurs et aux administrateurs système pour créer, empaqueter et exécuter des applications n'importe où en tant que conteneur léger. Docker automatise le déploiement d'applications dans des conteneurs de logiciels.
Ruby on Rails (RoR) est un framework d'application Web open source, publié sous la licence MIT. Il s'agit d'un framework d'application Web côté serveur qui suit le concept MVC (Model-View-Controller).
Dans ce didacticiel, je vais vous montrer comment configurer un environnement de développement pour les applications Ruby on Rails à l'aide de Docker et de Docker compose. Nous utiliserons Ubuntu 18.04 comme système d'exploitation hôte et utiliserons la base de données PostgreSQL pour notre projet Rails.
Ce que nous allons faire :
- Installer Docker et Docker Compose
- Générer le projet Rails
- Configurer le projet Rails
- Créer un script de composition Docker
- Créer le projet
- Tester la création d'un CRUD de base sur des rails
Étape 1 - Installer Docker et Docker Compose
La première étape que nous devons faire est d'installer le docker et le docker se compose. Nous allons installer le docker à partir du référentiel officiel de docker et installer le docker-compose à partir du projet officiel de docker GitHub.
Avant d'installer les packages Docker, exécutez la commande apt ci-dessous pour installer les dépendances des packages.
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Ajoutez maintenant la clé Docker et le référentiel Docker.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
La commande mettra automatiquement à jour tous les référentiels du système. Une fois terminé, installez les packages docker-ce.
sudo apt install -y docker-ce
Attendez l'installation de docker-ce, puis démarrez le service docker et ajoutez-le au démarrage.
sudo systemctl start docker
sudo systemctl enable docker
Le Docker est opérationnel sur le système.
Ensuite, installez le docker-compose en téléchargeant le fichier binaire directement depuis le dépôt docker GitHub.
Téléchargez le fichier binaire docker-compose dans le répertoire '/usr/local/bin/' et faites-en un exécutable.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Docker et docker-compose ont été installés sur le système, vérifiez la version à l'aide des commandes ci-dessous.
docker version
docker-compose version
Ci-dessous le résultat.
Étape 2 - Générer le projet Ruby on Rails
Après avoir installé les packages de base docker et docker-compose sur le système, nous souhaitons créer un nouvel utilisateur, puis générer le projet Rails à l'aide des images docker.
Ajoutez un utilisateur nommé 'hakase' et donnez-lui un mot de passe.
useradd -m -s /bin/bash hakase
passwd hakase
Ajoutez l'utilisateur au groupe 'sudo' et 'docker' et connectez-vous au shell utilisateur 'hakase'.
usermod -a -G sudo hakase
usermod -a -G docker hakase
su - hakase
Maintenant, l'utilisateur 'hakase' peut exécuter et lancer la commande docker.
Ensuite, nous allons créer un nouveau répertoire "rails" pour notre projet Ruby on Rails.
Créez le répertoire 'rails' et allez-y.
mkdir -p ~/rails
cd ~/rails/
Exécutez maintenant la commande 'docker run' ci-dessous.
docker run --rm -v ${PWD}:/usr/src -w /usr/src -ti ruby:alpine sh ; cd app
La commande exécutera le conteneur temporaire basé sur l'image ruby:alpine, montera le répertoire local dans le répertoire '/usr/src' à l'intérieur du conteneur, puis exécutera la commande shell 'sh' et accédera au répertoire 'app'.
À l'intérieur du conteneur, installez les packages 'build-base'.
apk add build-base
Installez maintenant le Ruby on Rails à l'intérieur du conteneur temporaire.
gem install -N rails
Et générez le nouveau projet Rails nommé 'app' avec PostgreSQL comme base de données, puis quittez/déconnectez-vous du conteneur.
rails new app --database=postgresql --skip-bundle
exit
Et vous serez sur le répertoire du projet Rails 'app'.
Remplacez maintenant le propriétaire du répertoire de projet 'app' par l'utilisateur 'hakase'.
sudo chown -R hakase:hakase ~/rails/app/
ls -lah
Et le projet Ruby on Rails a été généré via le conteneur docker temporaire.
Étape 3 - Configurer le projet Rails
Dans cette étape, nous allons créer un nouveau Dockerfile pour nos applications Rails.
Dans le répertoire 'rails', créez un nouveau Dockerfile à l'aide de vim.
vim Dockerfile
Collez la configuration ci-dessous.
FROM ruby:alpine RUN apk update RUN apk add build-base nodejs postgresql-dev tzdata RUN gem install -N rails RUN mkdir -p /app WORKDIR /app COPY ./app/Gemfile /app COPY ./app/Gemfile.lock /app RUN bundle install --binstubs
Enregistrez et quittez.
Nous créons une nouvelle image docker basée sur le Linux Ruby Alpine. Nous installons de nouveaux packages pour l'installation des rails, créons un nouveau répertoire /app, copions le Gemfile et le Gemfile.lock à partir du répertoire local de l'application, et installons tous les packages basés sur le Gemfile.
Ensuite, allez dans le répertoire 'app', créez un nouveau fichier Gemfile.lock.
cd app/
touch Gemfile.lock
Modifiez le fichier 'database.yml'.
vim config/database.yml
Modifiez la configuration de la base de données par défaut et modifiez les détails comme ci-dessous.
default: &default adapter: postgresql encoding: unicode host: db username: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
Enregistrez et quittez.
La configuration du projet Rails est terminée.
Étape 4 - Créer un fichier de composition Docker
Dans cette étape, nous allons créer un nouveau fichier docker-compose pour notre application Rails. Nous ne créerons que deux services db database PostgreSQL et web est l'application rails elle-même.
Créez un nouveau fichier 'docker-compose.yml' dans le répertoire 'rails'.
vim docker-compose.yml
Et collez la configuration ci-dessous.
version: '3.6' services: db: image: postgres:alpine volumes: - ./postgresql:/var/lib/postgresql/data web: build: . volumes: - ./app:/app working_dir: /app command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - 80:3000 depends_on: - db
Enregistrez et quittez.
Créez maintenant le répertoire 'postgresql' dans le projet 'rails'.
mkdir -p ~/rails/postgresql
Et nous sommes prêts à construire notre projet Rails.
Étape 5 - Construire le projet
Créez l'image du menu fixe Rails à l'aide de la commande docker-compose ci-dessous.
docker-compose build
La commande téléchargera l'image Ruby Alpine Linux et créera l'image personnalisée dont nous avons besoin en fonction de notre Dockerfile.
Générez la base de données PostgreSQL pour le projet.
docker-compose run web rake db:create
Maintenant, ouvrez les services 'db' et 'web'.
docker-compose up -d
Et les services rails sont opérationnels, vérifiez-le à l'aide de la commande docker-compose ci-dessous.
docker-compose ps
Vous pouvez voir que le service 'web' s'exécute sur le port '80' sur l'hôte.
Vérifiez maintenant les images docker sur notre système.
docker-compose images
Et vous obtiendrez le résultat ci-dessous.
Ouvrez maintenant votre navigateur Web et saisissez l'adresse IP ou le nom de domaine du serveur. Le mien est :
http://rails.hakase-labs.io/
Et vous obtiendrez l'application de page Rails par défaut dessus.
Nous sommes maintenant prêts à développer notre projet Rails.
Étape 6 - Tester la création de CRUD de base sur les rails
Générez un CRUD simple sur des rails en exécutant la commande rails dans le service de conteneur 'web'.
docker-compose exec web rails g scaffold Post title:string body:text
Générez maintenant la base de données.
docker-compose exec web rake db:migrate
Ouvrez maintenant votre navigateur Web et tapez l'adresse IP du serveur dans la barre d'adresse avec le chemin '/ posts'. Le mien est :
http://rails.hakase-labs.io/posts
Et vous obtiendrez la page CRUD simple comme ci-dessous.
Tapez le message et cliquez sur le bouton "Créer un message".
Et vous obtiendrez le résultat ci-dessous.
La configuration de l'environnement de développement pour Ruby on Rails avec Docker et Docker Compose s'est terminée avec succès.