Logo Studenta

Curso_Docker

¡Este material tiene más páginas!

Vista previa del material en texto

UNIVERSIDAD TECNOLÓGICA DE PANAMÁ 
 
FACULTAD DE INGENIERIA DE SISTEMAS COMPUTACIONALES 
 
Departamento de Arquitectura y Redes de Computadoras 
 
 
 
 
MANUAL DE DOCKER 
(Instalación y Desarrollo de Proyectos) 
 
 
 
 
 
 
 
 
 
 
 
 
 
Elaborado por: 
 
Dr. Armando Jipsion 
 
 
 2017 
 
 
 
 
 
 
Última modificación, marzo de 2023 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 2	
INTRODUCCIÓN 
 
Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones 
dentro de contenedores de software, proporcionando una capa adicional de abstracción y 
automatización de Virtualización a nivel de sistema operativo en Linux1. 
 
Este manual es el apoyo para el curso presencial pero también se puede utilizar para llevar 
el curso en línea. El curso está dirigido a todo personal informático que necesite trabajar 
con plataformas de software y requieren una implementación rápida de las mismas. 
 
El manual cubre desde la instalación, pasando por todos los comandos para la 
implementación y desarrollo de contenedores, a la implementación de clusters basados en 
contenedores. 
 
Se ha utilizado la información de varios manuales, libros y videos tutoriales2, muchos de 
los cuales son traducciones no oficiales, para hacer este manual lo más actualizado a la 
fecha. Se desea ir actualizando con el transcurso del tiempo y con los nuevos comandos 
que ofrezcan las nuevas versiones de Docker. 
 
Los ejemplos se van a basar en las instalaciones de Docker tanto en Linux, Windows y 
MAC. Se harán los señalamientos específicos de los sistemas operativos cuando sea 
necesario, ya que los comandos de Docker trabajan de igual manera en cualquier sistema 
operativo a no ser de alguna directriz propia del mismo. 
 
La distribución es completamente gratis para todos los cursos que quieran utilizarlo. Su 
uso es estrictamente académico. Básicamente lo estamos publicando bajo una licencia 
GPL (General Public License), de tal forma que se registraría bajo la Creative Commons 
(CC BY-NC-SA). 
 
Esperamos que este manual sea ampliamente utilizado y que el mismo sea una guía puntual 
para trabajar en el mundo de los contenedores. 
 
 
 
 
 
 
 
 
1	https://es.wikipedia.org/wiki/Docker_(software)	
2	Las	referencias	aparecen	en	los	capítulos	y	en	la	bibliografía	del	curso	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 3	
 
INDICE 
 
INTRODUCCIÓN	..........................................................................................................................................	2	
INDICE	...........................................................................................................................................................	3	
1.	 ¿QUÉ	ES	DOCKER?	............................................................................................................................	5	
2.	 INSTALACIÓN	DE	DOCKER	............................................................................................................	7	
2.1	 INSTALACIÓN	DE	DOCKER	EN	WINDOWS	..................................................................................................	7	
2.2	 INSTALACIÓN	DOCKER	EN	MAC	...............................................................................................................	13	
2.3	 INSTALACIÓN	DE	DOCKER	EN	LINUX	UBUNTU	22.04	.........................................................................	16	
3.	 EJECUTANDO	LA	PRIMERA	IMAGEN	Y	EL	PRIMER	CONTENEDOR	.................................	18	
3.1											IMÁGENES	Y	CONTENEDORES	...................................................................................................................	18	
3.2	 EJECUCIÓN	DE	LA	PRIMERA	IMAGEN.	......................................................................................................	20	
3.3	 TRABAJANDO	CON	UN	CONTENEDOR	INTERACTIVO	.............................................................................	23	
3.4	 CONSTRUYENDO	UNA	IMAGEN	DESDE	UN	CONTENEDOR	.....................................................................	26	
4.	 CONSTRUCCIÓN	DE	IMÁGENES	..................................................................................................	28	
4.1	 SISTEMA	DE	CONSTRUCCIÓN	DE	IMAGEN	INTEGRADA	DE	DOCKER	...................................................	28	
4.2	 SINTAXIS	PARA	ESCRIBIR	UN	DOCKERFILE	............................................................................................	31	
4.3	 CONSTRUCCIÓN	DE	INSTRUCCIONES	EN	EL	DOCKERFILE	....................................................................	31	
4.4	 LABORATORIOS	...........................................................................................................................................	41	
5.	 PUBLICACIÓN	DE	IMÁGENES	......................................................................................................	46	
5.1	 ENTENDIENDO	EL	DOCKER	HUB	..............................................................................................................	46	
5.2	 EMPUJANDO	IMÁGENES	AL	DOCKER	HUB	..............................................................................................	48	
5.3	 REPOSITORIOS	PRIVADOS	LOCALES	........................................................................................................	52	
6.	 TRABAJANDO	CON	CONTENEDORES	........................................................................................	54	
6.1	 EJECUTAR	O	CREAR	UN	NUEVO	CONTENEDOR	.......................................................................................	54	
6.2	 COMANDO	VERSION	....................................................................................................................................	55	
6.3	 COMANDO	CONTAINER	RUN	......................................................................................................................	55	
6.4	 COMANDO	CONTAINER	LIST	......................................................................................................................	57	
6.5	 COMANDO	CONTAINER	REMOVE	..............................................................................................................	58	
6.6	 COMANDO	CONTAINER	STOP	....................................................................................................................	60	
6.7	 COMANDO	CONTAINER	LOGS	....................................................................................................................	61	
6.8	 COMANDO	CONTAINER	TOP	......................................................................................................................	61	
6.9	 COMANDO	CONTAINER	INSPECT	..............................................................................................................	62	
6.10	 COMANDO	CONTAINER	STATS	..................................................................................................................	63	
6.11	 COMANDO	CONTAINER	ATTACH	...............................................................................................................	63	
6.12	 COMANDO	CONTAINER	EXEC	....................................................................................................................	64	
6.13	 COMANDO	CONTAINER	COMMIT	...............................................................................................................	64	
6.14	 VOLVIENDO	AL	COMANDO	RUN	................................................................................................................	66	
7.	 DOCKER	NETWORKING	................................................................................................................	67	
7.1	 REDES	POR	DEFECTO	.................................................................................................................................	67	
7.2	 REDES	DEFINIDAS	POR	EL	USUARIO	.........................................................................................................	71	
7.3	 USO	DE	REDES	DOCKER	EN	WINDOWS	10	.............................................................................................74	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 4	
7.4	 TOPOLOGÍAS	DE	RED	E	IPAM	..................................................................................................................	75	
7.5	 DOCKER	NETWORK	CREATE	......................................................................................................................	77	
7.6	 OTROS	COMANDOS	RELACIONADOS	.........................................................................................................	78	
8.	 CORRIENDO	SERVICIOS	EN	UN	CONTENEDOR	......................................................................	81	
8.1	 CONCEBIR	EL	CONTENEDOR	COMO	UN	SERVICIO	..................................................................................	81	
8.2	 PUBLICAR	PUERTOS	DE	CONTENEDOR:	LA	OPCIÓN	–P	.........................................................................	82	
8.3	 UNIÓN	DE	PUERTOS	USANDO	EXPOSE	Y	LA	OPCIÓN	–P	.....................................................................	83	
9.	 COMPARTIR	DATOS	CON	CONTENEDORES	............................................................................	85	
9.1	 VOLUMEN	DE	DATOS	..................................................................................................................................	85	
9.2	 CREANDO	DOCKER	VOLUMES	...................................................................................................................	86	
9.3	 COMPARTIR	DATOS	ENTRE	CONTENEDORES	........................................................................................	90	
9.4	 MONTANDO	UN	VOLUMEN	DE	DATOS	DESDE	OTRO	CONTENEDOR	..................................................	90	
10.	 ORGANIZAR	CONTENEDORES	................................................................................................	92	
10.1	 ENLAZANDO	CONTENEDORES	..................................................................................................................	92	
10.2	 ORQUESTACIÓN	DE	CONTENEDORES	......................................................................................................	95	
10.3	 LABORATORIO	...........................................................................................................................................	102	
11.	 DOCKER-MACHINE	.................................................................................................................	105	
11.1	 INSTALACIÓN	DEL	DOCKER-MACHINE	DEPENDIENDO	DEL	SO	UTILIZADO	.....................................	105	
11.2	 UTILIZANDO	DOCKER-MACHINE	CON	VIRTUALBOX	...........................................................................	106	
11.3	 UTILIZANDO	DOCKER-MACHINE	CON	HYPER-V	..................................................................................	108	
12.	 DOCKER	SWARM	.....................................................................................................................	113	
12.1	 SERVICIOS	Y	TAREAS	................................................................................................................................	113	
12.2	 BALANCEO	..................................................................................................................................................	114	
12.3	 CONFIGURAR	SWARM	..............................................................................................................................	114	
12.4	 GESTIÓN	DE	SERVICIOS	............................................................................................................................	115	
12.5	 LABORATORIO	...........................................................................................................................................	117	
13.	 DOCKER	STACK	.......................................................................................................................	119	
13.1	 COMPRENDER	EL	USO	DE	LAS	PILAS	DOCKER	......................................................................................	119	
13.2	 CÓMO	CREAR	Y	USAR	UN	YAML	COMPUESTO	PARA	PILAS	................................................................	120	
BIBLIOGRAFÍA	.......................................................................................................................................	132	
ANEXO	1	...................................................................................................................................................	133	
COMANDOS	BÁSICOS	DE	DOCKER	..........................................................................................................................	133	
ANEXO	2	...................................................................................................................................................	135	
LANZAR	UN	SERVICIO	CON	DOCKER	SWARM	EN	LOAD	BALANCING	..........................................	135	
ANEXO	3	...................................................................................................................................................	139	
IMPLEMENTACIÓN	DE	UN	CLUSTER	HA_ASTERISK	UTILIZANDO	DOCKER	.....................................................	139	
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 5	
1. ¿QUÉ ES DOCKER? 
 
Docker es un motor de contenedor de código abierto, que automatiza el empaque, el envío 
y el despliegue de cualquier aplicación de software que se presenta como contenedores 
livianos, portátiles y autosuficientes, que se ejecutarán prácticamente en cualquier lugar. Un 
contenedor Docker es un cubo de software que comprende todo lo necesario para ejecutar 
el software de forma independiente. Puede haber varios contenedores Docker en una sola 
máquina y los contenedores están completamente aislados entre sí, así como desde la 
máquina anfitriona. 
 
