Creación y administración de servicios
utilizando Docker
Luis Eduardo Montoya
Patrocinado por:
.Net Conf Mx 2018
Comunidades asociadas:
.Net Conf Mx 2018
¿Qué es docker?
• Docker es un proyecto de código abierto que sirve para desplegar
aplicaciones en contenedores de software, creando una capa extra de
abstracción en diferentes sistemas operativos.
.Net Conf Mx 2018
¿Qué es un contenedor?
• Paquete de elementos que pueden ejecutar aplicaciones en cualquier
Sistema Operativo
¿Cómo funciona?
.Net Conf Mx 2018
VM vs Contenedor
.Net Conf Mx 2018
¿Por qué se ha vuelto tan popular?
• Los contenedores fueron creados en el 2013, de modo de que no es algo nuevo.
Lo que ha ayudado a docker a crecer es que el uso de contenedores hace más
fácil el despliegue de aplicaciones.
• Las características de docker que lo han ayudado son:
• Flexible
• Ligero
• Intercambiable
• Portable
• Escalable
• Apilable
.Net Conf Mx 2018
Docker en Azure
.Net Conf Mx 2018
Docker en Azure
• Azure nos provee una forma sencilla para poder crear una máquina
con Docker ya instalado, en vez de tener que instalar Docker a mano.
• Pasos:
1. Abrir el portal de Azure: https://portal.azure.com
2. Hacer click en Crear Recursos
3. Hacer click en contenedores y seleccionar Docker on Ubuntu Server
4. Escribir el hostname, un usuario y la contraseña o llave privada con la
que se conectará al server.
.Net Conf Mx 2018
5. Hacer click en crear y esperar a que se cree nuestra máquina virtual con
docker
6. Una vez creada nos podemos ir a Máquinas Virtuales y ahí nos debería
aparecer nuestra nueva máquina
7. Ya creada le damos click y nos vamos a la parte de Direcciones IP para
conocer su IP pública y poder accede a ella
8. Por medio de la IP nos intentamos conectar por medio de ssh a través de
una consola
• ssh user@hostname
.Net Conf Mx 2018
9. Probamos que docker esté funcionando por medio del siguiente commando
• docker ps
.Net Conf Mx 2018
Fundamentos de Docker
.Net Conf Mx 2018
Fundamentos
• Volumen: carpeta compartida entre el host y el contenedor. Su uso
principal es para manipular archivos que están dentro del contenedor
o para poder salvar esos archivos en caso del que el contenedor se
elimine
• Network: los contenedores pueden conectarse a una red virtual para
poder comunicarse entre ellos
.Net Conf Mx 2018
Fundamentos
• Imagen: es un paquete que incluye todo lo que se necesita para
correr una aplicación
• Ej: httpd, centos, mysql, java
• Contenedor: es una instancia de la imagen que se está siendo
ejecutada. (Este contenedor funciona igual que un proceso en Linux)
.Net Conf Mx 2018
Comandos Principales
• docker container ls – despliega los contenedores existentes
• docker ps – despliega los contentedores que se están ejecutando
actualmente en segundo plano
• docker images – despliega las imágenes que se tienen disponibles en
el servidor
.Net Conf Mx 2018
Banderas principals en docker run
• -t: Crea un pseudo-TTY
• -i: Habilita al contenedor a tener entradas de comandos
• -p <puerto_host>:<puerto_contenedor>: mapea el puerto del host al
puerto del contenedor
• -d: para que el contenedor siga corriendo en segundo plano
• -v <ruta_host>/<nombre_volumen>:<ruta_contenedor>: mapea una ruta
del host a una ruta en el contenedor
• -e <variable=valor>: crea una variable de entorno dentro del contenedor
• --name <nombreDelContenedor>
• --hostname <nombreDelHostnameDentroDelContenedor>
.Net Conf Mx 2018
Hello World
.Net Conf Mx 2018
Hello World
• Primero hay que correr el servicio de docker:
• sudo systemctl start docker o service docker start
• Ahora vamos a correr un servidor web en el puerto 8080
• docker run –dti --name httpd –p 8080:80 httpd
• Vamos a Firefox a la dirección: localhost:8080
.Net Conf Mx 2018
Hello World
• Primero hay que correr el servicio de docker:
• sudo systemctl start docker o service docker start
• Ahora vamos a correr un servidor web en el puerto 8080
• docker run –dti --name httpd –p 8080:80 httpd
• Vamos a Firefox a la dirección: localhost:8080
.Net Conf Mx 2018
Regla de Seguridad en Azure
• Ir a la máquina virtual y dar click en ella
• Nos vamos a Puntos de conexión
• Damos click en agregar para añadir una nueva regla
• Poner el nombre de la regla, Puerto público y Puerto privado.
• Se pueden agregar reglas para control de acceso
.Net Conf Mx 2018
Hello World
• Accedemos al contenedor para poder ver la configuración del
servidor web
• docker exec –ti httpd /bin/bash
• cat conf/httpd.conf
• Observemos la página web que está en /usr/local/apache2/htdocs y
podemos ver el index.html que se encuentra ahí
.Net Conf Mx 2018
Editar un archivo
• Los contenedores por defecto no cuentan con un editor de texto
• Existen varias formas de editar un archivo de un contenedor
• Opción 1.
• docker cp es un comando que nos permite copiar algo que este en nuestro host a
nuestro contenedor. Su función es similar a la de scp:
• docker cp <archivoEnHost> <contenedor>:<rutaDondeSeráCopiado> - Esto es para
copiar del host al contenedor
• docker cp <contenedor><archivoEnContenedor> <rutaDondeSeráCopiadoEnHost> -
Esto es para copiar del contenedor al host
• Ej:
.Net Conf Mx 2018
Editar un archivo
• Opción 2.
• Al momento de lanzar el contenedor, crear un volumen vinculándolo a una
carpeta, de modo que cualquier modificación dentro de la carpeta será
obtenida en el contenedor
• Ejercicio:
• Eliminamos el contenedor: docker stop httpd docker rm httpd
• Creamos el volumen: docker volume create httpData
• Volvemos a crear el contenedor pero ahora vinculándolo a una carpeta de nuestro home
• docker run –dti --name httpd –p 8080:80 –v httpData:/usr/local/apache2 httpd
• Editamos el archivo en nuestro host en la carpeta
/var/lib/docker/volumes/httpData/_data/htcdocs/
• Probamos si el cambio fue exitoso
.Net Conf Mx 2018
Dockerfile
.Net Conf Mx 2018
Dockerfile
• Dockerfile es un archivo de texto que contiene comandos para crear tu propia
imagen
• Esta imagen creada se puede “versionar” y subirse a un repositorio de imágenes
• Ejemplo de un dockerfile:
• Nota: por cada linea que se cree, se creará una capa extra
.Net Conf Mx 2018
Comandos principals en Dockerfile
• FROM <nombreImagenBase>: nombre de la imagen base de la cuál vamos a partir
• MAINTENER <nombre>: autor del Dockerfile
• RUN <comando>: ejecución de comandos dentro de la imagen (normalmente para actualizar, instalar o crear
directorios)
• CMD [<comando>]: comando que se ejecutará por default al momento de crear una nueva instancia de la
imagen
• ENV <key>=<valor>: Seteo de variables de entorno
• EXPOSE <Puerto>: Puerto que se quiere poner público
• COPY <origen><destino>: copia un archivo del host a la imagen
• ENTRYPOINT [<comando>]: similar a CMD pero este comando se ejecutará pesé a si se específique un
comando en docker run o no
• VOLUME <directorio>: crear partición dentro del contenedor (no relacionada con el host)
• WORKDIR <directorio>: para poner directorio donde se trabaja (cd)
.Net Conf Mx 2018
Creando nuestra propia imagen
• Dockerfile:
.Net Conf Mx 2018
• Construir la imagen
• docker build –t my-httpd-image –f
<nombreArchivo> .
• Crear un contenedor
• docker run –dti --name apache2 –p
8080:80 my-httpd-image
Docker Hub
.Net Conf Mx 2018
Docker Hub
• Docker Hub es un repositorio de imágenes en línea donde se pueden
guardar imágenes creadas por nosotros o descargar unas ya
existentes.
• Las imágenes normalmente vienen con un README el cuál nos explica
cómo podemos configurarlas o ejecutarlas
• Nos sirve para guardar el versionamiento de nuestras imágenes
• Ejemplo de imágenes:
• https://hub.docker.com/_/mysql/
.Net Conf Mx 2018
Descargar imagen de Docker Hub
• Al momento de ejecutar el comando de Docker run siempre se indica
el nombre de la imagen a tomar.
• docker run –dti --name mysql –p 803306:3306 mysql
• El nombre de la imagen puede recibir un parámetro extra, indicando
que versión es la que se debe de utilizar
• docker run –dti --name mysql –p 803306:3306 mysql:5.7
.Net Conf Mx 2018
• Al no indicar nada, se toma la última versión disponible en el
repositorio
• Para poder descargar una imagen sin necesidad de ejecutar el Docker
run se usa el siguiente comando
• docker pull <nombreDeLaImagen>
• NOTA: también se puede agregar la versión (el tag) a la imagen para descargar
una específica
.Net Conf Mx 2018
Subiendo una imagen
• Al momento de crear una cuenta en Docker Hub podemos subir
nuestros propios repositorios de imágenes
• El nombre de la imagen tiene un formato específico:
• <Docker_User_id>/<nombre_de_la_imagen>:<tag_o_versión>
.Net Conf Mx 2018
• Para poder utilizar Docker Hub se debe de loguear a su plataforma
• Una vez logueados, se debe de cambiar el nombre de la imagen al
formato establecido
• docker tag <nombre_imagen>:<tag> <nuevo_nombre_imagen>:<tag>
.Net Conf Mx 2018
• Una vez que tengamos la nueva imagen renombrada ya se puede
subir a Docker Hub:
• docker push <nombre_imagen>
• Ejemplo:
.Net Conf Mx 2018
Conclusiones
.Net Conf Mx 2018
Conclusiones
• Diferentes entornos, diferentes configuraciones, diferentes mundos
• 66% de las empresas que prueban Docker se quedan con él
• PHP, Ruby, Java y Node son los principales frameworks utilizados en
contenedores
• Empresas que utilizan docker: PayPal, Spotify, ADP
• ¿Docker Swarm?
.Net Conf Mx 2018
Creación y administración de servicios
utilizando Docker
Luis Eduardo Montoya

Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018

  • 2.
    Creación y administraciónde servicios utilizando Docker Luis Eduardo Montoya
  • 3.
  • 4.
  • 5.
    ¿Qué es docker? •Docker es un proyecto de código abierto que sirve para desplegar aplicaciones en contenedores de software, creando una capa extra de abstracción en diferentes sistemas operativos. .Net Conf Mx 2018 ¿Qué es un contenedor? • Paquete de elementos que pueden ejecutar aplicaciones en cualquier Sistema Operativo
  • 6.
  • 7.
  • 8.
    ¿Por qué seha vuelto tan popular? • Los contenedores fueron creados en el 2013, de modo de que no es algo nuevo. Lo que ha ayudado a docker a crecer es que el uso de contenedores hace más fácil el despliegue de aplicaciones. • Las características de docker que lo han ayudado son: • Flexible • Ligero • Intercambiable • Portable • Escalable • Apilable .Net Conf Mx 2018
  • 9.
  • 10.
    Docker en Azure •Azure nos provee una forma sencilla para poder crear una máquina con Docker ya instalado, en vez de tener que instalar Docker a mano. • Pasos: 1. Abrir el portal de Azure: https://portal.azure.com 2. Hacer click en Crear Recursos 3. Hacer click en contenedores y seleccionar Docker on Ubuntu Server 4. Escribir el hostname, un usuario y la contraseña o llave privada con la que se conectará al server. .Net Conf Mx 2018
  • 11.
    5. Hacer clicken crear y esperar a que se cree nuestra máquina virtual con docker 6. Una vez creada nos podemos ir a Máquinas Virtuales y ahí nos debería aparecer nuestra nueva máquina 7. Ya creada le damos click y nos vamos a la parte de Direcciones IP para conocer su IP pública y poder accede a ella 8. Por medio de la IP nos intentamos conectar por medio de ssh a través de una consola • ssh user@hostname .Net Conf Mx 2018
  • 12.
    9. Probamos quedocker esté funcionando por medio del siguiente commando • docker ps .Net Conf Mx 2018
  • 13.
  • 14.
    Fundamentos • Volumen: carpetacompartida entre el host y el contenedor. Su uso principal es para manipular archivos que están dentro del contenedor o para poder salvar esos archivos en caso del que el contenedor se elimine • Network: los contenedores pueden conectarse a una red virtual para poder comunicarse entre ellos .Net Conf Mx 2018
  • 15.
    Fundamentos • Imagen: esun paquete que incluye todo lo que se necesita para correr una aplicación • Ej: httpd, centos, mysql, java • Contenedor: es una instancia de la imagen que se está siendo ejecutada. (Este contenedor funciona igual que un proceso en Linux) .Net Conf Mx 2018
  • 16.
    Comandos Principales • dockercontainer ls – despliega los contenedores existentes • docker ps – despliega los contentedores que se están ejecutando actualmente en segundo plano • docker images – despliega las imágenes que se tienen disponibles en el servidor .Net Conf Mx 2018
  • 17.
    Banderas principals endocker run • -t: Crea un pseudo-TTY • -i: Habilita al contenedor a tener entradas de comandos • -p <puerto_host>:<puerto_contenedor>: mapea el puerto del host al puerto del contenedor • -d: para que el contenedor siga corriendo en segundo plano • -v <ruta_host>/<nombre_volumen>:<ruta_contenedor>: mapea una ruta del host a una ruta en el contenedor • -e <variable=valor>: crea una variable de entorno dentro del contenedor • --name <nombreDelContenedor> • --hostname <nombreDelHostnameDentroDelContenedor> .Net Conf Mx 2018
  • 18.
  • 19.
    Hello World • Primerohay que correr el servicio de docker: • sudo systemctl start docker o service docker start • Ahora vamos a correr un servidor web en el puerto 8080 • docker run –dti --name httpd –p 8080:80 httpd • Vamos a Firefox a la dirección: localhost:8080 .Net Conf Mx 2018
  • 20.
    Hello World • Primerohay que correr el servicio de docker: • sudo systemctl start docker o service docker start • Ahora vamos a correr un servidor web en el puerto 8080 • docker run –dti --name httpd –p 8080:80 httpd • Vamos a Firefox a la dirección: localhost:8080 .Net Conf Mx 2018
  • 21.
    Regla de Seguridaden Azure • Ir a la máquina virtual y dar click en ella • Nos vamos a Puntos de conexión • Damos click en agregar para añadir una nueva regla • Poner el nombre de la regla, Puerto público y Puerto privado. • Se pueden agregar reglas para control de acceso .Net Conf Mx 2018
  • 22.
    Hello World • Accedemosal contenedor para poder ver la configuración del servidor web • docker exec –ti httpd /bin/bash • cat conf/httpd.conf • Observemos la página web que está en /usr/local/apache2/htdocs y podemos ver el index.html que se encuentra ahí .Net Conf Mx 2018
  • 23.
    Editar un archivo •Los contenedores por defecto no cuentan con un editor de texto • Existen varias formas de editar un archivo de un contenedor • Opción 1. • docker cp es un comando que nos permite copiar algo que este en nuestro host a nuestro contenedor. Su función es similar a la de scp: • docker cp <archivoEnHost> <contenedor>:<rutaDondeSeráCopiado> - Esto es para copiar del host al contenedor • docker cp <contenedor><archivoEnContenedor> <rutaDondeSeráCopiadoEnHost> - Esto es para copiar del contenedor al host • Ej: .Net Conf Mx 2018
  • 24.
    Editar un archivo •Opción 2. • Al momento de lanzar el contenedor, crear un volumen vinculándolo a una carpeta, de modo que cualquier modificación dentro de la carpeta será obtenida en el contenedor • Ejercicio: • Eliminamos el contenedor: docker stop httpd docker rm httpd • Creamos el volumen: docker volume create httpData • Volvemos a crear el contenedor pero ahora vinculándolo a una carpeta de nuestro home • docker run –dti --name httpd –p 8080:80 –v httpData:/usr/local/apache2 httpd • Editamos el archivo en nuestro host en la carpeta /var/lib/docker/volumes/httpData/_data/htcdocs/ • Probamos si el cambio fue exitoso .Net Conf Mx 2018
  • 25.
  • 26.
    Dockerfile • Dockerfile esun archivo de texto que contiene comandos para crear tu propia imagen • Esta imagen creada se puede “versionar” y subirse a un repositorio de imágenes • Ejemplo de un dockerfile: • Nota: por cada linea que se cree, se creará una capa extra .Net Conf Mx 2018
  • 27.
    Comandos principals enDockerfile • FROM <nombreImagenBase>: nombre de la imagen base de la cuál vamos a partir • MAINTENER <nombre>: autor del Dockerfile • RUN <comando>: ejecución de comandos dentro de la imagen (normalmente para actualizar, instalar o crear directorios) • CMD [<comando>]: comando que se ejecutará por default al momento de crear una nueva instancia de la imagen • ENV <key>=<valor>: Seteo de variables de entorno • EXPOSE <Puerto>: Puerto que se quiere poner público • COPY <origen><destino>: copia un archivo del host a la imagen • ENTRYPOINT [<comando>]: similar a CMD pero este comando se ejecutará pesé a si se específique un comando en docker run o no • VOLUME <directorio>: crear partición dentro del contenedor (no relacionada con el host) • WORKDIR <directorio>: para poner directorio donde se trabaja (cd) .Net Conf Mx 2018
  • 28.
    Creando nuestra propiaimagen • Dockerfile: .Net Conf Mx 2018 • Construir la imagen • docker build –t my-httpd-image –f <nombreArchivo> . • Crear un contenedor • docker run –dti --name apache2 –p 8080:80 my-httpd-image
  • 29.
  • 30.
    Docker Hub • DockerHub es un repositorio de imágenes en línea donde se pueden guardar imágenes creadas por nosotros o descargar unas ya existentes. • Las imágenes normalmente vienen con un README el cuál nos explica cómo podemos configurarlas o ejecutarlas • Nos sirve para guardar el versionamiento de nuestras imágenes • Ejemplo de imágenes: • https://hub.docker.com/_/mysql/ .Net Conf Mx 2018
  • 31.
    Descargar imagen deDocker Hub • Al momento de ejecutar el comando de Docker run siempre se indica el nombre de la imagen a tomar. • docker run –dti --name mysql –p 803306:3306 mysql • El nombre de la imagen puede recibir un parámetro extra, indicando que versión es la que se debe de utilizar • docker run –dti --name mysql –p 803306:3306 mysql:5.7 .Net Conf Mx 2018
  • 32.
    • Al noindicar nada, se toma la última versión disponible en el repositorio • Para poder descargar una imagen sin necesidad de ejecutar el Docker run se usa el siguiente comando • docker pull <nombreDeLaImagen> • NOTA: también se puede agregar la versión (el tag) a la imagen para descargar una específica .Net Conf Mx 2018
  • 33.
    Subiendo una imagen •Al momento de crear una cuenta en Docker Hub podemos subir nuestros propios repositorios de imágenes • El nombre de la imagen tiene un formato específico: • <Docker_User_id>/<nombre_de_la_imagen>:<tag_o_versión> .Net Conf Mx 2018
  • 34.
    • Para poderutilizar Docker Hub se debe de loguear a su plataforma • Una vez logueados, se debe de cambiar el nombre de la imagen al formato establecido • docker tag <nombre_imagen>:<tag> <nuevo_nombre_imagen>:<tag> .Net Conf Mx 2018
  • 35.
    • Una vezque tengamos la nueva imagen renombrada ya se puede subir a Docker Hub: • docker push <nombre_imagen> • Ejemplo: .Net Conf Mx 2018
  • 36.
  • 37.
    Conclusiones • Diferentes entornos,diferentes configuraciones, diferentes mundos • 66% de las empresas que prueban Docker se quedan con él • PHP, Ruby, Java y Node son los principales frameworks utilizados en contenedores • Empresas que utilizan docker: PayPal, Spotify, ADP • ¿Docker Swarm? .Net Conf Mx 2018
  • 38.
    Creación y administraciónde servicios utilizando Docker Luis Eduardo Montoya