¿What is DevOps?
Laboratorio básico
Objetivo
- Mostrar las partes fundamentales de la cultura DevOps.
- Llevaremos a cabo un ejercicio básico para construir una imagen básica de Laravel con Docker.
- Se mostrará y llevará a cabo el proceso de automatización del Build en un repositorio de Gitlab.
Requisitos
- Computadora o Máquina virtual Ubuntu Server 20.04.
- Conexión a Internet.
- Cuenta de Gitlab. (Registrate).
- Visual studio code
- Docker. (Instalacion)
- Git. (Instalacion)
1.- Instalación de Docker en Ubuntu Server 20.04
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
exit
2.- Realizar una conexión por SSH a la máquina virtual o desde visual studio code.
Para visual studio code es necesario la extensión RemoteSSH.
Desde una terminal con el comando:
ssh usuario@host/ip (ejemplo: ssh user1@localhost, ssh user2@1.2.3.4)
3.- Clonar repositorio de laravel
git clone https://github.com/laravel/laravel.git
Modificar el nombre del archivo .env.example a .env
4.- Crear el archivo Dockerfile
Contenido del archivo:
#Imagen Base
FROM php:8.1.4-apache
# Habilitar mod_rewrite de apache
RUN a2enmod rewrite
#Actualizar e instalar dependencias y paquetes
RUN apt-get update && apt-get install -y \
zlib1g-dev \
libicu-dev \
libxml2-dev \
libpq-dev \
libzip-dev \
libpng-dev \
cron \
&& docker-php-ext-install pdo pdo_mysql zip intl soap opcache gd \
&& docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd
RUN apt-get update -y
#Copiar el binaro de composer
COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
#Cambiar uid y gid de apache a el uid/gid del usuario de docker
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
#Cambie el web_root a /var/www/html/public
RUN sed -i -e "s/html/html\/public/g" /etc/apache2/sites-enabled/000-default.conf
#Copia el contenido del repositorio a la ruta /var/www/html
COPY . /var/www/html/
WORKDIR /var/www/html/
#Cambia el owner de la ruta e inicia la instalacion de paquetes con composer
RUN chown -R www-data:www-data /var/www/html \
&& composer install --ignore-platform-req=ext-gd && composer dumpautoload
5.- Hacer el build de la imagen de forma manual.
Sintaxis:
docker build -t <image_name> .
-t es para poner un tag o nombre a la imagen, el punto (.) es para que identifique el Dockerfile en el mismo nivel del directorio donde esta ejecutando el comando
Ejemplo:
docker build -t laravel-image .
Ejecutar un contenedor
Sintaxis:
docker run -d –name <container_name> -p <porthost>:<portcontainer> <image_name>
-d : Ejecutar contenedor en segundo plano.
–name: nombre del contenedor.
-p : mapeo de puertos.
Ejemplo:
docker run -d –name laravel-app -p 8080:80 laravel-image
En laravel es necesario generar el APP_KEY con el siguiente comando:
Sintaxis:
docker exec -it <container_name> <command_inside_container>
Ejemplo:
docker exec -it laravel-app php artisan key:generate
Abrir el navegador en esta url:
http://localhost:8080 ó http://ipservidor:8080 ó http://ipmaquinavirtual:8080
6.- Crear el repositorio en gitlab
7.- Subir a Gitlab el repositorio actual
Sintaxis:
git remote add <nombre> https://gitlab.com/<user>/<repo_name>.git
Ejemplo:
git remote add gitlab https://gitlab.com/vvalenzuela/laravel-test.git
git branch -M master
git push -uf gitlab master
8.- Crear archivo para la build de la imagen de docker.
Se crea el archivo .gitlab-ci.yml
Contenido del archivo:
build_to_prod:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build --pull -t "$CI_REGISTRY_IMAGE":"$CI_COMMIT_SHORT_SHA" -t "$CI_REGISTRY_IMAGE":latest .
- docker push "$CI_REGISTRY_IMAGE":"$CI_COMMIT_SHORT_SHA"
- docker push "$CI_REGISTRY_IMAGE":latest
only:
- master
deploy_to_prod:
stage: deploy
image:
name: bitnami/kubectl
entrypoint: [""]
script:
- echo “Deployment Complete”
only:
- master
9.- Ejecutar contenedor con la nueva imagen del registry de gitlab
docker login registry.gitlab.com
- username:
- password:
docker run -d –name laravel-app2 -p 8888:80 registry.gitlab.com/vvalenzuela/laravel-test
Abrir el navegador en esta url:
http://localhost:8888 ó http://ipservidor:8888 ó http://ipmaquinavirtual:8888