Docker es un servicio de gestión de contenedores. Las palabras clave de Docker son 
desarrollo, portabilidad y funcionalidad en cualquier lugar. Toda la idea de Docker es que 
los desarrolladores desarrollen fácilmente aplicaciones y las envíen a contenedores que 
pueden desplegarse en cualquier lugar. 
 
Docker no es un framework ni tampoco es un lenguaje de programación. Considéralo 
como una herramienta para la gestión de software. 
 
El lanzamiento inicial de Docker fue en marzo de 2013 y desde entonces, se ha convertido 
en la palabra de moda para el desarrollo del mundo moderno, especialmente para los 
proyectos basados en metodologías ágiles. 
 
1.1 Características	de	Docker.	
• Docker	tiene	la	capacidad	de	reducir	el	tamaño	del	desarrollo	proporcionando	
una	huella	más	pequeña	del	sistema	operativo	a	través	de	contenedores.	
• Con	los	contenedores,	resulta	más	fácil	para	los	equipos	de	diferentes	unidades,	
como	 el	 desarrollo,	 el	 control	 de	 calidad	 y	 las	 operaciones,	 trabajar	 sin	
problemas	en	todas	las	aplicaciones.	
• Puede	 implementar	 contenedores	de	Docker	 en	 cualquier	 lugar,	 en	 cualquier	
máquina	física	y	virtual	e	incluso	en	la	nube.	
• Dado	 que	 los	 contenedores	Docker	 son	 bastante	 ligeros,	 son	muy	 fácilmente	
escalables.	
 
1.2 Componentes	de	Docker	
Docker cuenta con los siguientes componentes: 
• Docker	para	Mac	-	Le	permite	a	uno	ejecutar	 contenedores	Docker	en	el	
sistema	operativo	Mac.	
• Docker	para	Linux	–	Le	permite	a	uno	ejecutar	contenedores	Docker	en	el	
sistema	operativo	Linux.	
• Docker	para	Windows	–	Le	permite	a	uno	ejecutar	contenedores	Docker	
en	el	sistema	operativo	Windows.	
• Docker	 Engine	 –	 Es	 utilizado	 para	 crear	 imágenes	 y	 construir	
contenedores	Docker.	
• Docker	Hub	-	Este	es	el	registro	que	se	utiliza	para	alojar	varias	imágenes	
Docker	en	la	web.	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 6	
• Docker	Compose	-	Esto	se	usa	para	definir	aplicaciones	que	usan	múltiples	
contenedores	Docker.	
 
1.3 Docker	internamente	
Supongamos que queremos ejecutar directamente los contenedores en una máquina 
Linux. El motor Docker produce, monitorea y administra varios contenedores como se 
ilustra en el siguiente diagrama: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Figura1.1 Conceptualización de Docker 
 
El diagrama anterior ilustra vívidamente cómo los futuros sistemas de TI tendrían 
cientos de contenedores sensibles a las aplicaciones, que de forma innata podrían 
facilitar su integración y orquestación integradas para derivar aplicaciones 
modulares (empresariales, sociales, móviles, analíticas y soluciones integradas). 
Estas aplicaciones contenidas podrían ejecutarse con fluidez en infraestructuras 
convergentes, federadas, virtualizadas, compartidas, dedicadas y automatizadas. 
 
 
 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 7	
2. Instalación de Docker 
 
Docker puede ser instalado en sistemas operativos como Linux, Windows y Mac. 
Cada sistema operativo tiene su forma de instalar Docker, pero lo interesante es que en 
todos los sistemas operativos los comandos de Docker son los mismos, no cambian, el 
mismo comando que usted utiliza en Linux es el mismo que debe aplicar en Windows y 
en Mac. 
 
2.1 Instalación de Docker en Windows 
 
Hay dos formas de instalar Docker en Windows. Si se va a instalar en Windows 
7/8/10 Home, se utiliza lo que se conoce como Docker Toolbox. Existe una 
versión de Docker para Windows 10 Proffessional o Enterprise, la cual trabaja 
directamente con el kernel de Windows. 
 
2.1.1. Instalación	de	Docker	en	Windows	7/8/10	Home3	
• El	sistema	operativo	Windows	debe	ser	de	64	bits	
• Lo	primero	es	descargar	el	Docker	Tollbox	
https://docs.docker.com/toolbox/toolbox_install_windows/ 
• Asegurarse	 que	 su	 sistema	 Windows	 soporta	 tecnología	 de	
virtualización	y	que	la	misma	está	activa.	
Para Windows 8 y 8.1 ir a Start > Task Manager, bajo el tab CPU 
usted debe ver lo siguiente: 
 
 
Figura 2.1 Verificación de Windows 8 y 8.1 
 
• Para	Windows	7	debe	utilizar	una	herramienta	similar	a		
 
3	https://docs.docker.com/toolbox/toolbox_install_windows/#step-3-verify-your-installation	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 8	
https://www.microsoft.com/en-us/download/details.aspx?id=592 
• Confirmar	que	tu	sistema	operativo	es	de	64	bits.		Para	eso	debe	
dirigirse	a:	
https://support.microsoft.com/en-us/help/827218/how-to-determine-
whether-a-computer-is-running-a-32-bit-version-or-64 
• Docker	Toolbox	va	a	descargar	los	siguientes	softwares	en	su	pc	
o Docker	Client	for	Windows	
o Docker	Toolbox	management	tool	and	ISO	
o Oracle	VM	VirtualBox	
o Git	MSYS-git	UNIX	tools	
• Si	tiene	Virtual	Box	activado	debe	apagarlo	antes	de	empezar	la	
instalación.	
• Ahora	darle	doble	click	al	 instalador	del	Docker	Toolbok	y	debe	
aparecer	la	siguiente	pantalla	
 
 
Figura 2.2 Pantalla de inicio del Toolbox 
 
• Presione	 Next	 para	 aceptar	 las	 opciones	 e	 instalaciones.	 Al	
terminar	debe	aparecer	la	siguiente	pantalla	
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 9	
 
Figura 2.3 Pantalla de finalización de la instalación de Toolbox 
 
• Ahora	 debe	 buscar	 en	 su	 escritorio	 de	 Window	 los	 siguientes	
iconos.	
 
 
Figura 2.4 Iconos de arranque de Docker 
 
• Dar	doble	click	en	el	icono	Docker	Quickstart	
Si el sistema muestra un aviso de Control de cuenta de usuario para 
permitir que VirtualBox realice cambios en su computadora. Elija Sí. 
El terminal hace varias cosas para configurar Docker Toolbox por 
usted. Cuando está hecho, el terminal muestra el $ prompt. 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 10	
 
 
Figura 2.5 Pantalla inicial de Docker 
 
• Para	 verificar	 que	Docker	 está	 instalado	 y	 corriendo	 escriba	 lo	
siguiente:	
docker run hello-world 
Debe aparecer la siguiente pantalla 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 2.6 Pantalla de verificación de que Docker está instalado 
 
2.1.2. Instalación	de	Docker	en	Windows	10	Pro4	
• Debemos	descargar	Docker	desde	
https://store.docker.com/editions/community/docker-ce-desktop-
windows 
 
4	https://docs.docker.com/docker-for-windows/install/#install-docker-for-windows	
$ docker run hello-world 
 Unable to find image 'hello-world:latest' locally 
 Pulling repository hello-world 
 91c95931e552: Download complete 
 a8219747be10: Download complete 
 Status: Downloaded newer image for hello-world:latest 
 Hello from Docker. 
 This message shows that your installation appears to be working correctly. 
 
 To generate this message, Docker took the following steps: 
 1. The Docker Engine CLI client contacted the Docker Engine daemon. 
 2. The Docker Engine daemon pulled the "hello-world" image from the Docker Hub. 
 (Assuming it was not already locally available.) 
 3. The Docker Engine daemon created a new container from that image which runs the 
 executable that produces the output you are currently reading. 
 4. The Docker Engine daemon streamed that output to the Docker Engine CLI client, which sent it 
 to your terminal. 
 
 To try something more ambitious, you can run an Ubuntu container with: 
 $ docker run -it ubuntu bash 
 
 For more examples and ideas, visit: 
 https://docs.docker.com/userguide/ 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 11	
• Darle	doble	click	a	Docker	for	Windows	Installer.exe	
• Siga	el	asistente	de	instalación	para	aceptar	la	licencia,	autorizar	
el	instalador	y	continuar	con	la	instalación.	
• Al	 finalizar	 debe	 aparecer	 la	 siguiente	 pantalla	 donde	 le	 damos	
clik	al	botón	que	dice	Finish	
 
 
Figura 2.7 Pantalla de finalización de instalación de Docker en Win 10 
 
 
• Docker	 no	 se	 iniciará	 automáticamente.	 Para	 iniciarlo,	
busque	Docker,	 seleccione	 la	aplicación	en	 los	 resultados	
de	búsqueda	y	haga	clic	en	ella	(o	presione	Retorno).	
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 12	
 
Figura 2.8 Inicialización de Docker en Win 10 Pro 
 
• Cuando	 la	 ballena	 en	 la	 barra	 de	 estado	 se	 mantiene	
estable,	 Docker	 está	 funcionando	 y	 se	 puede	 acceder	
desde	cualquier	ventana	de	terminal.	
 
 
Figura 2.9 Docker estable 
 
 
• Si	 acaba	 de	 instalar	 la	 aplicación,	 también	 recibirá	 un	
mensaje	emergente	con	los	próximos	pasos	sugeridos	y	un	
enlace	a	esta	documentación.	
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 13	
 
Figura 2.10 Pantalla de inicio de Docker en Win 10 Pro 
 
2.1.3. Instalación	de	Docker	en	Windows	11	
Recomendamos ver el siguiente video 
https://www.youtube.com/watch?v=U8RcrCoL9q4 
 
2.2 Instalación Docker en Mac 
• Descargar	Docker	para	Mac	desde:	
https://store.docker.com/editions/community/docker-ce-
desktop-mac 
• Dar	doble	click	a	Docker.dmg	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 14	
• Debe	aparecer	la	siguiente	pantalla	
• Arrastra	Moby	la	ballena	a	la	carpeta	Aplicaciones	
 
Figura 2.11 Pantalla de instalación de Docker en Mac 
 
• Haga	 doble	 clic	 en	 Docker.app	 en	 la	 carpeta	 de	
aplicaciones	para	iniciar	Docker.	
 
 
 
Figura 2.12 Docker en la sección de Aplicaciones 
 
