├── imgs
├── exec.png
├── ps1.png
└── ps2.png
├── taller3-source
├── index.html
├── build.sh
└── Dockerfile
├── taller4-source
└── docker-compose.yml
├── README.md
├── key
└── taller-docker.pem
├── taller2-acceso-puertos.md
├── taller4-docker-compose.md
├── taller1-introduccion.md
└── taller3-dockerfiles.md
/imgs/exec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergioarmgpl/taller-docker/HEAD/imgs/exec.png
--------------------------------------------------------------------------------
/imgs/ps1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergioarmgpl/taller-docker/HEAD/imgs/ps1.png
--------------------------------------------------------------------------------
/imgs/ps2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sergioarmgpl/taller-docker/HEAD/imgs/ps2.png
--------------------------------------------------------------------------------
/taller3-source/index.html:
--------------------------------------------------------------------------------
1 | Función la creación de tu primer container con Dockerfiles
2 |
--------------------------------------------------------------------------------
/taller3-source/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | docker login
3 | docker build -t apache .
4 | docker tag apache $1/apache
5 | docker push $1/apache
--------------------------------------------------------------------------------
/taller4-source/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | web:
4 | image: "nginx"
5 | ports:
6 | - "8000:80"
7 | redis:
8 | image: "redis"
9 |
--------------------------------------------------------------------------------
/taller3-source/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:18.04
2 | MAINTAINER CloudNativePlusGT
3 | RUN apt-get update
4 | RUN apt-get install -y apache2
5 | RUN rm /var/www/html/*
6 | COPY index.html /var/www/html/
7 | CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
8 | EXPOSE 80
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Talleres básicos e introductorios a Docker
2 | ## Descripción
3 | En este repositorio encontrarás algunos talleres básicos para aprender Docker, eres libre de utilizarlo, solo cuenta de donde lo sacaste :)
4 | ## Contenidos
5 | Estos son los talleres disponibles en este repositorio
6 | - [ Taller 1: Introducción a Docker ](taller1-introduccion.md)
7 | - [ Taller 2: Acceso público de containers por puertos ](taller2-acceso-puertos.md)
8 | - [ Taller 3: Creación de imágenes de containers con Dockerfiles ](taller3-dockerfiles.md)
9 | - [ Taller 4: Uso de Docker Compose ](taller4-docker-compose.md)
10 |
11 | ### Clonar el repositorio
12 | Para clonar el repositorio ejecuta el comando:
13 | ```
14 | git clone https://github.com/sergioarmgpl/taller-docker.git
15 | ```
16 |
17 | ### Usar el servidor del demo
18 | Para conectarte al servidor del demo baja la llave ubicada en la carpeta key y ejecuta:
19 | ```
20 | ssh -i taller-docker.pem root@IP_SERVIDOR
21 | ```
22 | Puedes usar putty o cualquier cliente para conectarte.
--------------------------------------------------------------------------------
/key/taller-docker.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN RSA PRIVATE KEY-----
2 | MIIEpAIBAAKCAQEAxNmFRgdtLYtzE1bQTLcy/yf1g6DsLpUSTXlySCoFCv1v2ASs
3 | AhCCOyfC2CyV+qXkGQ/2vbKcS5urrYZ9/htQQgUDye9giUHXTeuJjjSy1ZFkfiyS
4 | bpmITaPSJI1D2MDmrwAj2cIaJv6FfBIj0bHfX8yuPFm6xqWZxIj1MUXy6Z7NdZ1d
5 | Yklf5FB7ncowMAV0THo6SfrarMoYhdfICAk4V+r7+mgvvCvRYtOeUvpTSSCgrdXg
6 | bpt+G+anivoVzH9ZJNYmbSiWtIT9Qilx9LiCl3Ggs+6n1dEkZC81WUcGqWSOZPYn
7 | FoWB0YCdDp4F9iyy5PDYbIf+ZM0llrFXXCjcpQIDAQABAoIBAF5mAadngE/LA9BO
8 | XW2snOQHgZEx5pEgI7rLdqZsoCZ5Ct2IwAPtbsZ3dtS77OBaFVx/b0/hC1qmuFlq
9 | mZj1+DLwvLRl+uFXlaxkO37afrg0FQD81uv67IZu/SNSKysSto1Nf+O5VVlFzTWG
10 | bW7t4bTLLvL6BLumRmsdUpfid27YRDfOk0sTSWAN+cAXl9jJ8lz14cA4RTky2MrQ
11 | e52lGRM9hQ9FePvLLeJS2jTHr7ibcAOuC07teQWSUSjQbl4N0gPwpr353K9bkYw2
12 | dVdIbBTgcxLnMa2Ocii5SG80WgfT0uj6tzonwbyKjMaFzzzJ6/9pNk+R0QEkGLcC
13 | zg+WFjECgYEA+LBgs0WrqHiBKJOzni17Ms/6+hnqFSsAHkYNKm/USHT6E/C3v2OO
14 | Fxx93NEhssmCgKz6S9cKyVHOjrrXhigfdJ4H3HaMoxipg/4IOLwR87qeS9bZZjyj
15 | nRmZj9fBRKtE6eO/Y6A95j8weVdMII8l7lpRJrdgsvD5f9fLvnvD7/8CgYEAyqMA
16 | sAdA6wl7Pz66+1ArWaOHX87jZ7C1AsWx3aJd3vk0zkI7TZIGZrigyfL0+DU9J5os
17 | faVoCzStNFHVJuboBXxTPGM76NjAdJvPGmquznxHjaj3HN8ySa9NJCZZuphSMC3S
18 | gXm94frNcNR1yZ7+WuYB8t23sf9u8+K1dtdNc1sCgYBjzXzxVSt/r+S9oRD7kOsZ
19 | SEhDqLS9jAU/IQPVnQ2HipJ2ACvtvglfEwsb3D3231HlTAYi+4kTpCYON8OYzm9Z
20 | QLaM7nKgXZxiIUexZSCbPLCcZPvYQMu0l3p+NKsWYNmGN+UuGTfeOEu+1p7xjiE9
21 | 17crn3pKNdUbTkIxDsBihwKBgQDGN+U4TCAoykGRgF+P7sA5E0odYlf42lZ2u8Rd
22 | tbJ1pvkMuqUgIDO6z+gZJFyVYB7OWnYjAmZgb8ruXw5O25kjpJYXgEreXwkECFXy
23 | 1WDiA5hK7nmr+HlMsvqW3hzv9oiPMIO2u8wO/jNwp6QA8lKFwHEvjctfhyqVz7MK
24 | 6VmN+QKBgQCTBw4kSHqBievlek7qgLj8meVNV9UVS9lqbKpcBj4stEiAsZ5wCpy5
25 | VXKHxg6bsvX5ffX8bDrfwitDn2PWGfi3prNtm8QOBgxejlAPvlA5BVYjxgXBaAUf
26 | 7Wp3nMDsoSHgZtY4O0fJB5JHv+sm/l8dKv4sGccPRr/WEuf0W2EKvg==
27 | -----END RSA PRIVATE KEY-----
28 |
--------------------------------------------------------------------------------
/taller2-acceso-puertos.md:
--------------------------------------------------------------------------------
1 | # Taller 2: Acceso público de containers
2 | Bienvenido a este taller, en este taller aprenderás como manejar los puertos en los containers y cómo permitir que tengan acceso público a través de los mismos. Esto lo lograremos a través de crear un container con Apache instalado en el puerto 80, el cual saldrá por el puerto 8001 del host que tiene instalado Docker
3 |
4 | ## Requisitos
5 | - Tener una máquina virtual o instancia en cualquier proveedor de nube como Google Cloud, Azure, Amazon o Digital Ocean, o bien una máquina virtual local. De preferencia con Ubuntu 18.04LTS para estandarizar errores a una distribución y dar soporte en el taller.
6 | En este caso utilizaré Digital Ocean.
7 | - Haber realizado el [Taller 1](taller1-introduccion.md)
8 |
9 | ## Paso 1: Crear container y exponer los puertos
10 | Luego de haber ingresado a tu máquina virtual con Docker instalado, ejecutar el siguiente comando para crear una máquina virtual con Ubuntu:18.04
11 | ```
12 | docker run -it -d -p 8001:80 --name=apache ubuntu:18.04 /bin/bash
13 | ```
14 | ### Explicación
15 | Este comando lo que hará es que creará un container con la imagen del repositorio de Ubuntu en el DockerHub con su tag 18.04, es decir Ubuntu versión 18.04. En este caso creamos la imagen con el parámetro -d que significa que se ejecute en segundo plano o como daemon, y que exponga los puertos 80 del container con el 8001 del host, luego en vez de acceder al container por su ID, lo accesamos por el nombre "apache" y finalmente se crea el container ejecutando el comando /bin/bash dentro de él.
16 |
17 | ## Paso 2: Acceder al container que esta en segundo plano
18 | Para acceder al container debes de ejecutar el comando:
19 | ```
20 | docker exec -it apache /bin/bash
21 | ```
22 | Luego de ingresar al container actualiza el repositorio de ubuntu:
23 | ```
24 | apt-get update
25 | ```
26 | Luego instala Apache con el siguiente comando:
27 | ```
28 | apt-get install apache2
29 | ```
30 | Luego inicia apache con el comando
31 | ```
32 | /etc/init.d/apache2 start
33 | ```
34 | Luego ejecuta exit para salir del container
35 | ```
36 | exit
37 | ```
38 | ## Paso 3: Accede al sitio localizado enlazado al container
39 | Para esto debes de obtener el ip de tu máquina virtual, en este caso el IP público, dependiendo del proveedor puedes verlo con el comando, podría ser la interfaz eth0 en algunos casos:
40 | ```
41 | ifconfig -a
42 | ```
43 | y buscar el IP público o bien con el IP público asignado por tu proveedor de la nube, solo debes acceder desde el navegador como
44 | ```
45 | http://IP:PORT
46 | ```
47 | Para acceder desde el host:
48 | ```
49 | http://IP_HOST:8001
50 | ```
51 | Para acceder desde el container:
52 | ```
53 | http://IP_CONTAINER:80
54 | ```
55 | y podrás ver la instalación por defecto de Apache, también puedes usar el puerto 80 en el servidor público, colocando -p 80:80 en vez de -p 8001:80
56 | ## Paso 4: Ver IP del container
57 | En algunos casos, como prueba local podrás acceder al IP del container, ya sea desde adentro del mismo con ifconfig o bien con el comando docker en otra consola ejecutando:
58 | ```
59 | docker inspect apache | grep IPAddress
60 | ```
61 |
--------------------------------------------------------------------------------
/taller4-docker-compose.md:
--------------------------------------------------------------------------------
1 | # Taller 4: Uso de Docker Compose
2 | Bienvenido a este taller, en el cual aprenderás a utilizar Docker Compose, para orquestar de forma local container, y crear un ambiente de pruebas para agrupar microservicios a través de un archivo de configuración, el cual te permite administrar totalmente un grupo de servicios, siendo útil para pruebas en ambientes de desarrollo y un paso previo a desplegar una solución en un cluster de Kubernetes.
3 |
4 | ## Requisitos
5 | - Haber realizado el [Taller 3](taller3-dockerfiles.md)
6 | Tener una máquina virtual o instancia en cualquier proveedor de nube como Google Cloud, Azure, Amazon o Digital Ocean, o bien una máquina virtual local. De preferencia con Ubuntu 18.04LTS para estandarizar errores a una distribución y dar soporte en el taller.
7 |
8 | ## Paso 1: Descargar Docker Compose e instalarlo
9 | Para poder descargar Docker Compose debes de ingresar a la página oficial de Docker ubicada en:
10 | - https://www.docker.com/
11 | En enlace se encuentra en el sitio en la parte de la documentación oficial, en la sección de Docker Compose, en este momento el enlace es:
12 | - https://docs.docker.com/compose/install/
13 | Los pasos consisten en descargar el binario y ubicarlo en una ruta accesible en la terminal, los pasos sugeridos para instalar en Linux son:
14 | Para descargar el binario:
15 | ```
16 | sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
17 | ```
18 | Ahora se le agregan los permisos necesarios para ejecutarlo:
19 | ```
20 | sudo chmod +x /usr/local/bin/docker-compose
21 | ```
22 | Si es necesario ubicarlo en otra ruta podemos ejecutar:
23 | ```
24 | sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
25 | ```
26 | Ahora para probar que podemos accederlo ejecutamos:
27 | ```
28 | docker-compose --version
29 | ```
30 | Para desinstalarlo ejecutar:
31 | ```
32 | sudo rm /usr/local/bin/docker-compose
33 | ```
34 | ## Paso 2: Crear el archivo docker-compose.yml para agrupar microservicios
35 | Puedes crear un archivo llamado docker-compose.yml en tu ruta actual con el siguiente contenido:
36 | ```
37 | version: '3'
38 | services:
39 | web:
40 | image: "nginx"
41 | ports:
42 | - "8000:80"
43 | redis:
44 | image: "redis"
45 | ```
46 | Este archivo crea 2 containers, uno con el servidor web nginx y otro con una base de datos nosql clave valor redis, nginx se expone en el puerto local 8000 redireccionandolo al puerto 80 del container.
47 | ## Paso 3: Administrar los microservicios con Docker Compose
48 | Dentro de la carpeta que contiene le archivo docker-compose.yml ejecutamos:
49 | ```
50 | docker-compose up -d
51 | ```
52 | Este comando creara estos 2 containers en modo detach es decir en segundo plano, para poder ejecutar otros comandos para verificar si fueron creados exitosamente, para esto ejecuta:
53 | ```
54 | docker-compose ps
55 | ```
56 | Ahora bien si deseas detener estos containers, debes de ejecutar el siguiente comando:
57 | ```
58 | docker-compose stop
59 | ```
60 | Si deseas detener y borrar todo ejecuta:
61 | ```
62 | docker-compose down
63 | ```
64 | Puedes agregar el --volumes para borrar volumenes existentes de datos
65 |
66 |
67 | ## Referencias
68 | - https://docs.docker.com/compose/install/
--------------------------------------------------------------------------------
/taller1-introduccion.md:
--------------------------------------------------------------------------------
1 | # Taller 1: Introducción a Docker
2 | Bienvenido a este taller básico de Docker, esta divido en varias secciones, para que tengas una introducción rápida al uso de Docker para crear containers.
3 |
4 | ## Requisitos
5 | Tener una máquina virtual o instancia en cualquier proveedor de nube como Google Cloud, Azure, Amazon o Digital Ocean, o bien una máquina virtual local. De preferencia con Ubuntu 18.04LTS para estandarizar errores a una distribución y dar soporte en el taller.
6 | En este caso utilizaré Digital Ocean.
7 |
8 | ## Paso 1: Instalar e iniciar Docker
9 | Una vez tienes tu instancia y acceso a SSH de la misma, ingresa a la misma. Ejecuta como root o con permisos de root el siguiente comando, para actualizar los repositorios en la máquina virtual recién creada:
10 | ```
11 | apt-get update
12 | ```
13 | Luego ejecuta el siguiente comando para instalar Docker
14 | ```
15 | apt-get install docker.io
16 | ```
17 | Luego iniciar el servicio si esta apagado con:
18 | ```
19 | /etc/init.d/docker start
20 | ```
21 | ## Paso 2: Bajar imágenes del repositorio de Docker en específico la de Ubuntu 18.04
22 | Para bajar una imagen utilizamos el comando docker pull, en este caso bajaremos la imagen de Ubuntu 18.04 para esto ejecutamos el comando:
23 | ```
24 | docker pull ubuntu:18.04
25 | ```
26 | Donde ubuntu es el repositorio y el tag a bajar es 18.04, para mayor referencia puedes visitar
27 | https://hub.docker.com/ y bajar la imagen que necesites con el tag que necesites
28 | ## Paso 3: Crear container con Docker y administrarlo
29 | Para crear una imagen debes de utilizar el comando docker run, en este caso crearemos un container con Ubuntu 18.04 y ejecutaremos dentro el comando /bin/bash, el cual es una consola o terminal, nótese que al terminar la ejecución del /bin/bash con exit, el comando con el que fue creado el container termina su ejecución y el container es finalizado con el estado exit(0), finalizado más no eliminado
30 | ```
31 | docker run -it ubuntu:18.04 /bin/bash
32 | ```
33 | Al ser creado el container creara un id único, el cual puedes obtener cuando se coloca el nuevo prompt, al terminar de ejecutar el comando anterior, verás algo como:
34 | ```
35 | root@e6b272bfcbc2:/#
36 | ```
37 | Puedes realizar distintas operaciones con este id, regularmente solo necesitarás las primeras 3 o 4 letras del mismo.
38 |
39 | Continuando, luego ejecuta dentro del container el comando ls para mostrar los archivos actuales en la carpeta que te encuentres
40 | ```
41 | ls
42 | ```
43 |
44 | En otra terminal ingresa y ejecuta el comando docker ps -a podrás ver que dicho container se encuentra en estado activo: verás una salida como la siguiente:
45 | ```
46 | docker ps -a
47 | ```
48 | 
49 |
50 | Luego en la línea de comandos del container escribe exit, para salir y finalizar el container
51 | ```
52 | exit
53 | ```
54 | Ahora revisa el nuevamente los containers corriendo en otra terminal con:
55 | ```
56 | docker ps -a
57 | ```
58 | 
59 |
60 | Ahora verás que el estado es exit, es decir la ejecución del container finalizo, pero no ha sido destruido.
61 |
62 | Ahora para volver a iniciar el container ejecuta:
63 | ```
64 | docker start id_container
65 | ```
66 | Esto reinicia la ejecución de container con el id que hallas colocado
67 |
68 | Ahora para volver a ingresar, puedes ejecutar
69 | ```
70 | docker exec -it id_container /bin/bash
71 | ```
72 | 
73 |
74 | Y esto ejecutara una nueva consola adicional a la que está ejecutándose por el /bin/bash inicial, y no afectara si la finalizas con exit, el container seguirá ejecutándose.
75 |
76 | ## Paso 4: Detener y borrar el container
77 | Para detener el container puedes ejecutar el comando:
78 |
79 | ```
80 | docker stop id_container
81 | ```
82 | Esto solo detendrá su ejecución pero no lo eliminará
83 |
84 | Para poder eliminar y borrar el container debes de ejecutar el siguiente comando:
85 | ```
86 | docker rm id_container
87 | ```
88 | Para poder eliminarlo debes detener primero el container. En algunos casos debes usar la opción -f para forzar que se borre, según las dependencias con otras imágenes o containers. Puedes comprabar que ya no exista con el comando:
89 | ```
90 | docker ps -a
91 | ```
92 |
--------------------------------------------------------------------------------
/taller3-dockerfiles.md:
--------------------------------------------------------------------------------
1 | # Taller 3: Creación de imágenes de containers con Dockerfiles
2 | Bienvenido a este taller, en este taller aprenderás a crear tu propia image de Docker y subirla a tu repositorio [Docker Hub](https://hub.docker.com/), luego crearás tu container a partir de esta nueva imagen que creaste y le permitirás que tengan acceso público a través de los puertos. Esto lo lograremos a través de crear un container con Apache instalado en el puerto 80, el cual saldrá por el puerto 8888 del host que tiene instalado Docker
3 |
4 | ## Requisitos
5 | - Haber realizado el [Taller 2](taller2-acceso-puertos.md)
6 | - Tener un usuario creado en [Docker Hub](https://hub.docker.com/), recordar bien usuario y contraseña
7 |
8 | ## Paso 1: Crear el archivo Dockerfile e index.html
9 | Debes de crear un Dockerfile e index.html con tu editor de línea de comandos favorito o bien clonar este repositorio y ubicarte en la carpeta taller3-source
10 |
11 | Primero debes crear el archivo llamado "Dockerfile" con el siguiente contenido:
12 | ```
13 | FROM ubuntu:18.04
14 | MAINTAINER CloudNativePlusGT
15 | RUN apt-get update
16 | RUN apt-get install -y apache2
17 | RUN rm /var/www/html/*
18 | COPY index.html /var/www/html/
19 | CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
20 | EXPOSE 80
21 | ```
22 |
23 | Seguidamente debes crear el archivo "index.html" con una línea de texto
24 | ```
25 | Funcionó la creación de tu primer container con Dockerfiles
26 | ```
27 |
28 | ### Explicación
29 | A continuación esta la explicación de cada una de las líneas del Dockerfile
30 | FROM indica que se descargará la imagen de ubuntu con el tag 18.04
31 | MAINTAINER Indica el nombre del creador del container
32 | RUN apt-get update actualiza los repositorios de la imagen descargada
33 | RUN apt-get install apache2 instala apache2 en la imagen
34 | RUN rm /var/www/html/* borra cualquier contenido dentrol del container en la carpeta /var/www/html
35 | COPY index.html /var/www/html/ copia el archivo index.html dentro del container en la carpeta /var/www/html
36 | CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] define el comando que se ejecutará dentro del container con docker run
37 | EXPOSE 80 El puerto que expone del container será el 80
38 |
39 |
40 | ## Paso 2: Construir imagen y subirla a DockerHub para que sea pública
41 | Para poder construir una imagen a partir de un Dockerfile, primero debemos ubicarnos en la carpeta que tiene el Dockerfile en este caso taller3-source, luego ejecutamos los siguientes comandos:
42 |
43 | En caso de no tener cuenta de docker hub, acceda a [Docker Hub](https://hub.docker.com/) y cree una.
44 |
45 | Primero nos logueamos con docker login, ingresando nuestro usuario y contraseña creados en el DockerHub:
46 | ```
47 | docker login
48 | ```
49 |
50 | Luego ejecutamos como root el comando docker build para construir la imagen, en esta caso si utilizamos docker images nos mostrará que se acaba de crear una imagen llamada apache, si deseamos borrarla y no esta en uso podemos utilizar el comando docker rmi, si esta en uso debemos borrar los containers asociados a esa imagen
51 | ```
52 | docker build -t apache .
53 | ```
54 |
55 | Luego tagueamos la imagen local apache con nuestro usuario y el repositorio llamado apache(usuarioDockerHub/apache)
56 | ```
57 | docker tag apache usuarioDockerHub/apache
58 | ```
59 |
60 | Ahora subimos la imagen al repositorio
61 | ```
62 | docker push usuarioDockerHub/apache
63 | ```
64 |
65 | Si deseas puedes usar el script build.sh dandole permisos de ejecución al mismo, ejecutandoló y mandando de parámetro el nombre del usuario del DockerHub(Debes estar en la carpeta del Dockerfile)
66 | ```
67 | chmod 777 build.sh
68 | ./build usuarioDockerHub
69 | ```
70 |
71 | ## Paso 3: Utiliza la imagen creada
72 | En dado caso la imagen sea privada debes de logearte con el usuario correspondiente para poder descargarla. Para poder usarla ejecutarás el siguiente comando:
73 |
74 | ```
75 | docker run -it -d -p 8888:80 --name=apacheNuevo usuarioDockerHub/apache
76 | ```
77 |
78 | Ahora la imagen ya esta ejecutándose
79 |
80 | ## Paso 4: Monitoreo
81 | Para monitorear tu container puedes ejecutar el siguiente comando:
82 |
83 | ```
84 | docker stats apacheNuevo
85 | ```
86 | Presiona Ctrl+C para cancelar el monitoreo del container
87 |
88 | No olvides detener una imagen sino la estas utilizando.
89 |
--------------------------------------------------------------------------------