├── 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 | ![Alt text](imgs/ps1.png?raw=true "Up time") 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 | ![Alt text](imgs/ps2.png?raw=true "exit") 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 | ![Alt text](imgs/exec.png?raw=true "Exec") 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 | --------------------------------------------------------------------------------