¿Quiere ejecutar Jenkins en Docker pero no está seguro de si usar volúmenes o mantener los datos en contenedores? Si Jenkins está en contenedores, ¿cómo se respaldan los datos? ¿Necesita hacer una copia de seguridad de todo el contenedor? ¿Puede la información persistir fuera del contenedor y cómo? El uso de Docker Compose con volúmenes podría ayudarlo a garantizar que sus datos de Jenkins estén seguros incluso si el contenedor de Docker se rompe.
Además de realizar copias de seguridad de los datos, el uso de volúmenes de Docker también le permite compartir datos de Jenkins entre varios contenedores.
Sigue leyendo porque en este artículo aprenderás a ejecutar Jenkins usando Docker y Docker Compose. Aprenderá cómo encontrar y posiblemente hacer una copia de seguridad de los datos de Jenkins dentro y fuera del contenedor de Docker.
Requisitos
Habrá muchos ejemplos de aprendizaje en este artículo. Si desea seguirnos, necesitará:
- Una computadora con Docker y Composición Docker instalado. Las demostraciones de este artículo se realizan en Ubuntu Server 20.04 . Puede usar Docker en Windows o macOS si lo prefiere.
Este artículo no cubre cómo instalar y configurar Docker y Docker Compose. Puede consultar la documentación oficial de Docker. El blog de ATA también tiene muchos artículos relacionados con Docker que quizás también quieras leer.
Ejecutar Jenkins en Docker
Para ejecutar una instancia de Jenkins en Docker, primero debe extraer la imagen de un repositorio. En este ejemplo, la imagen de Jenkins se extrae de Docker Hub . Tiene la opción de descargar la imagen primero antes de crear un contenedor. O también puede ejecutar un contenedor y dejar que Docker descargue la imagen sobre la marcha.
El siguiente comando ejecutará un contenedor de Jenkins usando docker run
dominio. El --name [NAME]
La opción es donde asigna un nombre para el contenedor Docker. Si no se especifica el nombre del contenedor, Docker asigna un nombre aleatorio al contenedor.
El -p [host-port:container-port]
opción significa exponer el puerto o los puertos dentro del contenedor a su computadora host. En el siguiente código, los puertos 8080 y 50000 están expuestos al host de Docker con los mismos números de puerto.
Por último, jenkins/jenkins:lts
significa que el contenedor a ejecutar utilizará jenkins:lts Imagen de Docker del repositorio de Jenkins . Puede cambiar los valores nombre y puerto de host números si es necesario, pero no modifique el contenedor números de puerto.
Copie el código a continuación y ejecútelo en su terminal.
docker run --name my-jenkins-1 -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
Después de ejecutar el comando anterior, Docker comienza a crear un nuevo contenedor. Una vez que el contenedor de Jenkins se esté ejecutando, tome nota de la contraseña de administrador inicial que se muestra en la terminal. La contraseña de administrador es necesaria durante la configuración inicial de Jenkins.
Completar la configuración inicial de Jenkins
Después de que el contenedor de Jenkins entró en estado de ejecución, ahora puede acceder a la página de administración de Jenkins. Si recuerda el comando que usó para crear el contenedor, el número de puerto es 8080. Entonces, para acceder a la instancia de Jenkins, vaya a HTTP://localhost:8080 .
Como puede ver a continuación, la opción Desbloquear Jenkins La página requiere que ingrese la contraseña de administrador inicial. Debería haber copiado la contraseña de administrador inicial previamente. Introduzca la contraseña en Contraseña de administrador cuadro y haga clic en Continuar .
En Personalizar Jenkins página, tendrá la opción de Instalar complementos sugeridos . Estos complementos sugeridos son los complementos que la comunidad de Jenkins suele instalar. Si tiene un conjunto preseleccionado de complementos para instalar, elija Seleccionar complementos para instalar opción.
Para simplificar, Instalar complementos sugeridos es la opción seleccionada para este ejemplo.
Los complementos se instalarán y solo puede esperar hasta que finalice la instalación. Como puede ver a continuación, se están instalando catorce (14) complementos sugeridos. La cantidad de complementos recomendados puede aumentar o disminuir con el tiempo. En el momento en que instaló su instancia de Jenkins, es posible que los complementos sugeridos ya sean diferentes.
Inmediatamente después de que finalice la instalación de los complementos, verá Crear primer usuario administrador página. Esta página es donde creará la primera cuenta de administrador de Jenkins. Rellene todas las casillas según sea necesario y haga clic en Guardar y continuar. Asegúrese de recordar la credencial de administrador que acaba de crear.
En la Configuración de instancia page es donde puede cambiar la URL de la página de administración de Jenkins. El valor de URL normalmente sería la URL real a la que accederán los usuarios de Jenkins. Para este ejemplo, deje el valor predeterminado de http://localhost:8080 y haga clic en Guardar y finalizar .
En la página de configuración final, verá la confirmación de que la configuración de Jenkins está completa. Haga clic en Empezar a usar Jenkins .
Cuando vea el mensaje Bienvenido a Jenkins página, como se muestra a continuación, habrá completado la instalación de Jenkins. En este punto, puede comenzar a configurar Jenkins y crear nuevos elementos o proyectos.
Encontrar los datos de Jenkins en el contenedor
En la sección anterior, creó un contenedor Docker para ejecutar una instancia de Jenkins. Los contenedores Docker, como todo lo demás en una computadora, pueden romperse. Si el contenedor deja de estar disponible por algún motivo, los datos de Jenkins también desaparecerán.
Para comprender mejor la ubicación de los datos de Jenkins, el siguiente código utiliza el docker exec
comando para enumerar el contenido de /var/jenkins_home . El nombre del contenedor de Docker en este ejemplo es my-jenkins-1.
docker exec my-jenkins-1 ls -l /var/jenkins_home
Puede ver a continuación el resultado de ejecutar el comando anterior. El contenido de /var/jenkins_home directorio se enumeran. El /var/jenkins_home El directorio contiene la configuración, los usuarios, los complementos y otros elementos críticos.
Copia de seguridad de los datos de Jenkins del contenedor al host
En este punto, ha confirmado que los datos de Jenkins se encuentran dentro del contenedor. Debe copiar los datos de Jenkins del contenedor al host. Y una vez que los datos de Jenkins estén fuera del contenedor, puede realizar una copia de seguridad.
Es bueno que Docker tenga soporte integrado para copiar archivos entre el contenedor de Docker y el host de Docker. Usando el comando docker cp <container id>:/path/in/container /path/in/host
El siguiente ejemplo utiliza el docker cp
comando para copiar los datos del contenedor my-jenkins-1 en una ubicación de host de Docker. Tenga en cuenta que el contenedor ni siquiera necesita estar ejecutándose para ejecutar este comando con éxito.
docker cp my-jenkins-1:/var/jenkins_home ~/jenkins_backup
La demostración a continuación muestra el comando anterior en acción. Como puede ver, el comando crea automáticamente el directorio de destino.
Ahora que ha extraído los datos de Jenkins del contenedor, tal vez pueda comprimir y archivar toda la carpeta. Es posible que deba realizar la misma tarea cada vez que realice cambios en Jenkins.
Ejecutar Jenkins en Docker con Volume Mount
Para que sus datos de Jenkins sean persistentes y consistentes fuera del contenedor de Docker, debe usar un volumen de Docker .
Como se explicó en la sección anterior, los archivos de configuración de Jenkins se encuentran dentro del contenedor Docker en /var/jenkins_home . Para asegurarse de que los archivos de Jenkins se guarden fuera del contenedor, puede usar -v
opción con docker run
comando.
El siguiente código creará un nuevo contenedor Docker con el nombre my-jenkins-2 . Los puertos 8080 y 50000 estarán expuestos al host. Además, el /var/jenkins_home El directorio dentro del contenedor Docker se montará como un volumen en el host como jenkins_home.
docker run --name my-jenkins-2 -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
Después de ejecutar el comando anterior, se debe crear el nuevo contenedor Docker y entrar en el estado de ejecución. Puede confirmar que el contenedor se está ejecutando con el comando docker ps.
Listado de todos los contenedores en ejecución
Encontrar los datos de Jenkins en el Docker Host
Entonces, ¿dónde está la carpeta de datos de Jenkins ahora? Según el comando que usó para crear el contenedor my-jenkins-2, el volumen montado es jenkins_home . Para saber en qué parte del sistema de archivos se encuentra jenkins_home se puede encontrar la ubicación, use el docker volume
comando.
El siguiente comando mostrará los detalles de jenkins_home volumen en el host Docker.
docker volume inspect jenkins_home
La siguiente captura de pantalla muestra la información sobre jenkins_home volumen como resultado de ejecutar el comando anterior.
Ahora que sabe dónde encontrar los datos de Jenkins, puede confirmar explorando la ubicación del punto de montaje. En este ejemplo, jenkins_home el punto de montaje del volumen está en /var/lib/docker/volumes/jenkins_home/_data .
Ahora que los datos de Jenkins persisten fuera del contenedor, puede hacer una copia de seguridad del directorio para su custodia. Además, incluso si se elimina el contenedor de Jenkins, los datos permanecerán en el host de Docker.
Ejecutar Jenkins usando Docker Compose con Volúmenes
Otra forma de ejecutar Jenkins es usando docker-compose
dominio. Con Docker Compose , puede implementar una o más instancias de Jenkins, si es necesario. Pero antes de hacerlo, debe crear un archivo Docker Compose para cada instancia.
Creación de los archivos Docker Compose
De forma predeterminada, docker-compose
comando lee el archivo con el nombre docker-compose.yml o docker-compose.yaml en el mismo directorio de trabajo donde emite el comando.
Con el editor de texto disponible que elija, abra un nuevo archivo en blanco. Luego, copie el código YAML a continuación, péguelo en su editor y luego guarde el docker-compose.yml archivo.
# docker-compose.yml
version: '3.7'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 8083:8080
- 50003:50000
container_name: my-jenkins-3
volumes:
- ~/jenkins_data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
Este artículo no cubre la anatomía de un archivo de Docker Compose. Puede consultar la documentación oficial de referencia del archivo de composición para comprender mejor qué significa cada configuración en el archivo de composición.
Pero, en este ejemplo, puede desglosar las configuraciones más importantes en ambos archivos de Docker Compose como se indica a continuación.
- imagen :esta es la imagen base que se usará para crear la instancia del contenedor de Docker.
- puertos :aquí es donde se define la asignación de puertos entre el host de Docker y el contenedor.
- volúmenes :estos son los volúmenes asignados entre el host de Docker y el contenedor.
- nombre_contenedor :Este es el nombre que desea asignar al contenedor que está creando. En este ejemplo, el nombre del contenedor es my-jenkins-3 .
Iniciando el contenedor Jenkins usando Docker Compose
Ahora que guardó los dos archivos de Docker Compose, puede usarlos para iniciar las dos instancias del contenedor de Jenkins Docker.
Para iniciar my-jenkins-3 contenedor, use el siguiente comando. Tenga en cuenta que el siguiente comando asume que docker-compose.yml El archivo está en el mismo directorio donde ejecuta el comando.
# Start the my-jenkins-3 container
docker-compose up -d
# Get the initial admin password
docker exec my-jenkins-3 cat /var/jenkins_home/secrets/initialAdminPassword
# Confirm the my-jenkins-3 container is running
docker ps
El mi-jenkins-3 El contenedor se inicia y entra en el estado de ejecución, como puede ver a continuación.
Navegue por la URL http://localhost:8083 usando su navegador para acceder a Jenkins y completar la configuración inicial.
Una vez que haya completado la configuración inicial de Jenkins para my-jenkins-3 contenedor, puede confirmar que la carpeta ~/jenkins_data se llena con los archivos de datos de Jenkins.
Dado que los archivos de datos de Jenkins persisten en el host de Docker, incluso si my-jenkins-3 el contenedor docker se elimina, la configuración sobrevivirá. Para probar aún más la persistencia de la configuración de Jenkins, detenga my-jenkins-3 contenedor usando el siguiente comando.
docker-compose down
Tenga en cuenta que usar downer-compose down
El comando elimina automáticamente el contenedor en sí.
Ahora, inicia my-jenkins-3 de nuevo usando el siguiente comando.
docker-compose up -d
Y cuando acceda a la interfaz web de Jenkins, la primera página que verá es la página de inicio de sesión en lugar de la página de configuración inicial. Descubrirá que se conserva la misma configuración de Jenkins, incluidas sus credenciales de inicio de sesión.
Resumen
En este artículo, aprendió cómo ejecutar Jenkins usando Docker de diferentes maneras. Ha aprendido a ejecutar Jenkins en Docker con y sin un volumen montado. Y aprendió cómo hacer una copia de seguridad de los datos de Jenkins desde el interior del contenedor al host.
También aprendió a ejecutar una instancia de Jenkins con Docker Compose con volúmenes asignados al host de Docker. Los archivos de datos de Jenkins luego se guardan en el host de Docker, lo que hace que la configuración de Jenkins sea persistente y consistente incluso si se elimina el contenedor de Docker.
El uso de Docker y Docker Compose con volúmenes le brinda la flexibilidad de realizar copias de seguridad y, en última instancia, reutilizar los datos de Jenkins. ¿Qué método para ejecutar Jenkins en Docker crees que usarías más?
Lecturas adicionales
- Implementación de su primer contenedor con Docker para Windows
- Cómo crear (y administrar) volúmenes Docker en Windows
- Cómo instalar Ubuntu 20.04 [paso a paso]