Index
Index
Index
Curso 2023/2024
Índice
1 Docker 1
1.1 STACK de Contenerización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Tecnologías de contenerización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Orquestador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5 Conceptos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5.1 Imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5.2 Contenedor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5.3 Docker Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5.4 Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5.5 Volúmenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Instalación de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7 Imágenes en Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7.1 docker search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7.2 docker pull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7.3 docker images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7.4 docker rmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7.5 docker rmi $(docker images -q) . . . . . . . . . . . . . . . . . . . . . . . . 6
1.8 Creación de contenedores en Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.9 Creación de contenedores en modo interactivo . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.9.1 Creación de un contenedor con Alpine Linux . . . . . . . . . . . . . . . . . . . . . . . . 6
1.9.2 Creación de un contenedor con Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.9.3 Creación de un contenedor con Nginx . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.10 Creación de contenedores en modo detached . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.10.1 Creación de un contenedor con Nginx en modo detached . . . . . . . . . . . . . . . . . 8
1.10.2 Creación de un contenedor con MySQL en modo detached . . . . . . . . . . . . . . . . 8
1.10.3 Creación de un contenedor con Adminer en modo detached . . . . . . . . . . . . . . . 8
1.10.4 Creación de un contenedor con PostgreSQL en modo detached . . . . . . . . . . . . . . 8
1.10.5 Creación de un contenedor con pgadmin4 en modo detached . . . . . . . . . . . . . . 8
1.11 Ejecución de comandos en un nuevo contenedor . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.11.1 docker run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.12 Ejecución de comandos en un contenedor que está en ejecución . . . . . . . . . . . . . . . . . 9
1.12.1 docker exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.13 Administración de contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.13.1 docker ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.13.2 docker ps -a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
i
Docker Curso 2023/2024
2 Dockerfile 12
3 Docker Compose 14
3.1 Comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 Referencias 15
5 Licencia 16
iii
Índice de cuadros
iv
1 Docker
Docker es una plataforma de código abierto diseñada para facilitar la creación, implementación y ejecución de
aplicaciones en contenedores.
Un contenedor se puede definir como un entorno ligero, aislado y portable, que contiene todo lo necesario
(código fuente, dependencias, etc.) para ejecutar una aplicación
Un contenedor suele tener un único procesos en ejecución, aunque es posible tener varios.
Una de las ventajas que aporta el uso de contenedores es que garantiza que una aplicación se ejecute de la
misma manera en cualquier entorno.
Referencias:
• ¿Qué es Docker?.
Ejemplos
Docker no es la única tecnología de contenerización que existe. A continuación se enumeran algunas de las más
conocidas.
• Docker
• Podman
• rkt
1
Docker Curso 2023/2024
• LXD
• cri‑o
Referencias:
1.3 Orquestador
• Kubernetes
• Docker Swarm
• Mesos
Referencias:
• ¿Qué es Kubernetes?.
1.4 Plataforma
• OpenShift
• Docker Enterprise Edition
• Rancher
• DC/OS
1.5.1 Imagen
Podemos decir que las imágenes de Docker son una instantánea de un contenedor y que los contenedores se
crean a partir de una imagen.
1.5.2 Contenedor
Un contenedor es una instancia en ejecución de una imagen que puede contener uno o más procesos ejecu‑
tándose. Para crear un contenedor solo hay que iniciar una imagen con el comando docker run.
Docker Hub es un repositorio donde están alojadas las imágenes base que podemos utilizar en nuestros con‑
tenedores. En Docker Hub pueden existir imágenes públicas y privadas.
https://hub.docker.com
También podemos hacerlo desde consola con el comando docker search. Por ejemplo, para buscar todas
las imágenes que contengan la palabra ubuntu usamos el comando:
En Docker Hub podemos encontrar imágenes oficiales y otras que han sido creadas por miembros de la comu‑
nidad Docker para todo tipo de propósitos.
1.5.4 Dockerfile
Ejemplo:
1 #
2 # Nginx Dockerfile
3 #
4 # https://github.com/dockerfile/nginx
5 #
6
7 # Pull base image.
8 FROM dockerfile/ubuntu
9
10 # Install Nginx.
11 RUN \
12 add-apt-repository -y ppa:nginx/stable && \
13 apt-get update && \
14 apt-get install -y nginx && \
15 rm -rf /var/lib/apt/lists/* && \
16 echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
17 chown -R www-data:www-data /var/lib/nginx
18
19 # Define mountable directories.
20 VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/
var/log/nginx", "/var/www/html"]
21
22 # Define working directory.
23 WORKDIR /etc/nginx
24
25 # Define default command.
26 CMD ["nginx"]
27
28 # Expose ports.
29 EXPOSE 80
30 EXPOSE 443
1.5.5 Volúmenes
Los volúmenes son el mecanismo que utiliza Docker para hacer persistentes los datos en un contenedor Doc‑
ker.
Referencia.
En esta sección vamos a ver los comandos básicos para trabajar con imágenes Docker.
1 NAME DESCRIPTION
STARS OFFICIAL
AUTOMATED
2 ubuntu Ubuntu is a Debian-based
Linux operating …sys 8763 [OK]
3 dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-
server and NoVNC 242 [OK]
4 ...
Ejemplo:
Para buscar todas las imágenes que contengan la palabra wordpress ejecutaríamos el siguiente comando.
Ejemplo:
Ejemplo:
Ejemplo:
Para ver el listado de de las imágenes que tenemos descargadas en nuestro equipo, ejecutaríamos el siguiente
comando.
1 docker images
Ejemplo:
El modificador -q nos permite mostrar solamente el identificador de la imagen en el listado de salida. Esta
opción nos será de utilidad cuando quiera eliminar todas las máquinas de forma masiva.
1 docker images -q
1 fcf3e41b8864
2 2d696327ab2e
Este comando nos permite eliminar todas las imágenes que tenemos en local.
• docker run -it: Crea contenedores en modo interactivo que se ejecutan en primer planno y que
nos permiten interactuar con ellos a través de la entrada estándar STDIN.
• docker run -d: Crea contenedores en modo detached con que se ejecutan en segundo plano.
En esta sección vamos a ver algunos ejemplos de cómo crear contenedores en modo interactivo.
Alpine Linux es una distribución Linux muy ligera. La imagen de Alpine Linux para Docker ocupa menos de 5
MB.
El gestor de paquetes de Alpine Linux es apk. En la documentación oficial podemos encontrar más detalles
sobre cómo usarlo.
Ejemplo:
• docker run es el comando que nos permite crear un contenedor a partir de una imagen Docker.
• El parámetro -i nos permite mantener interaccionar con el contenedor a través de la entrada estándar
STDIN.
• Los dos parámetros -it nos permiten usar un contenedor como si fuese una máquina virtual tradicional.
• El parámetro --rm hace que cuando salgamos del contenedor, éste se elimine y no ocupe espacio en
nuestro disco.
Una vez ejecutado el comando anterior nos aparecerá un terminal del contenedor que acabamos de crear.
1 / #
1 apk update
1 exit
Como hemos iniciado el contenedor con el parámetro --rm, al salir del contenedor, éste se elimina y no ocupa
espacio en nuestro disco. Podemos comprobarlo con siguiente comando.
1 docker ps -a
En esta sección vamos a ver algunos ejemplos de cómo crear contenedores en modo detached.
Podemos hacer uso de $(pwd) para indicar que queremos crear el volumen en nuestro directorio actual.
Una vez que la instancia de MySQL está en ejecución podemos crear el contenedor con Adminer.
Este contenedor lanza pgAdmin 4, una aplicación web que nos permite administrar una base de datos Post‑
greSQL.
Por ejemplo, para ejecutar el comando cat /etc/os-release en el contenedor ubuntu haríamos lo si‑
guiente.
1 NAME="Ubuntu"
2 VERSION="18.04.1 LTS (Bionic Beaver)"
3 ID=ubuntu
4 ID_LIKE=debian
5 PRETTY_NAME="Ubuntu 18.04.1 LTS"
6 VERSION_ID="18.04"
7 HOME_URL="https://www.ubuntu.com/"
8 SUPPORT_URL="https://help.ubuntu.com/"
9 BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
10 PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-
policy"
11 VERSION_CODENAME=bionic
12 UBUNTU_CODENAME=bionic
El contenedor finaliza su ejecución una vez que ha finalizado la ejecución del comando.
Nos permite ejecutar comandos concretos en un contenedor o abrir un terminal como si fuera una máquina
virtual.
Ejemplo:
Ejemplo:
Podemos lanzar como comando /bin/sh para abrir una consola e interactuar con el contenedor como si fuera
una «máquina virtual».
1.13.1 docker ps
1 docker ps
1.13.2 docker ps -a
Muestra todos los contenedores, los que están ejecución y los que están detenidos.
1 docker ps -a
También puedo detener todos los contenedores que hay en ejecución con el siguiente comando.
1.13.5 docker rm
Para eliminar un contenedor que no está en ejecución referenciado por el nombre wordpress usamos:
1 docker rm wordpress
1 docker rm 99ed74b743ec
Ejemplo:
1 #
2 # Nginx Dockerfile
3 #
4 # https://github.com/dockerfile/nginx
5 #
6
7 # Pull base image.
8 FROM dockerfile/ubuntu
9
10 # Install Nginx.
11 RUN \
12 add-apt-repository -y ppa:nginx/stable && \
13 apt-get update && \
14 apt-get install -y nginx && \
15 rm -rf /var/lib/apt/lists/* && \
16 echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
17 chown -R www-data:www-data /var/lib/nginx
18
19 # Define mountable directories.
20 VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/
var/log/nginx", "/var/www/html"]
21
22 # Define working directory.
23 WORKDIR /etc/nginx
24
25 # Define default command.
26 CMD ["nginx"]
27
28 # Expose ports.
29 EXPOSE 80
30 EXPOSE 443
• FROM: Indica la imagen que vamos a utilizar. Primero buscará la imagen en local y si no la encuentra la
descargará de Internet.
12
Docker Curso 2023/2024
• ENV: Nos permite configurar variables de entorno en el contenedor. Pueden ser sustituidas pasando la
opción ‑env al usar el comando docker run. Ejemplo: docker run -env <key>=<valor>.
• EXPOSE: Indica que el contenedor escucha en los puertos especificados durante su ejecución.
• CMD: Solo puede existir una instrucción CMD en un Dockerfile, si colocamos más de uno, solo el último
tendrá efecto. Esta instrucción nos permite indicar que se ejecuten instrucciones por defecto al iniciar un
contenedor.
• ENTRYPOINT: Nos permite indicar el comando que queremos que se ejecute de forma indefinida
en nuestro contenedor. Si al iniciar un contenedor con docker run hacemos uso del parámetro
-entrypoint podemos omitir los comandos especificados en esta instrucción.
• docker compose down -v. Detiene los contenedores que están en ejecución y elimina los volúme‑
nes.
• docker compose ps -a. Muestra todos los contenedores incluyendo los que están detenidos.
• docker compose logs. Muestra las últimas líneas de los archivos de logs de los contenedores.
• docker compose logs -f. Muestra los logs de los contenedores en tiempo real.
14
4 Referencias
15
5 Licencia
Esta página forma parte del curso Implantación de Aplicaciones Web de José Juan Sánchez Hernández y su
contenido se distribuye bajo una licencia Creative Commons Reconocimiento‑NoComercial‑CompartirIgual 4.0
Internacional.
16