• Se	le	pedirá	que	autorice	Docker.app	con	la	contraseña	de	
su	 sistema	 después	 de	 iniciarlo.	 Se	 necesita	 acceso	
privilegiado	para	instalar	componentes	de	red	y	enlaces	a	
las	aplicaciones	Docker.	 	La	ballena	en	la	barra	de	estado	
superior	indica	que	Docker	se	está	ejecutando	y	se	puede	
acceder	desde	una	terminal.	
 
 
Figura 2.13 Docker en la Barra de Tareas de Mac 
 
• Si	 acaba	 de	 instalar	 la	 aplicación,	 también	 recibirá	 un	
mensaje	 de	 éxito	 con	 los	 próximos	 pasos	 sugeridos	 y	 un	
enlace	 a	 esta	 documentación.	 Haga	 clic	 en	 la	 ballena	
(ballena	 menú)	 en	 la	 barra	 de	 estado	 para	 cerrar	 esta	
ventana	emergente.	
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 15	
 
 
Figura 2.14 Pantalla inicial de Docker 
 
• Haga	 clic	 en	 la	 ballena	 (menú	 de	 ballenas)	 para	 obtener	
las	Preferencias	y	otras	opciones.	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 16	
 
Figura 2.15 Pantalla para iniciar Docker en Mac 
 
Para instalar Docker en las nuevas Mac recomendamos el siguiente 
video de instalación: 
https://www.youtube.com/watch?v=SGmFGYCuJK4 
 
2.3 Instalación de Docker en Linux Ubuntu 22.04 
• sudo	apt	update	
• sudo	apt	install	apt-transport-https	ca-certificatescurl	software-properties-common	
• sudo	mkdir	-m	0755	-p	/etc/apt/keyrings	
• curl	-fsSL	
https://download.docker.com/linux/ubuntu/gpg	|	
sudo	gpg	--dearmor	-o	/etc/apt/keyrings/docker.gpg	
• echo	\	"deb	[arch=$(dpkg	--print-architecture)	
signed-by=/etc/apt/keyrings/docker.gpg]	
https://download.docker.com/linux/ubuntu	
\	$(lsb_release	-cs)	stable"	|	sudo	tee	
/etc/apt/sources.list.d/docker.list	>	/dev/null	
• sudo	apt-get	update	
• apt-cache	policy	docker-ce	
• sudo	apt-get	install	docker-ce	docker-ce-cli	
containerd.io	docker-buildx-plugin	docker-compose-
plugin	
• sudo	systemctl	status	docker	
• sudo	systemctl	enable	docker	
• sudo	usermod	-aG	docker	<SU	USUARIO>	
• Verificar	la	instalación	de	Docker	
docker info 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 17	
docker version 
 docker run hello-world 
 
 
 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 18	
3. Ejecutando la Primera Imagen y el Primer Contenedor 
 
Antes de empezar con la ejecución de nuestra primera imagen y nuestro primer 
contenedor, debemos repasar algunos conceptos utilizados en Docker. 
3.1 Imágenes y Contenedores 
Una imagen en Docker es una plantilla que puede solamente contener un sistema 
operativo o una aplicación en particular. Mientras tanto un contenedor es un 
conjunto de imagénes que producen una aplicación en particular. 
 
 
Figura 3.1 Imagen y Contenedor 
 
Una imagen Docker es una colección de todos los archivos que componen una 
aplicación de software. Cada cambio que se realiza en la imagen original se 
almacena en una capa separada. Para ser precisos, cualquier imagen Docker tiene 
que originarse a partir de una imagen base de acuerdo con los diversos requisitos. 
Se pueden unir módulos adicionales a la imagen base para derivar las diversas 
imágenes que pueden exhibir el comportamiento preferido. Cada vez que se 
compromete con una imagen Docker, está creando una nueva capa en la imagen 
Docker, pero la imagen original y cada capa preexistente permanecen sin cambios. 
En otras palabras, las imágenes son típicamente del tipo de solo lectura. Si cuentan 
con el poder mediante la incorporación sistemática de módulos más nuevos, se 
creará una imagen nueva con un nombre nuevo. Las imágenes Docker se están 
convirtiendo en una base viable para desarrollar e implementar los contenedores 
Docker. 
 
Las imágenes base se pueden mejorar para que puedan crear las imágenes 
principales, que a su vez pueden usarse para crear las imágenes secundarias. La 
imagen base no tiene ningún elemento principal, es decir, las imágenes principales 
se encuentran en la parte superior de la imagen base. Cuando trabajamos con una 
imagen y no especificamos esa imagen a través de una identidad apropiada (por 
ejemplo, un nombre nuevo), la imagen más reciente (generada recientemente) 
siempre será identificada y utilizada por el motor Docker. 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 19	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 3.2 Debian es la imagen base 
 
 
 
 
 
 
Al final, agregar módulos adicionales a la imagen base crea un contenedor. La 
manera más fácil de pensar sobre un contenedor es como la capa de lectura y 
escritura que se encuentra en una o más imágenes de solo lectura. Cuando se 
ejecuta el contenedor, el motor Docker combina no solo todas las imágenes 
necesarias, sino que también fusiona los cambios de la capa de lectura y escritura 
en el contenedor. Esto lo convierte en un sistema autónomo, extensible y 
ejecutable. Los cambios se pueden combinar utilizando el subcomando Docker, 
docker commit. El nuevo contenedor acomodará todos los cambios que se realicen 
en la imagen base. La nueva imagen formará una nueva capa en la parte superior de 
la imagen base. 
 
En el siguiente diagrama. la imagen base es la distribución Debian, luego hay una 
adición de dos imágenes (los emacs y el servidor Apache), y esto dará como 
resultado el contenedor: 
 
En general, la imagen base representa un sistema operativo, y en el 
caso de Linux, la imagen base puede ser una de sus distribuciones, 
como Debian. 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 20	
 
Figura 3.3 Construcción de un contenedor 
 
3.2 Ejecución de la primera imagen. 
Para ejecutar una imagen primero hay que encontrarla. Existen dos métodos para 
hacerlo: 
 
3.2.1 hub.docker.com	
hub.docker.com es el repositorio oficial de imágenes de docker, con más de 
100,000 imágenes públicas y privadas. 
 
 
Figura 3.4 Pantalla de inicio de hub.docker 
 
Utilizando el portal podemos buscar la imagen que necesitamos. El 
portal nos desplegará todas las imágenes disponibles, además, 
indicará cuál es el comando que se debe utilizar para descargar la 
imagen. También indica cuántas descargas lleva la imagen escogida. 
 
 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 21	
Figura 3.5 Resultado de la búsqueda de una imagen 
 
Si tomamos la opción DETAILS obtendremos toda la información 
de la imagen que se quiere descargar 
 
 
Figura 3.6 Información de la imagen a descargar 
 
En el lado derecho de la pantalla anterior podemos observar el 
comando que debemos usar para descargar la imagen. 
 
3.2.2 La	otra	forma	de	acceder	a	las	imágenes	es	usando	comandos	directos		
$ docker search nombre de la imagen 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 22	
$ docker pull nombre de la imagen 
 
docker search busca la imagen primeramente en el repositorio local de 
docker. Si no lo encuentra en el repositorio local lo busca y lo descarga de 
hub.docker.com 
 
 
Figura 3.7 Resultado del comando docker search buscando en hub.docker.com 
 
Si analizamos la figura anterior obtenemos una pantalla similar a la figura 
3.5. 
 
Para descargar la imagen utilizamos el comando docker pull. docker pull 
siempre descargará la variante de imagen que tiene la última etiqueta en ese 
repositorio. Si dentro del comando utilizamos la opción - a nos descargará 
más imágenes. 
$ docker pull -a ubuntu 
Nos va a descargar las imágenes de ubuntu desde la versión 10.04 a 17.04 
más otras imágenes dentro del repositotio. 
 
 
Figura 3.8 Imágenes descargadas en el repositorio local 
REPOSITORY: Este es el nombre del repositorio o imagen. En el ejemplo 
anterior, el nombre del repositorio es ubuntu. 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 23	
TAG: Esta es la etiqueta asociada con la imagen, por ejemplo 17.04, la 
última. Se pueden asociar una o más etiquetas a una imagen. 
IMAGE ID: Cada imagen está asociada con una identificación única. La 
identificación de la imagen se representa utilizando un número aleatorio 
largo de 64 dígitos hexadecimales. Por defecto, el subcomando de imágenes 
Docker solo mostrará 12 dígitos hexadecimales. 
CREATED: Indica que tanto tiempo ha pasado desde que se creó la imagen. 
SIZE: Tamaño de la imagen descargada. 
 
 
 
 
 
 
 
 
 
 
hub.docker.com también proporciona una plataforma para los 
desarrolladores y proveedores para compartir sus imágenes para consumo 
general. Las imágenes de terceros están precedidas por la identificación de 
usuario de sus desarrolladores o depositantes. Por ejemplo, thedockerbook / 
helloworld es una imagen de terceros, en donde thedockerbook es la 
identificación del usuario y helloworld es el nombre del repositorio de 
imágenes. Puede descargar cualquier imagen de terceros mediante el uso del 
comando de extracción, como se muestra a continuación: 
docker pull thedockerbook/helloworld 
 
Además del repositorio anterior, el ecosistema Docker también proporciona 
un mecanismo para aprovechar las imágenes de cualquier hub de repositorio 
de terceros que no sea el Docker Hub Registry, y proporciona las imágenes 
alojadas en los concentradores de repositorio locales. El motor Docker se ha 
programado para buscar imágenes en index.docker.io de forma 
predeterminada, mientras que en el caso del tercero o el hub de repositorio 
local, debemos especificar manualmente la ruta desde la que debe estar la 
imagen. Una ruta de repositorio manual es similar a una URL sin un 
especificador de protocolo,como https: //, http: // y ftp: //. A continuación, se 
muestra un ejemplo de extracción de una imagen desde un centro de 
depósito de terceros: 
docker pull registry.example.com/myapp 
 
 
3.3 Trabajando con un contenedor interactivo 
En el segundo capítulo, ejecutamos nuestro primer contenedor Hello World para 
tener una idea de cómo funciona la tecnología de contenedorización. En esta 
sección, vamos a ejecutar un contenedor en modo interactivo. El comando de 
De forma predeterminada, Docker siempre usa la imagen etiquetada 
como la más reciente (latest). Cada variante de imagen se puede 
identificar directamente calificándola con su etiqueta. Una imagen puede 
calificarse agregando la etiqueta al nombre del repositorio con un : que se 
agrega entre la etiqueta y el nombre del repositorio (<repository>:<tag>) 
docker pull ubuntu:17.04 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 24	
ejecución del docker toma una imagen como entrada y la lanza como un 
contenedor. Debe pasar las banderas -t y -i al comando de la ventana docker para 
que el contenedor sea interactivo. El distintivo -i es el controlador de la clave, lo 
que hace que el contenedor sea interactivo al tomar la entrada estándar (STDIN) 
del contenedor. El distintivo -t asigna un pseudo-TTY o un pseudo-terminal 
(emulador de terminal) y luego lo asigna al contenedor. 
En el siguiente ejemplo vamos a lanzar un contenedor interactivo usando la imagen 
de ubuntu 14.04 y usaremos el comando /bin/bash (permite usar los comandos de 
ubuntu) 
docker run -i -t ubuntu:14.04 /bin/bash 
 
 
Figura 3.9 Ejecución del contenedor interactivo 
 
