Automatizar el despliegue de aplicaciones en contenedores de forma rápida y portable
Colección de todas los archivos que componen nuestra aplicación de software. Estático
Son de solo lectura
Se crean con un Docker File
Ejemplo:
#bajamos un SO/ imagen inicial desde la que partimos
FROM centos:7
# es un paso de creación de imagen
RUN yum –y install httpd
# es el comando que el contenedor ejecuta de forma predeterminada cuando inicia la imagen creada
CMD [“apachectl”,”-DFOREGROUND”]
Instancia de nuestra aplicación en tiempo de ejecución. Dinámico
Ejecuta en tiempo real las tres capas anteriores
Es de Lectura/Escritura
Imágenes
Volúmenes
Redes
Archivo de texto que describe cómo debe construirse una imagen docker. Brinda una forma clara de automatizar la construcción de contenedores.
# Dockerfile
FROM node:16
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
EXPOSE 3030
CMD [ "node", "app.js" ]
Construye una imagen utilizando el Dockerfile
docker build .
Permite asignar un nombre amigable a una imagen
docker tag ccd4f144c764 busyboxplus
Ejecuta un comando en un contenedor
docker run busybox echo "Hello World!"
Ejecuta un comando interactivo en el contenedor
docker run -ti busybox
docker run -v "C:\ingsw:/etc" busybox
docker run -p 80:80 httpd
Descargar imágenes desde repositorio (Por defecto DockerHub)
docker pull busybox
Buscar imágenes en repositorios
docker search jenkins
Ver contenedores en ejecución
docker ps
Ver cambios en contenedores
docker diff 6f8cdfb6976c
Detiene un contenedor en ejecución. Utiliza la señar SIGTERM(15), si el contenedor no se detiene utiliza SIGKILL(9)
docker stop 6f8cdfb6976c
Vuelve a ejecutar un contenedor detenido
docker start 6f8cdfb6976c
Reinicia el contenedor
docker restart 6f8cdfb6976c
Suspende la ejecución del contenedor
docker pause 6f8cdfb6976cdocker unpause 6f8cdfb6976c
Guarda los cambios efectuados en una nueva imagen
docker commit 6f8cdfb6976c someuser/example
Ver las imágenes descargadas en el sistema
docker images
Eliminar contenedores detenidos
docker rm 6f8cdfb6976c
Eliminar imágenes que no estén siendo utilizadas
docker rmi someuser/example
Copia archivos desde el host a la imagen
ADD proyecto.war /app
Establece una variable de entorno. Puede ser accedida desde la aplicación
ENV DEBUG_LVL 3ENV APACHE_LOG_DIR /var/log/apache
Permite establecer el usuario con el que se ejecutará el contenedor. Por defecto se utiliza el usuario root
USER 73
Cambia el directorio de trabajo
WORKDIR /app/
Crea un volumen que será conpartido entre el host y el contenedor o entre otros contenedores
VOLUME /var/www/
Abre un puerto TCP o UDP para la comunicación entre el contenedor y el mundo exterior
EXPOSE 80 443EXPOSE 53/udp
Ejecuta un comando en el contenedor (en tiempo de construcción)
RUN echo Soy un ejemploRUN ["echo", "Soy un ejemplo"]
Ejecuta un comando en el contenedor (en tiempo de ejecución).
Puede ser sobreescrito con docker run
CMD ["echo", "CMD demo"]
Cuando se construye una imagen, se envía el contexto de construcción completo al demonio docker. Con este archivo se marcan los archivos que no serán enviados al demonio docker al construir.
# .dockerignore
.git
*.tmp
Dockerfiles bien escritos mejoran la calidad de nuestra aplicación
Los contenedores pueden ser detenidos, destruídos y recreados con el mínimo de esfuerzo y configuración