Docker es un proyecto de código abierto que proporciona una plataforma abierta para desarrolladores y administradores de sistemas para crear, empaquetar y ejecutar aplicaciones en cualquier lugar como un contenedor ligero. Docker automatiza la implementación de aplicaciones dentro de contenedores de software.
Ruby on Rails (RoR) es un marco de aplicación web de código abierto, publicado bajo la licencia MIT. Es un marco de aplicación web del lado del servidor que sigue el concepto MVC (Model-View-Controller).
En este tutorial, le mostraré cómo configurar un entorno de desarrollo para aplicaciones de Ruby on Rails utilizando Docker y Docker compose. Usaremos Ubuntu 18.04 como sistema operativo host y usaremos la base de datos PostgreSQL para nuestro proyecto Rails.
Qué haremos:
- Instalar Docker y Docker Compose
- Generar el proyecto Rails
- Configurar el proyecto Rails
- Crear script de redacción de Docker
- Crear el proyecto
- Prueba Crear CRUD básico en Rails
Paso 1:instalar Docker y Docker Compose
El primer paso que debemos hacer es instalar el docker y docker compose. Instalaremos Docker desde el repositorio oficial de Docker e instalaremos Docker-compose desde el proyecto GitHub de Docker oficial.
Antes de instalar los paquetes de Docker, ejecute el siguiente comando apt para instalar las dependencias de los paquetes.
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Ahora agregue la clave de la ventana acoplable y el repositorio de la ventana acoplable.
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"
El comando actualizará automáticamente todos los repositorios en el sistema. Cuando esté completo, instale los paquetes docker-ce.
sudo apt install -y docker-ce
Espere la instalación de docker-ce y luego inicie el servicio docker y agréguelo al tiempo de arranque.
sudo systemctl start docker
sudo systemctl enable docker
Docker está funcionando en el sistema.
A continuación, instale docker-compose descargando el archivo binario directamente desde el repositorio docker GitHub.
Descargue el archivo binario docker-compose en el directorio '/usr/local/bin/' y conviértalo en un ejecutable.
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 y docker-compose se han instalado en el sistema, verifique la versión usando los comandos a continuación.
docker version
docker-compose version
A continuación se muestra el resultado.
Paso 2:generar el proyecto Ruby on Rails
Después de instalar los paquetes principales docker y docker-compose en el sistema, queremos crear un nuevo usuario y luego generar el proyecto Rails usando las imágenes de docker.
Agrega un usuario llamado 'hakase' y dale una contraseña.
useradd -m -s /bin/bash hakase
passwd hakase
Agregue el usuario al grupo 'sudo' y 'docker' e inicie sesión en el shell de usuario 'hakase'.
usermod -a -G sudo hakase
usermod -a -G docker hakase
su - hakase
Ahora el usuario 'hakase' puede ejecutar y ejecutar el comando docker.
A continuación, crearemos un nuevo directorio 'rails' para nuestro proyecto Ruby on Rails.
Cree el directorio 'rieles' y acceda a él.
mkdir -p ~/rails
cd ~/rails/
Ahora ejecute el siguiente comando 'docker run'.
docker run --rm -v ${PWD}:/usr/src -w /usr/src -ti ruby:alpine sh ; cd app
El comando ejecutará el contenedor temporal basado en ruby:alpine image, montará el directorio local en el directorio '/usr/src' dentro del contenedor y luego ejecutará el comando de shell 'sh' e irá al directorio 'app'.
Dentro del contenedor, instale los paquetes 'build-base'.
apk add build-base
Ahora instale Ruby on Rails dentro del contenedor temporal.
gem install -N rails
Y genere el nuevo proyecto Rails llamado 'aplicación' con PostgreSQL como base de datos, luego salga/cierre sesión del contenedor.
rails new app --database=postgresql --skip-bundle
exit
Y estará en el directorio del proyecto Rails 'aplicación'.
Ahora cambie el propietario del directorio del proyecto 'aplicación' al usuario 'hakase'.
sudo chown -R hakase:hakase ~/rails/app/
ls -lah
Y el proyecto Ruby on Rails se ha generado a través del contenedor docker temporal.
Paso 3:configurar el proyecto Rails
En este paso, crearemos un nuevo Dockerfile para nuestras aplicaciones Rails.
Dentro del directorio 'rails', crea un nuevo Dockerfile usando vim.
vim Dockerfile
Pegue la configuración a continuación.
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
Guardar y salir.
Estamos creando una nueva imagen acoplable basada en Ruby Alpine Linux. Estamos instalando nuevos paquetes para la instalación de Rails, creamos un nuevo directorio /app, copiamos Gemfile y Gemfile.lock del directorio local de la aplicación e instalamos todos los paquetes basados en Gemfile.
A continuación, vaya al directorio 'aplicación', cree un nuevo archivo Gemfile.lock.
cd app/
touch Gemfile.lock
Edite el archivo 'database.yml'.
vim config/database.yml
Cambie la configuración de la base de datos predeterminada y cambie los detalles como se muestra a continuación.
default: &default adapter: postgresql encoding: unicode host: db username: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
Guardar y salir.
La configuración del proyecto Rails se ha completado.
Paso 4:Crear archivo de composición de Docker
En este paso, crearemos un nuevo archivo docker-compose para nuestra aplicación Rails. Solo crearemos dos servicios de base de datos de base de datos PostgreSQL y la web es la aplicación de rieles en sí.
Cree un nuevo archivo 'docker-compose.yml' dentro del directorio 'rails'.
vim docker-compose.yml
Y pegue la configuración a continuación.
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
Guardar y salir.
Ahora cree el directorio 'postgresql' dentro del proyecto 'rails'.
mkdir -p ~/rails/postgresql
Y estamos listos para construir nuestro proyecto Rails.
Paso 5:compilar el proyecto
Cree la imagen de la ventana acoplable Rails con el siguiente comando docker-compose.
docker-compose build
El comando descargará la imagen de Ruby Alpine Linux y creará la imagen personalizada según sea necesario en función de nuestro Dockerfile.
Genere la base de datos PostgreSQL para el proyecto.
docker-compose run web rake db:create
Ahora active los servicios 'db' y 'web'.
docker-compose up -d
Y los servicios de Rails están en funcionamiento, verifíquelo usando el comando docker-compose a continuación.
docker-compose ps
Puede ver que el servicio 'web' se está ejecutando en el puerto '80' en el host.
Ahora verifique las imágenes de la ventana acoplable en nuestro sistema.
docker-compose images
Y obtendrá el resultado como se muestra a continuación.
Ahora abra su navegador web y escriba la dirección IP del servidor o el nombre de dominio. El mío es:
http://rails.hakase-labs.io/
Y obtendrá la aplicación de la página de Rails predeterminada.
Ahora estamos listos para desarrollar nuestro proyecto Rails.
Paso 6:probar la creación de CRUD básico en Rails
Genere CRUD simple sobre rieles ejecutando el comando de rieles dentro del servicio de contenedor 'web'.
docker-compose exec web rails g scaffold Post title:string body:text
Ahora genere la base de datos.
docker-compose exec web rake db:migrate
Ahora abra su navegador web y escriba la dirección IP del servidor en la barra de direcciones con la ruta '/ publicaciones'. El mío es:
http://rails.hakase-labs.io/posts
Y obtendrá la página CRUD simple como se muestra a continuación.
Escriba la publicación y haga clic en el botón 'Crear publicación'.
Y obtendrá el resultado como se muestra a continuación.
La configuración del entorno de desarrollo para Ruby on Rails con Docker y Docker Compose se completó correctamente.