IAW - Docker IES Celia Viñas (Almería) - 2021/2022
Índice general
1 Docker 3
1.1 STACK de Contenerización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Tecnologías de contenerización . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Orquestador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Instalación de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Conceptos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 Imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2 Contenedor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.3 Docker Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.4 Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.5 Volúmenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Comandos para trabajar con imágenes Docker . . . . . . . . . . . . . . . . . . . . . . 6
1.4.1 docker search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4.2 docker pull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.3 docker images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.4 docker rmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.5 docker rmi $(docker images -q) . . . . . . . . . . . . . . . . . . . 9
1.5 Creación de un contenedor con Alpine Linux . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.1 Alpine Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.2 Gestión de paquetes en Alpine Linux . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.3 docker run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6 Creación de un contenedor con Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7 Creación de un contenedor con Nginx . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.1 En modo interactivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.2 En modo detached . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 Creación de un contenedor con MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9 Creación de un contenedor con Adminer . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.10 Creación de un contenedor con PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . 12
1.11 Creación de un contenedor con pgadmin4 . . . . . . . . . . . . . . . . . . . . . . . . 13
1.12 Ejecución de comandos en un nuevo contenedor . . . . . . . . . . . . . . . . . . . . 13
1.12.1 docker run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.13 Ejecución de comandos en un contenedor que está en ejecución . . . . . . . . . . . . 14
1.13.1 docker exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.14 Administración de contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.14.1 docker ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
José Juan Sánchez Hernández 1
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
1.14.2 docker ps -a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.14.3 docker stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.14.4 docker start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.14.5 docker rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.14.6 docker logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.14.7 docker inspect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 Referencias 16
3 Licencia 17
José Juan Sánchez Hernández 2
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
1 Docker
Antes de empezar vamos a situar qué lugar ocupa Docker en el stack de contenerización.
Referencias:
• ¿Qué es Docker?.
1.1 STACK de Contenerización
Ejemplos
Plataforma OpenShift, Docker Enterprise Edition, Rancher, DC/OS
Orquestador Kubernetes, Docker Swarm, Mesos
Motor de contenerización Docker, rkt, LXD, cri-o
Sistema Operativo Windows, Linux, macOS
1.1.1 Tecnologías de contenerización
• Docker
• rkt
• LXD
• cri-o
Referencias:
• ¿Qué es un contenedor de Linux?.
1.1.2 Orquestador
• Kubernetes
• Docker Swarm
• Mesos
Referencias:
• ¿Qué es Kubernetes?.
José Juan Sánchez Hernández 3
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
1.1.3 Plataforma
• OpenShift
• Docker Enterprise Edition
• Rancher
• DC/OS
1.2 Instalación de Docker
Para realizar la instalación de Docker se recomienda seguir la documentación oficial.
Si has instalado Docker sobre Linux, tendrás que realizar alguna configuración adicional. Se recomien-
da seguir la documentación oficial sobre los pasos que hay seguir tras una instalación de Docker en
Linux.
1.3 Conceptos básicos
1.3.1 Imagen
Una imagen es un «paquete ligero», capaz de ejecutarse sin depender de ningún otro software y que
incluye todo lo necesario para ejecutar una aplicación.
Podemos decir que las imágenes de Docker son una instantánea de un contenedor y que los conte-
nedores se crean a partir de una imagen.
James Turnbull las considera en su libro The Docker Book, como el «código fuente» de los contenedo-
res.
1.3.2 Contenedor
Un contenedor es una instancia en ejecución de una imagen que puede contener uno o más proce-
sos ejecutándose. Para crear un contenedor solo hay que iniciar una imagen con el comando docker
run.
1.3.3 Docker Hub
Docker Hub es un repositorio donde están alojadas las imágenes base que podemos utilizar en nues-
tros contenedores. En Docker Hub pueden existir imágenes públicas y privadas.
Para realizar la búsqueda de imágenes podemos hacerlo desde la web oficial:
José Juan Sánchez Hernández 4
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
[Link]
También podemos hacerlo desde consola con el comando docker search. Por ejemplo, para bus-
car todas las imágenes que contengan la palabra ubuntu usamos el comando:
docker search ubuntu
En Docker Hub podemos encontrar imágenes oficiales y otras que han sido creadas por miembros de
la comunidad Docker para todo tipo de propósitos.
1.3.4 Dockerfile
Es un archivo de configuración para crear imágenes.
Ejemplo:
#
# Nginx Dockerfile
#
# [Link]
#
# Pull base image.
FROM dockerfile/ubuntu
# Install Nginx.
RUN \
add-apt-repository -y ppa:nginx/stable && \
apt-get update && \
apt-get install -y nginx && \
rm -rf /var/lib/apt/lists/* && \
echo ”\ndaemon off;” >> /etc/nginx/[Link] && \
chown -R www-data:www-data /var/lib/nginx
# Define mountable directories.
VOLUME [”/etc/nginx/sites-enabled”, ”/etc/nginx/certs”, ”/etc/nginx/conf.d
”, ”/var/log/nginx”, ”/var/www/html”]
# Define working directory.
WORKDIR /etc/nginx
José Juan Sánchez Hernández 5
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
# Define default command.
CMD [”nginx”]
# Expose ports.
EXPOSE 80
EXPOSE 443
Los comandos más habituales en un Dockerfile son:
• FROM: Indica la imagen que vamos a utilizar. Primero buscará la imagen en local y si no la en-
cuentra la descargará de Internet.
• MAINTAINER: Datos de la persona que mantiene el contenedor.
• RUN: Ejecuta una instrucción en el contenedor y hace un commit de los resultados.
• ADD: Añade un archivo o un directorio al contenedor.
• ENV: Nos permite configurar variables de entorno en el contenedor. Pueden ser sustituidas pa-
sando 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 indefini-
da 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.
1.3.5 Volúmenes
Los volúmenes son el mecanismo que utiliza Docker para hacer persistentes los datos en un contene-
dor Docker.
Referencia.
1.4 Comandos para trabajar con imágenes Docker
1.4.1 docker search
Este comando nos permite buscar imágenes en Docker Hub.
José Juan Sánchez Hernández 6
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
Ejemplo:
Por ejemplo, para buscar todas las imágenes que contengan la palabra ubuntu usamos el comando:
docker search ubuntu
NAME DESCRIPTION
STARS OFFICIAL
AUTOMATED
ubuntu Ubuntu is a Debian-
based Linux operating …sys 8763 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh
-server and NoVNC 242 [
OK]
...
Ejemplo:
Para buscar todas las imágenes que contengan la palabra wordpress ejecutaríamos el siguiente co-
mando.
docker search wordpress
NAME DESCRIPTION STARS OFFICIAL
AUTOMATED
wordpress The WordPress rich content mana... 1983 [OK]
bitnami/wordpress Bitnami Docker Image for WordPress 51
[OK]
...
1.4.2 docker pull
Este comando nos permite descargar una imagen de Docker Hub.
Ejemplo:
Por ejemplo, para descargarnos la imagen ubntu ejecutaríamos lo siguiente.
José Juan Sánchez Hernández 7
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
docker pull ubuntu
Ejemplo:
Para descargarnos la imagen wordpress haríamos lo siguiente.
docker pull wordpress
1.4.3 docker images
Muestra un listado con todas las imágenes locales disponibles.
Ejemplo:
Para ver el listado de de las imágenes que tenemos descargadas en nuestro equipo, ejecutaríamos el
siguiente comando.
docker images
REPOSITORY TAG IMAGE ID CREATED
SIZE
wordpress latest fcf3e41b8864 2 weeks ago
408MB
ubuntu latest 2d696327ab2e 2 months ago
122MB
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.
docker images -q
José Juan Sánchez Hernández 8
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
fcf3e41b8864
2d696327ab2e
1.4.4 docker rmi
Este comando nos permite eliminar una o varias imágenes.
Por ejemplo, para eliminar la imagen wordpress usamos:
docker rmi wordpress
1.4.5 docker rmi $(docker images -q)
Este comando nos permite eliminar todas las imágenes que tenemos en local.
docker rmi $(docker images -q)
1.5 Creación de un contenedor con Alpine Linux
1.5.1 Alpine Linux
Alpine Linux es una distribución Linux muy ligera. La imagen de Alpine Linux para Docker ocupa menos
de 5 MB.
REPOSITORY TAG IMAGE ID CREATED
SIZE
alpine latest 196d12cf6ab1 2 months ago
4.41MB
1.5.2 Gestión de paquetes en Alpine Linux
El gestor de paquetes de Alpine Linux es apk. En la documentación oficial podemos encontrar más
detalles sobre cómo usarlo.
José Juan Sánchez Hernández 9
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
1.5.3 docker run
Ejemplo:
docker run -it --name alpine-container --rm alpine
• docker run es el comando que nos permite crear un contenedor a partir de una imagen Doc-
ker.
• El parámetro -i nos permite mantener interaccionar con el contenedor a través de la entrada
estándar STDIN.
• El parámetro -t nos asigna un terminal dentro del contenedor.
• Los dos parámetros -it nos permiten usar un contenedor como si fuese una máquina virtual
tradicional.
• El parámetro --name nos permite asignarle un nombre a nuestro contenedor. Si no le asigna-
mos un mombre Docker nos asignará un nombre automáticamente.
• El parámetro --rm hace que cuando salgamos del contenedor, éste se elimine y no ocupe espa-
cio en nuestro disco.
• alpine es el nombre de la imagen. Si no se indica lo contrario buscará las imágenes en el repo-
sitorio oficial Docker Hub.
Una vez ejecutado el comando anterior nos aparecerá un terminal del contenedor que acabamos de
crear.
/ #
Si quisiéramos instalar nano en el contenedor tendríamos que hacer lo siguiente.
1) Actualizar el índice de paquetes disponibles
apk update
2) Añadir el nuevo paquete al sistema.
apk add nano
José Juan Sánchez Hernández 10
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
Para salir del contenedor escribimos el comando exit.
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.
docker ps -a
1.6 Creación de un contenedor con Ubuntu
docker run -it --name ubuntu --rm ubuntu
1.7 Creación de un contenedor con Nginx
1.7.1 En modo interactivo
docker run -it --name webserver --rm -p 80:80 nginx
1.7.2 En modo detached
docker run -d --name webserver --rm -p 80:80 nginx
Con el parámetro -d indicamos que queremos ejecutar el contenedor en background.
Con el parámetro -v podemos crear un volumen para mapear un directorio de nuestro equipo con el
directorio que utiliza Nginx para servir las páginas webs.
También podemos hacer uso de $(pwd) para indicar que queremos crear un volumen en nuestro
directorio actual.
José Juan Sánchez Hernández 11
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
docker run -d --name webserver --rm -p 80:80 -v $(pwd):/usr/share/nginx/
html nginx
1.8 Creación de un contenedor con MySQL
docker run -d --name mysql --rm -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -
v /home/josejuan/data:/var/lib/mysql mysql:5.7.22
Podemos hacer uso de $(pwd) para indicar que queremos crear el volumen en nuestro directorio
actual.
docker run -d --name mysql --rm -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -
v $(pwd):/var/lib/mysql mysql:5.7.22
1.9 Creación de un contenedor con Adminer
En primer lugar debe existir un contenedor con MySQL Server.
docker run --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v $
(pwd):/var/lib/mysql mysql:5.7.22
Una vez que la instancia de MySQL está en ejecución podemos crear el contenedor con Adminer.
docker run --link mysql:db -p 8080:8080 adminer
1.10 Creación de un contenedor con PostgreSQL
docker run -d --name postgresql --rm -p 5432:5432 -e POSTGRES_PASSWORD=
mysecretpassword postgres
Nota: El nombre de usuario para conectar con el servidor PostgreSQL es postgres.
José Juan Sánchez Hernández 12
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
1.11 Creación de un contenedor con pgadmin4
Este contenedor lanza pgAdmin 4, una aplicación web que nos permite administrar una base de datos
PostgreSQL.
docker run -p 80:80 \
-e ”PGADMIN_DEFAULT_EMAIL=user@[Link]” \
-e ”PGADMIN_DEFAULT_PASSWORD=SuperSecret” \
-d dpage/pgadmin4
1.12 Ejecución de comandos en un nuevo contenedor
1.12.1 docker run
Este comando nos permite ejecutar un comando en un contenedor.
Por ejemplo, para ejecutar el comando cat /etc/os-release en el contenedor ubuntu haríamos
lo siguiente.
docker run ubuntu cat /etc/os-release
Y como salida tendríamos el siguiente resultado.
NAME=”Ubuntu”
VERSION=”18.04.1 LTS (Bionic Beaver)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=”Ubuntu 18.04.1 LTS”
VERSION_ID=”18.04”
HOME_URL=”[Link]
SUPPORT_URL=”[Link]
BUG_REPORT_URL=”[Link]
PRIVACY_POLICY_URL=”[Link]
privacy-policy”
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
El contenedor finaliza su ejecución una vez que ha finalizado la ejecución del comando.
José Juan Sánchez Hernández 13
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
1.13 Ejecución de comandos en un contenedor que está en ejecución
1.13.1 docker exec
Nos permite ejecutar comandos concretos en un contenedor o abrir un terminal como si fuera una
máquina virtual.
Ejemplo:
Permite ejecutar un comando en un contenedor que se está ejecutando.
docker exec -it webserver ls -la
Ejemplo:
Podemos lanzar como comando /bin/sh para abrir una consola e interactuar con el contenedor co-
mo si fuera una «máquina virtual».
docker exec -it webserver /bin/sh
1.14 Administración de contenedores
1.14.1 docker ps
Este comando muestra todos los contenedores que hay en ejecución.
docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
1.14.2 docker ps -a
Muestra todos los contenedores, los que están ejecución y los que están detenidos.
José Juan Sánchez Hernández 14
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
cfc8008e704b ubuntu ”/bin/echo 'Hello ...” 7 seconds
ago Exited (0) 5 seconds ago
boring_almeida
1.14.3 docker stop
Permite detener un contenedor que está en ejecución.
En este ejemplo estaría deteniendo un contenedor con el id abc1102e802c.
docker stop abc1102e802c
También puedo detener todos los contenedores que hay en ejecución con el siguiente comando.
docker stop $(docker ps -a -q)
1.14.4 docker start
Permite iniciar un contenedor que está detenido.
1.14.5 docker rm
Para eliminar un contenedor que no está en ejecución referenciado por el nombre wordpress usa-
mos:
docker rm wordpress
También podemos eliminarlo indicando su id. Por ejemplo:
José Juan Sánchez Hernández 15
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
docker rm 99ed74b743ec
Para eliminar todos los contenedores que no están ejecución.
docker rm $(docker ps -a -q)
1.14.6 docker logs
Muestra información de log de un contenedor.
1.14.7 docker inspect
Muestra información de bajo nivel de una imagen o un contenedor.
2 Referencias
• The Docker Book. James Turnbull.
• Get started with Docker.
• ¿Cómo instalar y usar Docker en Ubuntu 16.04?.
• Tutorial de Docker basado en el libro «Docker Cookbook» de O’Reilly.
• Entendiendo Docker. Conceptos básicos.
• Blog de Carlos Milán. Carlos Milán.
• Meet Docker.
• Docker for beginners.
• Play with Docker Classroom.
• Cursos de Docker en Katacoda.
• Documentación oficial de Docker.
• Docker. Una nueva forma de ejecutar y desarrollar aplicaciones. Manolo Torres. Cloud-DI Team
- Departamento de Informática UAL.
• Awesome Docker. A curated list of Docker resources and projects.
• Valuable Docker Links.
• Tutorial labs and Library references. Docker.
José Juan Sánchez Hernández 16
IAW - Docker IES Celia Viñas (Almería) - 2021/2022
3 Licencia
Esta página forma parte del curso Implantación de Aplicaciones Web por José Juan Sánchez y se dis-
tribuye bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 In-
ternacional.
José Juan Sánchez Hernández 17