# 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
- Empaquetar el proyecto en un jar: Maven → Nombre del Proyecto → Lifecycle → package
- Verificar mensaje "BUILD SUCCESS" en la consola
- Localizar el jar en la carpeta target (usualmente nombre-0.0.1-SNAPSHOT.jar)
- Subir el jar al servidor usando
rz - 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"]
-
Construir imagen: ``` docker build -f Dockerfile -t app_backend:v1.0 .
-
Ejecutar contenedor: ``` docker run -d -p 8086:8086 --name app_backend app_backend:v1.0
-
Acceder a la aplicación mediante IP del servidor y puerto
-
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 superusuarionohup: Permite que el comando continúe ejecutándose después de cerrar la sesiónjava -jar aplicacion-0.0.1-SNAPSHOT.jar: Ejecuta la aplicación Java> nohup.out: Redirige la salida estándar al archivo2>&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 &