Guía Básica de Docker: Despliegue de Proyectos Backend con Dockerfile y Despliegue Directo

# Eliminar versiones antiguas de docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# Configurar repositorio yum de docker
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Instalar docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Iniciar y habilitar docker
systemctl enable docker --now

# Configurar acelerador
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Comandos Esenciales de Docker

# Ver contenedores en ejecución
docker ps

# Ver todos los contenedores
docker ps -a

# Buscar imágenes
docker search nginx

# Descargar imagen
docker pull nginx

# Descargar versión específica
docker pull nginx:1.26.0

# Ver imágenes locales
docker images

# Eliminar imagen por ID
docker rmi e784f4560448

# Ejecutar nuevo contenedor
docker run nginx

# Detener contenedor
docker stop keen_blackwell

# Iniciar contenedor
docker start 592

# Reiniciar contenedor
docker restart 592

# Ver uso de recursos
docker stats 592

# Ver logs del contenedor
docker logs 592

# Eliminar contenedor
docker rm 592

# Eliminar contenedor forzado
docker rm -f 592

# Ejecutar contenedor en segundo plano
docker run -d --name mynginx nginx

# Ejecutar con mapeo de puertos
docker run -d --name mynginx -p 80:80 nginx

# Entrar al contenedor
docker exec -it mynginx /bin/bash

# Salir del contenedor
exit

# Crear imagen a partir de contenedor
docker commit -m "update index.html" mynginx mynginx:v1.0

# Guardar imagen como archivo
docker save -o mynginx.tar mynginx:v1.0

# Eliminar múltiples imágenes
docker rmi bde7d154a67f 94543a6c1aef e784f4560448

# Cargar imagen desde archivo
docker load -i mynginx.tar 

# Iniciar sesión en docker hub
docker login

# Etiquetar imagen
docker tag mynginx:v1.0 leifengyang/mynginx:v1.0

# Publicar imagen
docker push leifengyang/mynginx:v1.0

Tipos de Almacenamiento

  • Montaje de directorio: -v /app/nghtml:/usr/share/nginx/html
  • Mapeo de volumen: -v ngconf:/etc/nginx

Montaje y Mapeo

docker run -d -p 99:80 \
-v /app/nghtml:/usr/share/nginx/html \
-v ngconf:/etc/nginx \
--name app03 \
nginx

Redes Personalizadas

# Crear red personalizada
docker network create mi_red

# Iniciar contenedores en la red personalizada
docker run -d -p 88:80 --name app1 --network mi_red nginx
docker run -d -p 99:80 --name app2 --network mi_red nginx

# Comunicación entre contenedores
docker exec -it app1 bash

Clúster Maestro-Esclavo de Redis

# Crear red personalizada
docker network create mi_red

# Nodo maestro
docker run -d -p 6379:6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network mi_red --name redis01 \
bitnami/redis

# Nodo esclavo
docker run -d -p 6380:6379 \
-v /app/rd2:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_MASTER_HOST=redis01 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-e REDIS_MASTER_PASSWORD=123456 \
-e REDIS_PASSWORD=123456 \
--network mi_red --name redis02 \
bitnami/redis

Despliegue de Proyecto Backend con Dockerfile

  1. Empaquetar el proyecto en un jar: Maven → Nombre del Proyecto → Lifecycle → package
  2. Verificar mensaje "BUILD SUCCESS" en la consola
  3. Localizar el jar en la carpeta target (usualmente nombre-0.0.1-SNAPSHOT.jar)
  4. Subir el jar al servidor usando rz
  5. Crear archivo Dockerfile en el mismo directorio del jar

Ejemplo de Dockerfile

# Imagen base (SpringBoot 3 requiere jdk17+)
FROM openjdk:17

# Información del autor
LABEL autor=zxd

# Copiar jar al contenedor
COPY aplicacion-0.0.1-SNAPSHOT.jar /aplicacion.jar

# Exponer puerto
EXPOSE 8086

# Comando por defecto
ENTRYPOINT ["java","-jar","/aplicacion.jar"]

  1. Construir imagen: ``` docker build -f Dockerfile -t app_backend:v1.0 .

  2. Ejecutar contenedor: ``` docker run -d -p 8086:8086 --name app_backend app_backend:v1.0

  3. Acceder a la aplicación mediante IP del servidor y puerto

  4. Ver logs en tiempo real: ``` docker logs -f <ID_Contenedor>

    
    

Atcualización del JAR

# Copiar nuevo JAR al contenedor
docker cp target/nueva_app-1.0.1.jar app_contenedor:/usr/app/aplicacion.jar

# Reiniciar contenedor
docker restart app_contenedor

Despliegue sin Docker

# Ejecutar aplicación en segundo plano
sudo nohup java -jar aplicacion-0.0.1-SNAPSHOT.jar > nohup.out 2>&1 &

Desglose del comando de inicio

  • sudo: Ejecutar con privilegios de superusuario
  • nohup: Permite que el comando continúe ejecutándose después de cerrar la sesión
  • java -jar aplicacion-0.0.1-SNAPSHOT.jar: Ejecuta la aplicación Java
  • > nohup.out: Redirige la salida estándar al archivo
  • 2>&1: Redirige el error estándar a la salida estándar
  • &: Ejecuta en segundo plano

Ver logs

sudo cat nohup.out

Gestión de procesos

# Ver proceso usando puerto
sudo lsof -i :8086

# Eliminar proceso por PID
sudo kill -9 2859409

Script de reinicio automático

if pgrep -f aplicacion-1.0.jar > /dev/null; then
    pkill -f aplicacion-1.0.jar
    sleep 2
fi
sudo nohup java -jar aplicacion-1.0.jar > nohup.out 2>&1 &

Etiquetas: Docker contenedores despliegue dockerfile backend

Publicado el 6-6 00:53