El indicador bash anterior confirma que nuestro contenedor ha sido lanzado con 
éxito, y que está listo para tomar nuestra entrada. Si se está preguntando sobre el 
número hexadecimal 46f52acc2c1b en el mensaje, entonces no es más que el 
nombre de host del contenedor. En el lenguaje de Docker, el nombre de host es el 
mismo que el ID del contenedor. 
 
Para salir del contenedor interactivo pero que el mismo siga corriendo se utiliza el 
comando ctrl pq. Para comprobar que contenedor está en uso se utiliza el 
comando docker ps 
 
 
Figura 3.10 Ejecución del comando docker ps 
 
CONTAINER ID: Muestra la identificación del contenedor asociada con el 
contenedor. La identificación del contenedor es un número aleatorio largo de 64 
dígitos hexadecimales. Por defecto, el subcomando docker ps mostrará solo 12 
dígitos hexadecimales. Puede visualizar todos los 64 dígitos utilizando el indicador -
-no-trunc, por ejemplo: 
docker ps --no-trunc 
IMAGE: Muestra la imagen desde la que se ha diseñado el contenedor Docker. 
COMMAND: Muestra el comando ejecutado durante el lanzamiento del 
contenedor. 
CREATED: Indica cuándo se creó el contenedor. 
STATUS: Estado actual del contenedor. 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 25	
PORTS: Indica si se ha asignado algún puerto al contenedor. 
NAMES: El motor Docker genera automáticamente un nombre de contenedor 
aleatorio mediante la concatenación de un adjetivo y un nombre. La ID del 
contenedor o su nombre pueden usarse para tomar medidas adicionales en el 
contenedor. El nombre del contenedor se puede configurar manualmente utilizando 
la opción --name en el comando de run. 
 
Para detener la ejecución del contenedor usamos el comando 
docker stop 4b1ae9582e9c 
 
Ahora si ejecutamos el comando docker ps veremos que no se encuentra ningún 
contenedor en ejecución 
 
 
Figura 3.11 Repositorio de contenedores vacio 
 
Si se desea nuevamente arrancar y conectarse al contenedor debemos usar los 
siguientes comandos: 
docker start CONTAINER ID 
docker attach CONTAINER ID 
 
 
Figura 3.12 Reactivación de un contenedor 
 
También podemos darle seguimiento a los cambios realizados dentro del contenedor 
utilizando el comando 
docker diff CONTAINER ID 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 26	
 
Figura 3.13 Seguimiento de los cambios hechos en el contenedor 
 
Si queremos ver todos los contenedores que hemos creado, incluyendo los que no 
están en ejecución, utilizamos el siguiente comando: 
docker ps –a 
 
 
Figura 3.14 Contenedores en ejecución y los contenedores detenidos 
 
3.4 Construyendo una imagen desde un contenedor 
En esta sección, veamos cómo podemos agregar más software a nuestra imagen 
base en un contenedor en ejecución y luego convertir ese contenedor en una 
imagen para ser usada en el futuro. Usaremos como imagen base ubuntu 14.04, la 
cual no cuenta con muchos de sus comandos. En esta ocasión lo vamos agregar el 
wget. 
 
En este ejemplo usaremos la siguiente secuencia de comandos: 
docker run -i -t ubuntu:14.04 /bin/bash 
root@78ed016a4234:/# which wget 
root@78ed016a4234:/# #ubicación del comando wget 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 27	
root@78ed016a4234:/# apt-get update 
root@78ed016a4234:/# apt-get install -y wget 
root@78ed016a4234:/# which wget 
/usr/bin/wget #ubicación del comando wget 
root@78ed016a4234:/# exit 
docker commit 78ed016a4234 \ubuntu_wget 
 
El comando commit es uno de los comandos utilizados para crear una nueva 
imagen a partir de un contenedor. Se recomienda que para usar commit el 
contenedor debe estar detenido. 
 
Ahora utilizamos el comando docker images para comprobar que la imagen se creo 
con el nombre ubuntu_wget 
 
 
Figura 3.15 Comprobación de la creación de la nueva imagen 
 
 
 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 28	
4. Construcción de Imágenes 
 
En este capítulo usaremos Dockerfile para la construcción de imágenes de 
mayor productividad. Un Dockerfile es un documento de texto que contiene 
todos los comandos que un usuario podría llamar en la línea de comando para 
ensamblar una imagen. Al usar Docker los usuarios pueden crear una 
compilación automatizada que ejecuta varias instrucciones de línea de comandos 
en sucesión5. 
 
Cubriremos los siguientes temas en este capítulo: 
• Sistema integrado de construcción de imágenes de Docker 
• Visión general rápida de la sintaxis de Dockerfile 
• Instrucciones de compilación de Dockerfile 
• Cómo almacena Docker las imágenes 
 
Para la realización de este capítulo nos basaremos principalmente en el libro 
“Learning Docker de Pethuru Raj”. 
 
4.1 Sistema de construcción de imagen integrada de Docker 
 
Como comentamos en el capítulo anterior, pudimos crear una imagen 
manualmente al abrir un contenedor desde una imagen base, instalar todas 
las aplicaciones requeridas, realizar los cambios necesarios en el archivo de 
configuración y luego enviar el contenedor como una imagen. 
 
Las instrucciones secuenciales dentro de Dockerfile pueden incluir la 
selección de la imagen base, la instalación de la aplicación requerida, la 
adición de la configuración y los archivos de datos, la ejecución automática 
de los servicios y la exposición de esos servicios al mundo externo. Por lo 
tanto, el sistema de compilación automatizado basado en Dockerfile 
simplificó el proceso de creación de imágenes. También ofrece una gran 
flexibilidad en la forma en que se organizan las instrucciones de 
construcción y en la forma en que visualizan el proceso de construcción 
completo. 
 
Veamos un ejemplo básico de lo que podemos hacer con Dockerfile, 
solamente utilizando dos instrucciones. 
 
$ cat > Dockerfile #escribir > para crear el archivo 
FROM busybox:latest 
CMD echo Hello World!! 
Ctrl c 
 
5	https://docs.docker.com/engine/reference/builder/	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 29	
• La	 primera	 instrucción	 es	 para	 elegir	 la	 selección	 de	 la	
imagen	 base.	 En	 este	 ejemplo,	 seleccionaremos	 la	
busybox6:	última	imagen	
• La	 segunda	 instrucción	es	para	 llevar	a	 cabo	el	 comando	
CMD,	 que	 instruye	 el	 contenedor	 para	 hacer	 eco	 Hello	
World	!!.	
 
Ahora procedamos a generar una imagen de Docker utilizando el archivo 
Docker anterior llamando a la compilación Docker junto con la ruta de 
Dockerfile. En nuestro ejemplo, invocaremos el comando docker build del 
directorio donde hemosalmacenado Dockerfile7, y la ruta se especificará 
con el siguiente comando: 
docker build . 
 
Después de emitir el comando anterior, el proceso de compilación 
comenzará enviando contexto de construcción al daemon8 y luego mostrará 
el texto que se muestra aquí: 
 
$ docker build . 
Sending build context to Docker daemon 2.048kB 
Step 1/2 : FROM busybox:latest 
latest: Pulling from library/busybox 
0ffadd58f2a6: Pull complete 
Digest: 
sha256:bbc3a03235220b170ba48a157dd097dd1379299370e1ed99ce976df0
355d24f0 
Status: Downloaded newer image for busybox:latest 
 ---> 6ad733544a63 
Step 2/2 : CMD echo Hola Mundo!! 
 ---> Running in ca5ffaa44155 
 ---> eea3e1c44e6f 
Removing intermediate container ca5ffaa44155 
Successfully built eea3e1c44e6f 
 
 
El proceso de compilación continuará y, después de completarse, mostrará lo 
siguiente: 
Successfully built eea3e1c44e6f 
 
 
6	Es	un	programa	que	combina	muchas	utilidades	estándares	de	Unix	en	un	solo	ejecutable	pequeño.	
			https://es.wikipedia.org/wiki/Busybox	
7	Dockerfile	no	puede	estar	en	el	directorio	raíz	
8	El	uso	de	este	nombre	viene	del	retroacrónimo	"Daemon",	Disk	And	Execution	MONitor	
				https://es.wikipedia.org/wiki/Demonio_(informática)	
	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 30	
En el ejemplo anterior, la imagen fue construida por el ID DE IMAGEN 
eea3e1c44e6f. 
Usemos esta imagen para abrir un contenedor mediante el uso del comando 
docker de la siguiente manera: 
docker run eea3e1c44e6f 
 
$ docker run eea3e1c44e6f 
Hola Mundo!! 
 
Con muy poco esfuerzo, hemos podido crear una imagen con busybox como 
imagen base, y hemos podido extender esa imagen para producir ¡¡Hola 
Mundo!!. Esta es una aplicación simple, pero las imágenes a escala 
empresarial también pueden realizarse utilizando la misma tecnología. 
 
Ahora corremos el comando: 
docker images 
 
$ docker images 
REPOSITORY TAG IMAGE ID CREATED 
SIZE 
<none> <none> eea3e1c44e6f 23 minutes ago 
 
Aquí, se sorprenderá al ver que el nombre de IMAGEN (REPOSITORY) y 
TAG se han enumerado como <ninguno>. Esto se debe a que no 
especificamos ninguna imagen o nombre de TAG cuando construimos esta 
imagen. Puede especificar un nombre de IMAGEN y opcionalmente un 
nombre de TAG mediante el uso del comando etiqueta docker, como se 
muestra aquí: 
docker tag eea3e1c44e6f busyboxplus 
 
El enfoque alternativo es construir la imagen con un nombre de imagen 
durante el tiempo de construcción mediante la opción -t para el comando 
docker build, como se muestra aquí: 
docker build -t busyboxplus . 
 
$ docker build -t busyboxplus . 
Sending build context to Docker daemon 2.048kB 
Step 1/2 : FROM busybox:latest 
 ---> 6ad733544a63 
Step 2/2 : CMD echo Hola Mundo!! 
 ---> Using cache 
 ---> eea3e1c44e6f 
Successfully built eea3e1c44e6f 
Successfully tagged busyboxplus:latest 
$ docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE 
busyboxplus latest eea3e1c44e6f 36 minutes ago 1.13MB 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 31	
4.2 Sintaxis para escribir un Dockerfile 
 
Vamos a explicar la sintaxis que se debe utilizar al escribir un archivo 
Dockerfile. 
# Este es el símbolo de comentario 
 
INSTRUCCIÓN argumento 
 
La línea de instrucción de Dockerfile está formada por dos componentes, 
donde la línea de instrucción comienza con la instrucción en sí misma, que 
es seguida por los argumentos para la instrucción. La instrucción podría 
escribirse en mayúsculas o minúsculas, en otras palabras, no distingue entre 
mayúsculas y minúsculas. Sin embargo, la práctica o convención estándar es 
usar mayúsculas para diferenciarlo de los argumentos. Echemos otro vistazo 
al contenido de Dockerfile en nuestro ejemplo anterior: 
 
FROM busybox:latest 
CMD echo Hola Mundo!! 
 
La línea de comentarios en Dockerfile debe comenzar con el símbolo #. El 
símbolo # después de una instrucción se considera como un argumento. Si el 
símbolo # está precedido por un espacio en blanco, entonces el sistema de 
compilación de docker lo consideraría como una instrucción desconocida y 
saltaría la línea. Ahora, comprendamos mejor estos casos mencionados con 
la ayuda de un ejemplo para comprender mejor la línea de comentarios: 
 
# Esto es un comentario válido dentro de Dockerfile 
 
CMD echo ### Bienvenido a Docker ### 
 
 # instrucción desconocida 
 
 
 
 
 
 
 
 
 
 
 
 
 
4.3 Construcción de Instrucciones en el Dockerfile 
4.3.1 Instrucción	FROM	
El sistema de compilación Docker ignora cualquier línea vacía en 
Dockerfile, por lo que se anima al autor de Dockerfile a agregar 
comentarios y líneas vacías para mejorar sustancialmente la 
legibilidad de Dockerfile. 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 32	
La instrucción FROM es la más importante y es la primera 
instrucción válida de un Dockerfile. Establece la imagen base para el 
proceso de compilación. Las siguientes instrucciones usarían esta 
imagen base y construirían sobre ella. El sistema de compilación 
Docker le permite usar de manera flexible las imágenes creadas por 
cualquier persona. También puede ampliarlos añadiéndoles 
características más precisas y prácticas. De forma predeterminada, el 
sistema de compilación Docker busca en el host Docker las 
imágenes. Sin embargo, si la imagen no se encuentra en el host 
Docker, entonces el sistema de compilación Docker extraerá la 
imagen del Registro de Docker Hub públicamente disponible. El 
sistema de compilación Docker devolverá un error si no puede 
encontrar la imagen especificada en el host Docker y el Registro 
Docker Hub. 
La sintaxis de FROM es la siguiente: 
FROM <image>[:<tag>] 
 
• <image>:	Este	es	el	nombre	de	la	imagen	base	que	se	va	a	
utilizar.	
• <tag>:	Esta	es	la	etiqueta	opcional	que	vamos	a	usar	para	
identificar	 la	 imagen	 que	 se	 va	 a	 utilizar.	 Si	 no	 se	 usa	 el	
Docker	asume	que	utilizará	la	última	imagen	subida.	
Ejemplos: 
 FROM Centos 
 FROM ubuntu:16.04 
 
Docker permite el uso de múltiples instrucciones FROM pero esta 
práctica puede traer muchos conflictos 
 
4.3.2 Instrucción	MAINTAINER	
La instrucción MAINTAINER establece el campo Autor de las 
imágenes generadas. La instrucción LABEL es una versión mucho 
más flexible de esto y debe usarla en su lugar, ya que permite 
configurar cualquier metadato que requiera y se puede ver 
fácilmente, por ejemplo, con Docker Inspection. Para establecer una 
etiqueta correspondiente al campo MAINTAINER, puede usar: 
LABEL maintainer="SvenDowideit@home.org.au" 
 
4.3.3 Instrucción	COPY	
La instrucción COPY le permite copiar los archivos del host Docker 
al sistema de archivos de la nueva imagen. La siguiente es la sintaxis 
de la instrucción COPY: 
COPY <src> ... <dst> 
Los términos del código anterior tienen las explicaciones que se 
muestran aquí: 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 33	
• <src>: este es el directorio fuente, el archivo en el contexto de 
compilación o el directorio desde donde se invocó el comando docker 
build. 
• ...: Esto indica que múltiples archivos de origen pueden ser 
especificados directamente o especificados por comodines. 
• <dst>: esta es la ruta de destino para la nueva imagen en la que se 
copiará el archivo o directorio de origen. Si se han especificado 
varios archivos, la ruta de destino debe ser un directorio y debe 
terminar con una barra inclinada /. 
 
Se recomienda usar una ruta absoluta para el directorio de destino o 
un archivo. 
En ausencia de una ruta absoluta, la instrucción COPY supondrá que 
la ruta de destino comenzará desde root /. La instrucción COPY es lo 
suficientemente potente como para crear un nuevo directorio y 
sobrescribir el sistema de archivos en la imagen recién creada. 
En el siguiente ejemplo, copiaremos el directorio html del contexto 
de compilación fuente a /var/www/html, que está en el sistema de 
archivos de imagen, utilizando la instrucción COPY, como se 
muestra aquí:COPY html /var/www/html 
 
Aquí hay otro ejemplo de múltiples archivos (httpd.conf y magic) que 
se copiarán desde el contexto de compilación de origen a 
/etc/httpd/conf/, que está en el sistema de archivos de la imagen: 
COPY httpd.conf magic /etc/httpd/conf/ 
 
4.3.4 Instrucción	ADD	
La instrucción ADD es similar a la instrucción COPY. Sin embargo, 
además de la funcionalidad admitida por la instrucción COPY, la 
instrucción ADD puede manipular los archivos TAR y las URL 
remotas. 
Sintaxis de la instrucción ADD 
ADD <src> ... <dst> 
 
• <src>:	este	es	el	directorio	fuente,	el	archivo	en	el	contexto	
de	 compilación	 o	 el	 directorio	 desde	 donde	 se	 invocó	 el	
comando	docker	build.		Sin	embargo,	la	diferencia	notable	
es	que	la	fuente	puede	ser	un	archivo	TAR	almacenado	en	
el	contexto	de	compilación	o	ser	una	URL	remota.	
• ...:	Esto	indica	que	múltiples	archivos	de	origen	pueden	ser	
especificados	directamente	o	especificados	por	comodines.	
• <dst>	:	Esta	es	la	ruta	de	destino	para	la	nueva	imagen	en	
la	que	se	copiará	el	archivo	o	directorio	de	origen.	
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 34	
Aquí hay un ejemplo para demostrar el procedimiento para copiar 
múltiples archivos fuente a los diversos directorios de destino en el 
sistema de archivos de imágenes objetivo. En este ejemplo, hemos 
tomado un archivo TAR (web-page-config.tar) en el contexto de 
compilación de origen con el archivo de configuración de http 
daemon y los archivos para las páginas web se almacenan en la 
estructura de directorios adecuada, como se muestra a continuación: 
$ tar tf web-page-config.tar 
etc/httpd/conf/httpd.conf 
var/www/html/index.html 
var/www/html/aboutus.html 
var/www/html/images/welcome.gif 
var/www/html/images/banner.gif 
 
La siguiente línea en el contenido de Dockerfile tiene una instrucción 
ADD para copiar el archivo TAR (web-page-config.tar) a la imagen 
de destino y extraer el archivo TAR del directorio raíz (/) de la 
imagen de destino, como se muestra aquí: 
ADD web-page-config.tar / 
 
Por lo tanto, la opción TAR de la instrucción ADD se puede usar 
para copiar múltiples archivos a la imagen objetivo. 
 
4.3.5 Instrucción	ENV	
La instrucción ENV establece una variable de entorno en la nueva 
imagen. Una variable de entorno es un par de clave-valor, a la que 
cualquier secuencia de comandos o aplicación puede acceder. Las 
aplicaciones de Linux usan mucho las variables de entorno para una 
configuración inicial. 
Sintaxis de la instrucción ENV 
ENV <key> <value> 
 
Los términos del código indican lo siguiente: 
• <key>: esta es la variable de entorno 
• <value>: este es el valor que se debe establecer para la variable de 
entorno 
 
Las siguientes líneas dan dos ejemplos para la instrucción ENV, 
donde en la primera línea DEBUG_LVL se ha establecido en 3 y, en 
la segunda línea, APACHE_LOG_DIR se ha establecido en 
/var /log /apache: 
 
ENV DEBUG_LVL 3 
ENV APACHE_LOG_DIR /var/log/apache 
 
4.3.6 Instrucción	USER	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 35	
La instrucción USER establece la ID de usuario inicial o el Nombre 
de usuario en la nueva imagen. De forma predeterminada, los 
contenedores se iniciarán con la raíz como ID de usuario o UID. 
Básicamente, la instrucción USER modificará la identificación de 
usuario predeterminada de la raíz a la especificada en esta 
instrucción. 
La sintaxis de la instrucción USER es: 
USER <UID>|<UName> 
 
Las instrucciones de USER aceptan <UID> o <UName> como su 
argumento: 
• <UID>:	esta	es	una	ID	de	usuario	numérica	
• <UName>:	este	es	un	nombre	de	usuario	válido	
 
El siguiente es un ejemplo para configurar el ID de usuario 
predeterminado en el momento del inicio en 73. Aquí 73 es la ID 
numérica del usuario: 
USER 73 
 
4.3.7 Instrucción	WORKDIR	
La instrucción WORKDIR cambia el directorio de trabajo actual de / 
a la ruta especificada por esta instrucción. Las instrucciones 
siguientes, como RUN, CMD y ENTRYPOINT también funcionarán 
en el directorio establecido por la instrucción WORKDIR. 
La sintaxis de la instrucción WORKDIR es: 
WORKDIR <dirpath> 
 
Donde <dirpath> es la ruta para que el directorio de trabajo se 
establezca. La ruta puede ser absoluta o relativa. En el caso de una 
ruta relativa, será relativa a la ruta anterior establecida por la 
instrucción WORKDIR. Si el directorio especificado no se encuentra 
en el sistema de archivos de imágenes objetivo, entonces se creará el 
directorio. 
Un ejemplo de la instrucción WORKDIR es: 
WORKDIR /var/log 
 
4.3.8 Instrucción	VOLUME	
La instrucción VOLUME crea un directorio en el sistema de archivos 
de imágenes, que luego puede usarse para montar volúmenes desde el 
host Docker u otros contenedores. 
La instrucción VOLUME tiene dos tipos de sintaxis, como se 
muestra aquí: 
• El	 primer	 tipo	 es	 exec	 o	 JSON	 array	 (todos	 los	 valores	
deben	estar	dentro	de	doublequotes	(")):	
VOLUME ["<mountpoint>"] 
• El	segundo	tipo	es	shell	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 36	
VOLUME <mountpoint> 
En la línea anterior, <mountpoint> es el punto de montaje que 
debe crearse en la nueva imagen. 
 
4.3.9 Instrucción	EXPOSE	
La instrucción EXPOSE abre un puerto de red de contenedor para 
comunicarse entre el contenedor y el mundo externo. 
La sintaxis de la instrucción EXPOSE es la siguiente: 
EXPOSE <port>[/<proto>] [<port>[/<proto>]...] 
 
• <port>:	este	es	el	puerto	de	red	que	debe	estar	expuesto	al	
mundo	exterior.	
• <proto>:	 este	 es	 un	 campo	 opcional	 proporcionado	 para	
un	protocolo	de	transporte	específico,	como	TCP	y	UDP.	Si	
no	 se	 ha	 especificado	 ningún	 protocolo	 de	 transporte,	
entonces	se	supone	que	TCP	es	el	protocolo	de	transporte.	
 
El siguiente es un ejemplo de la instrucción EXPOSE dentro de un 
Dockerfile que expone el número de puerto 7373 como un puerto 
UDP y el número de puerto 8080 como un puerto TCP. Como se 
mencionó anteriormente, si el protocolo de transporte no se ha 
especificado, entonces se supone que el transporte TCP es el 
protocolo de transporte: 
EXPOSE 7373/udp 8080 
 
4.3.10 Instrucción	RUN	
La instrucción RUN puede ejecutar cualquier comando en tiempo de 
compilación. Esto quiere decir que puede ejecutar comandos en la 
imagen base antes de crearse o de otra forma, correr comandos al 
construirse la imagen. La recomendación general es ejecutar 
comandos múltiples usando una instrucción RUN. Esto reduce las 
capas en la imagen Docker resultante porque el sistema Docker crea 
inherentemente una capa para cada vez que se invoca una instrucción 
en Dockerfile. 
La instrucción RUN tiene dos tipos de sintaxis: 
• El	primero	es	el	tipo	de	shell,	como	se	muestra	aquí:	
RUN <command> 
Aquí, el <command> es el comando del shell que debe 
ejecutarse durante el tiempo de compilación. Si se utiliza este 
tipo de sintaxis, el comando siempre se ejecuta utilizando / 
bin / sh -c. 
• El	segundo	tipo	de	sintaxis	es	exec	o	la	matriz	JSON,	como	
se	muestra	aquí:	
RUN ["<exec>", "<arg-1>", ..., "<arg-n>"] 
o <exec>:	 este	 es	 el	 ejecutable	 que	 se	 ejecutará	
durante	el	tiempo	de	compilación.	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 37	
o <arg-1>,	...,	<arg-n>:	Estas	son	las	variables	(cero	o	
más)	número	de	argumentos	para	el	ejecutable.	
 
En el primer ejemplo, usaremos la instrucción RUN para agregar una 
línea de saludo al archivo .bashrc en el sistema de archivos de imagen 
objetivo, como se muestra aquí: 
RUN echo "echo Welcome to Docker!" >> /root/.bashrc 
 
El segundo ejemplo es un Dockerfile, que tiene las instrucciones para 
crear una imagen de la aplicación Apache2 encima de la imagen base 
de Ubuntu 14.04. 
########################################### 
# Dockerfile to build an Apache2 image 
########################################### 
# Base image is Ubuntu 
FROM ubuntu:14.04 
# Author: Yo 
MAINTAINER Yo yo@gmail.com 
# Install apache2 package 
RUN apt-get update && \ 
apt-get install -y apache2 && \ 
apt-get clean 
 
4.3.11 Instrucción	CMD	
La instrucción CMD puede ejecutar cualquier comando(o 
aplicación), que es similar a la instrucción RUN. Sin embargo, la 
diferencia principal entre esos dos es el tiempo de ejecución. El 
comando proporcionado a través de la instrucción RUN se ejecuta 
durante el tiempo de compilación, mientras que el comando 
especificado a través de la instrucción CMD se ejecuta cuando el 
contenedor se inicia desde la imagen recién creada. Por lo tanto, la 
instrucción CMD proporciona una ejecución predeterminada para 
este contenedor. Sin embargo, puede ser anulado por los argumentos 
del comando RUN de docker. Cuando la aplicación termina, el 
contenedor también terminará junto con la aplicación y viceversa. 
La instrucción CMD tiene tres tipos de sintaxis, como se muestra 
aquí: 
 
• El	 primer	 tipo	 de	 sintaxis	 es	 el	 tipo	 de	 shell,	 como	 se	
muestra	aquí:	
• CMD	<comando>	
• Dentro	de	esto,	el	<comando>	es	el	comando	de	shell,	que	
debe	ejecutarse	durante	el	lanzamiento	del	contenedor.	Si	
se	 utiliza	 este	 tipo	 de	 sintaxis,	 el	 comando	 siempre	 se	
ejecuta	utilizando	/	bin	/	sh	-c.	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 38	
• El	segundo	tipo	de	sintaxis	es	exec	o	la	matriz	JSON,	como	
se	muestra	aquí:	
CMD ["<exec>", "<arg-1>", ..., "<arg-n>"] 
Dentro de esto, los términos del código significan lo 
siguiente: 
o <exec>:	 este	 es	 el	 ejecutable,	 que	 se	 ejecutará	
durante	el	tiempo	de	lanzamiento	del	contenedor.	
o <arg-1>,	...,	<arg-n>:	Estas	son	las	variables	(cero	o	
más)	números	de	los	argumentos	para	el	ejecutable.	
• El	tercer	tipo	de	sintaxis	también	es	exec	o	la	matriz	JSON,	
que	 es	 similar	 al	 tipo	 anterior.	 Sin	 embargo,	 este	 tipo	 se	
usa	para	configurar	 los	parámetros	predeterminados	a	 la	
instrucción	ENTRYPOINT,	como	se	muestra	aquí:	
CMD ["<arg-1>", ..., "<arg-n>"] 
Dentro de esto, los términos del código significan lo 
siguiente: 
o <arg-1>,	 ...,	 <arg-n>:	 Estos	 son	 los	 números	
variables	 (cero	 o	más)	 de	 los	 argumentos	 para	 la	
instrucción	ENTRYPOINT	
 
 
 
 
 
 
 
 
 
En este ejemplo, creamos una imagen usando Dockerfile con la 
instrucción CMD para proporcionar una ejecución predeterminada y 
luego lanzar un contenedor usando la imagen elaborada. El siguiente 
es Dockerfile utiliza una instrucción CMD para hacer eco de un 
texto: 
 
#######################################################
# 
# Dockerfile to demonstrate the behaviour of CMD 
#######################################################
# 
# Build from base image busybox:latest 
FROM busybox:latest 
# Author: Yo 
MAINTAINER Yo <yo@gmail.com> 
# Set command for CMD 
CMD ["echo", "Dockerfile CMD demo"] 
 
Sintácticamente, puede agregar más de una instrucción 
CMD en Dockerfile. Sin embargo, el sistema de 
compilación ignoraría todas las instrucciones CMD excepto 
la última. En otras palabras, en el caso de múltiples 
instrucciones CMD, solo la última instrucción CMD sería 
efectiva. 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 39	
Ahora ejecutamos los siguientes comandos: 
docker build -t cmd-demo . 
docker run cmd-demo 
 
4.3.12 Instrucción	ENTRYPOINT	
La instrucción ENTRYPOINT ayudará a crear una imagen para 
ejecutar una aplicación (punto de entrada) durante el ciclo de vida 
completo del contenedor, que se habría separado de la imagen. 
Cuando finaliza la aplicación del punto de entrada, el contenedor 
también se da por terminado junto con la aplicación y viceversa. Por 
lo tanto, la instrucción ENTRYPOINT haría que el contenedor 
funcionara como un ejecutable. Funcionalmente, ENTRYPOINT es 
similar a la instrucción CMD, pero la principal diferencia entre los 
dos es que la aplicación de punto de entrada se inicia utilizando la 
instrucción ENTRYPOINT, que no puede anularse utilizando los 
argumentos del comando de ejecución Docker. Sin embargo, estos 
argumentos del comando de ejecución del docker se pasarán como 
argumentos adicionales a la aplicación de punto de entrada. Habiendo 
dicho esto, Docker proporciona un mecanismo para anular la 
aplicación de punto de entrada a través de la opción --entrypoint en el 
comando de ejecución de la ventana acoplable. La opción --
entrypoint solo puede aceptar palabras como argumentos, por lo que 
tiene una funcionalidad limitada. 
Sintácticamente, la instrucción ENTRYPOINT es muy similar a las 
instrucciones RUN y CMD, y tiene dos tipos de sintaxis, como se 
muestra aquí: 
 
• El	 primer	 tipo	 de	 sintaxis	 es	 el	 tipo	 de	 shell,	 como	 se	
muestra	aquí:	
ENTRYPOINT <comando> 
Aquí, <comando> es el comando de shell, que se ejecuta 
durante el lanzamiento del contenedor. Si se utiliza este tipo 
de sintaxis, el comando siempre se ejecuta utilizando /bin/sh -
c. 
• El	segundo	tipo	de	sintaxis	es	exec	o	la	matriz	JSON,	como	
se	muestra	aquí:	
ENTRYPOINT ["<exec>", "<arg-1>", ..., "<arg-n>"] 
Dentro de esto, los términos del código significan lo 
siguiente: 
o <exec>:	 este	 es	 el	 ejecutable,	 que	 debe	 ejecutarse	
durante	el	tiempo	de	lanzamiento	del	contenedor.	
o <arg-1>,	...,	<arg-n>:	Estas	son	las	variables	(cero	o	
más)	números	de	argumentos	para	el	ejecutable.	
 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 40	
 
 
 
 
 
 
 
 
Para obtener una mejor comprensión de la instrucción 
ENTRYPOINT, creamos un imagen mediante el uso de Dockerfile 
con la instrucción ENTRYPOINT, y luego lanzamos un contenedor 
mediante el uso de la imagen hecha a mano. El siguiente es 
Dockerfile con una instrucción ENTRYPOINT para hacer eco de un 
texto: 
#######################################################
# 
# Dockerfile to demonstrate the behaviour of ENTRYPOINT 
#######################################################
# 
# Build from base image busybox:latest 
FROM busybox:latest 
# Author: Yo 
MAINTAINER Yo <yo@gmail.com> 
# Set entrypoint command 
ENTRYPOINT ["echo", "Dockerfile ENTRYPOINT demo"] 
 
Aplicamos los siguientes comandos: 
docker build -t entrypoint-demo . 
docker run entrypoint-demo 
 
El contenedor se ejecutará como un ejecutable haciendo eco de la 
cadena de demostración Dockerfile ENTRYPOINT y luego saldrá de 
inmediato. Si pasamos argumentos adicionales al comando de 
ejecución de la ventana acoplable, el argumento adicional pasará al 
comando de punto de entrada. La siguiente es una demostración del 
lanzamiento de la misma imagen con los argumentos adicionales 
dados al comando de ejecución del docker: 
docker run entrypoint-demo con argumentos adicionales 
 
 
 
4.3.13 Instrucción	ONBUILD	
La instrucción ONBUILD registra una instrucción de compilación en 
una imagen y esta se desencadena cuando se crea otra imagen 
utilizando esta imagen como su imagen base. Cualquier instrucción 
de compilación puede registrarse como desencadenante y esas 
instrucciones se activarán inmediatamente después de la instrucción 
Sintácticamente, puede agregar más de una instrucción 
ENTRYPOINT en Dockerfile. Sin embargo, el sistema de 
compilación ignoraría todas las instrucciones 
ENTRYPOINTexcepto la última. En otras palabras, en el 
caso de múltiples instrucciones ENTRYPOINT, solo la 
última instrucción ENTRYPOINT sería efectiva. 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 41	
FROM en el archivo Dockerfile en sentido descendente. Por lo tanto, 
la instrucción ONBUILD se puede utilizar para diferir la ejecución de 
la instrucción de compilación desde la imagen base a la imagen 
objetivo. 
La sintaxis de la instrucción ONBUILD es la siguiente: 
ONBUILD <INSTRUCTION> 
 
Dentro de esto, <INSTRUCTION> es otra instrucción de 
compilación de Dockerfile, que se activará más tarde. La instrucción 
ONBUILD no permite el encadenamiento de otra instrucción 
ONBUILD. Además, no permite las instrucciones FROM y 
MAINTAINER como activadores ONBUILD. 
Aquí hay un ejemplo de la instrucción ONBUILD: 
ONBUILD ADD config /etc/appconfig 
 
4.4 Laboratorios 
 
Vamos a crear una imagen para ejecutar un archivo html en Apache. Para 
este ejemplo usaré comandos Linux, pero usted puede usar comandos o 
interfaces gráficas de Windows o Mac. 
• Creamos	primeramente	un	directorio	
mkdir lab1 
• Nos	posicionamosen	el	directorio	lab1	
• cd		/home/lab1	
• Ahora	creamos	nuestro	archivo	index.html9,	con	algún	tipo	de	
información,	y	lo	guardamos	en	el	directorio	lab1	
• Utilizamos	un	editor	de	texto	y	creamos	el	Dockerfile	
FROM ubuntu:16.04 
MAINTAINER Yo yo@gmail.com 
RUN apt-get update && apt-get -y install apache2 
EXPOSE 80 
CMD /usr/sbin/apache2ctl -D FOREGROUND 
• Construimos	la	imagen	
docker build –t lab1 . 
• Confirmamos	que	nuestra	imagen	se	ha	creado	
docker images 
• Corremos	nuestro	contenedor		
docker run -d -p 85:80 lab1 
• Verificamos	que	nuestro	contenedor	se	esta	ejecutando	
docker ps 
• Ahora	entramos	a	nuestro	navegador	y	tecleamos	lo	siguiente	
localhost:85 
• Debe	aparecer	la	siguiente	pantalla	
 
9	Utilice	Word	para	crear	mi	archivo	index.html,	revise	la	figura	4.2	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 42	
 
 
Figura 4.1 Prueba de ejecución de la imagen lab1 
 
Modifiquemos nuestro Dockerfile 
• Debemos	detener	el	contenedor	que	estamos	ejecutando	del	ejemplo	
anterior	
docker ps 
docker stop ID CONTAINER 
• Entramos	a	Dockerfile	e	introducimos	el	comando	
COPY index.html /var/www/html 
FROM ubuntu:16.04 
MAINTAINER Yo yo@gmail.com 
RUN apt-get update && apt-get -y install apache2 
COPY index.html /var/www/html 
EXPOSE 80 
CMD /usr/sbin/apache2ctl -D FOREGROUND 
• Volvemos	a	correr	el	comando	
docker build –t lab1 . 
• Ejecutamos	el	comando	
docker run -d -p 85:80 lab1 
• Ahora	entramos	a	nuestro	navegador	y	tecleamos	lo	siguiente	
• Localhost:85	
• Debe	aparecer	la	página	index.html	que	creo	anteriormente	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 43	
 
Figura 4.2 Despliegue de index.html usando un Dockerfile 
 
 
 
 
Laboratorio 2 (Ejemplo del blog de Albert Coronado10) 
 
Vamos a crear un Dockerfile utilizando dos archivos package json. 
• Crear	 un	 directorio	 y	 posicionarse	 en	 él	 y	 construir	 los	 siguientes	
archivos.	
=========Nombre del archivo: package.json=============== 
{ 
 "name": "docker_web_app", 
 "version": "1.0.0", 
 "description": "Node.js on Docker", 
 "author": "Yo mismo", 
 "main": "server.js", 
 "scripts": { 
 "start": "node server.js" 
 }, 
 "dependencies": { 
 "express": "^4.13.3" 
 } 
} 
 
 
 
 
 
10 https://www.albertcoronado.com/2019/11/13/formacion-docker-creando-imagenes-para-
nuestros-microservicios-y-dockerizar-aplicaciones/ 
	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 44	
=========Nombre del archivo server.js=========== 
'use strict'; 
 
const express = require('express'); 
const exec = require('child_process').execSync; 
 
// Constants 
const PORT = 8080; 
 
// App 
const app = express(); 
app.get('/', function (req, res) { 
 var result=""+exec( "ping -c 1 google.com" ); 
 
 while ( result.indexOf("\n")!=-1 ) 
 result=result.replace("\n","<br/>"); 
 
 res.send( '<h1>Test ping</h1>'+result ); 
}); 
 
app.listen(PORT); 
console.log('Running on http://localhost:' + PORT); 
 
==============Dockerfile================= 
FROM node:argon 
 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
 
COPY package.json /usr/src/app 
COPY server.js /usr/src/app 
 
RUN npm install 
 
EXPOSE 8080 
CMD ["npm","start"] 
 
• Ahora	construimos	la	imagen	utilizando	el	Dockerfile	
docker build -t appjs:latest . 
docker images # Verificar que se creo la imagen 
• Creamos	el	contenedor	usando	la	imagen	creada	
docker run -p 8080:8080 appjs:latest 
• Abrimos	nuestro	navegador	y	tecleamos	
localhost:8080 
• Debe	aparecer	una	imagen	similar	
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 45	
 
Figura 4.3 Pantalla de Prueba de Ping 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 46	
5. Publicación de Imágenes 
 
En este capítulo usaremos como base el capítulo “Publishing Images” del libro 
“Learning Docker” de Pethuru Raj. 
 
Publicación de las imágenes de Docker se refiere al almacenamiento de las 
mismas en repositorios públicos o privados para el uso de la comunidad 
mundial. Aprenderemos a usar a capacidad el Docker Hub y repositorios de 
confianzas para el almacenamientos de imágenes producidas por nosotros. 
 
Los repositorios de Docker Hub le permiten compartir imágenes con 
compañeros de trabajo, clientes o la comunidad de Docker en general. Si está 
construyendo sus imágenes internamente, ya sea en su propio daemon Docker o 
utilizando sus propios servicios de integración continua, puede insertarlos en un 
repositorio de Docker Hub que agregue a su cuenta de Docker Hub u 
organización. 
 
Alternativamente, si el código fuente de su imagen Docker está en GitHub o 
Bitbucket, puede usar un repositorio de "compilación automatizada", que está 
construido por los servicios de Docker Hub 
 
5.1 Entendiendo el Docker Hub 
Docker Hub es un lugar central utilizado para mantener las imágenes de 
Docker en un repositorio público o privado. Docker Hub proporciona 
funciones, como un repositorio de imágenes Docker, autenticaciones de 
usuarios, creación automatizada de imágenes, integración con GitHub o 
Bitbucket, y administración de organizaciones y grupos. El componente 
Docker Registry del Docker Hub gestiona el repositorio. 
Docker Registry es un sistema de almacenamiento utilizado para almacenar 
las imágenes. La creación automatizada es una característica de Docker 
Hub,. El siguiente diagrama muestra las características típicas: 
 
 
 
 
 
 
 
 
 
 
Figura 5.1 
Conformación del Docker Hub 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 47	
Para trabajar con Docker Hub, debe registrarse en Docker Hub y crear una 
cuenta usando el enlace en https://hub.docker.com/account/signup. Puede 
actualizar el nombre de usuario, la contraseña y la dirección de correo 
electrónico, como se muestra en la siguiente captura de pantalla: 
 
 
Figura 5.2 Registro en Docker Hub 
 
Después de completar el proceso de registro, debe completar la verificación 
recibida en un correo electrónico. Una vez completada la verificación del 
correo electrónico, verá algo similar a la siguiente captura de pantalla 
cuando inicie sesión en Docker Hub: 
 
 
Figura 5.3 Cuenta en Docker Hub 
 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 48	
5.2 Empujando Imágenes al Docker Hub 
 
Aquí, creamos una imagen Docker en la máquina local, y empujaremos esta 
imagen al Docker Hub. Debe realizar los siguientes pasos en esta sección: 
1. Cree	una	imagen	Docker	en	la	máquina	local	realizando	una	de	las	
siguientes	acciones:	
a. Usando	el	comando	docker	commit	
b. Usando	el	comando	docker	commit	con	Dockerfile	
2. Empuje	esta	imagen	creada	al	Docker	Hub.	
3. Borre	la	imagen	del	Docker	Hub.	
 
Vamos a crear una imagen ubuntu y también vamos a crear un archivo, un 
directorio y lo subiremos al Docker Hub. Los comandos serán los 
siguientes: 
docker run -i --name="contenedordeejemplo" -t ubuntu /bin/bash 
 
Unable to find image 'ubuntu:latest' locally 
latest: Pulling from library/ubuntu 
Digest: 
sha256:ec0e4e8bf2c1178e025099eed57c566959bb408c6b478c284c1683bc
4298b683 
Status: Downloaded newer image for ubuntu:latest 
 
root@5b4c56a3cef7:/# 
root@5b4c56a3cef7:/# mkdir minuevodir 
root@5b4c56a3cef7:/# cd minuevodir 
root@5b4c56a3cef7:/minuevodir# echo 'Este es mi nuevo contenedor 
para hacer una imagen y subirla al Docker Hub' >minuevoarchivo 
root@5b4c56a3cef7:/minuevodir# cat minuevoarchivo 
Este es mi nuevo contenedor para hacer una imagen y subirla al Docker 
Hub 
root@5b4c56a3cef7:/minuevodir# 
Salimos del contenedor sin detenerlo ctrl + pq 
Usaremos el comando commit para crear la nueva imagen 
docker commit -m="NuevaImagen" contenedordeejemplo 
pana507/imagenparahub 
sha256:86e6e9e421c8453742dcef5bf6a7e95f22085b3ce6d1ef736a4ee7f19
900fd14 
Nos conectamos al Docker Hub 
docker login 
Login with your Docker ID to push and pull images from Docker Hub. 
If you don't have a Docker ID, head over to https://hub.docker.com to 
create one. 
Username: pana507 
Password: 
Login Succeeded 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 49	
Colocamos la imagen creada en el Docker Hub 
docker push pana507/imagenparahub 
The push refers toa repository [docker.io/pana507/imagenparahub] 
63811b8fe7d9: Pushed 
f17fc24fb8d0: Mounted from library/ubuntu 
6458f770d435: Mounted from library/ubuntu 
5a876f8f1a3d: Mounted from library/ubuntu 
d2f8c05d353b: Mounted from library/ubuntu 
48e0baf45d4d: Mounted from library/ubuntu 
latest: digest: 
sha256:dd04e0e168581019b57c6ae78273f0b0ee0538df6e0a681be80a2801
5cfa10f1 size: 1564 
 
Comprobamos que la imagen se encuentra en nuestro repositorio en Docker 
Hub. 
 
Entramos a hub.docker.com, nos registramos con nuestra cuenta y debe 
aparecer la siguiente pantalla: 
 
 
Figura 5.4 Pantalla de repositorio personal en Docker Hub 
 
Vamos a detener el contenedor, borrar la imagen del repositorio local para 
luego ejecutar el comando run para que la misma se descargue directamente 
del Docker Hub. 
docker ps 
docker stop contenedordeejemplo 
docker rm contenedordeejemplo 
docker ps 
docker images 
docker rmi pana507/imagenparahub 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 50	
docker images 
docker run -i --name="nuevocontenedorparahub" -t 
pana507/imagenparahub /bin/bash 
Unable to find image 'pana507/imagenparahub:latest' locally 
latest: Pulling from pana507/imagenparahub 
50aff78429b1: Already exists 
f6d82e297bce: Already exists 
275abb2c8a6f: Already exists 
9f15a39356d6: Already exists 
fc0342a94c89: Already exists 
0b6d68de9675: Pull complete 
Digest: 
sha256:dd04e0e168581019b57c6ae78273f0b0ee0538df6e0a681be80a2801
5cfa10f1 
Status: Downloaded newer image for pana507/imagenparahub:latest 
root@8485fa1eedfd:/# 
ctrl + pq 
docker images 
 
Eliminamos la imagen del Docker Hub, entrando a nuestra cuenta y debe 
aparecer la siguiente pantalla: 
 
 
Figura 5.5 Cuenta en Dcoker Hub 
 
Debemos hacer click en DETAILS, y tomar la pestaña Settings y debe 
aparecer la siguiente pantalla: 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 51	
 
Figura 5.6 Pantalla para eliminar la imagen del Docker Hub 
 
Para eliminar la imagen creada debemos primero convertir el repositorio 
público en privado 
 
 
Figura 5.7 Convertir el repositorio publico a privado 
 
Nuevamente tomamos la opción Setting y ejecutamos la opción Delete, debe 
aparecer la siguiente pantalla: 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 52	
 
 
Figura 5.8 Pantalla para eliminar la imagen del Docker Hub 
 
 
5.3 Repositorios Privados Locales 
Docker Hub proporciona un repositorio público y privado. El repositorio 
público es gratuito para los usuarios y privado es un servicio pago. Los 
planes con repositorios privados están disponibles en diferentes tamaños, 
como una suscripción micro, pequeña, mediana o grande. 
 
Normalmente, a las empresas no les gusta conservar sus imágenes Docker en 
un repositorio público o privado de Docker. Prefieren mantener, dar 
mantenimiento y respaldar su propio repositorio. Por lo tanto, Docker 
también proporciona la opción para que las empresas creen e instalen su 
propio repositorio. 
 
Vamos a crear un repositorio en la máquina local usando la imagen de 
registro proporcionada por Docker. Vamos a ejecutar el contenedor de 
registro en la máquina local, utilizando la imagen de registro de Docker: 
docker run -p 5000:5000 -d registry 
Unable to find image 'registry:latest' locally 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 53	
latest: Pulling from library/registry 
ab7e51e37a18: Pull complete 
c8ad8919ce25: Pull complete 
5808405bc62f: Pull complete 
f6000d7b276c: Pull complete 
f792fdcd8ff6: Pull complete 
Digest: 
sha256:9d295999d330eba2552f9c78c9f59828af5c9a9c15a3fbd1351df03e
aad04c6a 
Status: Downloaded newer image for registry:latest 
12fe262e8dacab9acff71d8694fe56a19ebf5ca9981cc936ce864201a90800a6 
 
Debemos crear un tag para identificar la imagen dentro del repositorio 
docker tag 86e6e9e421c8 localhost:5000/pana507/imagenparahub 
 
Ahora hacemos un push a un nuevo registro 
docker push localhost:5000/pana507/imagenparahub 
The push refers to a repository [localhost:5000/pana507/imagenparahub] 
63811b8fe7d9: Pushed 
f17fc24fb8d0: Pushed 
6458f770d435: Pushed 
5a876f8f1a3d: Pushed 
d2f8c05d353b: Pushed 
48e0baf45d4d: Pushed 
latest: digest: 
sha256:dd04e0e168581019b57c6ae78273f0b0ee0538df6e0a681be80a28015cfa10
f1 size: 1564 
 
Si utilizamos un comando docker images se verá que la nueva imagen 
aparece en nuestro repositorio local y no en el Docker Hub. 
 
 
 
 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 54	
6. Trabajando con Contenedores 
 
 Para está sección del curso nos basaremos del manual escrito por Evaristo 
García Zambrana11, el cual nos brinda buenos ejemplos para trabajar Docker. 
También nos apoyaremos del libro Docker Quick Start Guide12. 
 
6.1 Ejecutar o crear un nuevo contenedor 
Antes de ejecutar un contenedor debemos estar seguro que contamos con la 
imagen o imágenes necesarias para construir nuestro contenedor. Para eso 
usaremos el comnado docker image ls, el cual mostrará la lista y sus 
columnas de propiedades. 
 
 
 
 Figura 6.1 Comando docker image ls 
 
A partir del 2017, por la gran cantidad de comandos y opciones asociadas 
que se han ido creando con cada versión nueva de Docker, se decidió que los 
comandos de la CLI se divirían en grupos funcionales de administración. 
Ahora hay un grupo de administración de contenedores y otro grupo de 
administración de imagenés. Esto lleva un cambio en la ejecución de 
comandos en Docker. 
 
# el commando con la nueva sintaxis... 
docker container run hello-world 
# el commando con la vieja sintaxis… 
docker run hello-world 
 
Estos cambios permiten una mejor visibilidad de los comandos, pero Docker 
todavía reconoce los comandos con la vieja sintaxis. 
 
Usted puede utilizar el comando docker container para conocer los 
comandos asociados a la versión de Docker que esta utilizando. 
 
 
 
11	Docker	y	Docker	Swarm,	IES	Gonzalo	Nazareno,	Dos	Hermanas	(Sevilla),	2017	
12	Docker	Quick	Start	Guide,	Earl	Waud,	Packt,	2018	
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 55	
6.2 Comando version 
 
Este es comando es muy útil para conocer los detalles de la versión de 
Docker instalado en su equipo. 
 
docker version 
 
 
 
Figura 6.2 Salida del comando docker version 
 
Recuerde que todos los comandos de Docker tienen incorporado un 
rico sistema de ayuda. Pruébelo ingresando cualquier parte de un comando 
de Docker y utilizando el parámetro --help. Por ejemplo, 
docker container run --help 
 
6.3 Comando container run 
 
Ya este comando lo hemos usado anteriormente en su formato de sintaxis 
antiguo 
 
docker run hello-world 
 
Con la sintaxis nueva sería 
 
docker container run hello-world 
 
Este comando le dice a Docker que desea ejecutar un contenedor basado en 
la imagen descrita como hello-world. Puede que se pregunte: ¿se instaló la 
imagen del contenedor hello-world cuando instalé Docker? La respuesta es 
no. El comando docker run mirará el caché de la imagen del contenedor 
local para ver si hay una imagen del contenedor que coincida con la 
descripción del contenedor solicitado. Si lo hay, Docker ejecutará el 
contenedor desde la imagen en caché. Si la imagen del contenedor deseada 
MANUAL	DE	DOCKER	–	Dr.Armando	Jipsion	 56	
no se encuentra en el caché, Docker se comunicará con Docker registry para 
intentar descargar la imagen del contenedor, almacenándola en el caché local 
en el proceso. Docker ejecutará el contenedor recién descargado desde el 
caché. 
 
El Docker registry es un almacén central donde se almacenan las imagenés 
que se utilizan para la construcción de contenedores. Por ahora, solo 
comprenda que hay un caché de imágenes local y un almacén de imágenes 
remotas. Se puede descargar imagenés desde el registry utilizando el 
comando: docker image pull ….. Por ejemplo, 
 
docker image pull hello-world 
 
La descripción de cada imagen de contenedor consta de tres partes: 
• Nombre	de	host	del	registro	de	Docker	
• Nombre	separado	por	barra	
• Nombre	de	etiqueta	(TAG)	
 
La primera parte, el nombre de host del registro, no lo hemos visto ni 
utilizado todavía,

Continuar navegando