Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Transcript of Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Acerca de míDrupal Developer, Software Libre enthusiast, new technologies and geek
Ruben Egiguren a.k.a. Keopx
Blog: www.keopx.netDrupal: www.drupal.org/u/keopx
Miembro de:Drupal associationAsociación Española de DrupalG.D.O Basque Country…
Drupal Developer
Introducción
Hablaremos de¿Qué es Docker?Ventajas de trabajar con Docker (vs VM)Instalación de DockerComponentes de DockerPrincipales comandos de DockerDocker-ComposeIntroducción a DockerHubDevOpsCómo usarlo en el día a día.Demo time
¿Qué es Docker?
Docker es un proyecto de código abierto que
automatiza el despliegue de aplicaciones dentro de
contenedores de software.
Permite crear, empaquetar y distribuir sus aplicaciones
rápidamente.
Docker sirve para ejecutar “máquinas virtuales” ligeras.
Ventajas de trabajar con Docker (vs VM)Principales características:
Consume pocos recursos, lo que permite desplegar multitud
de contenedores en un mismo equipo físico.
Se elimina el problema de dependencias de las aplicaciones.
Los contenedores son livianos y facilitan su almacenaje,
transporte y despliegue.
Hubs de imagenes públicos y privados de imágenes
Compatibilidad Multi-Sistema, podremos desplegar nuestros
contenedores en multitud de plataformas.
Ventajas de trabajar con Docker Máquina Virtual (VM)
Simula a un ordenadorUn duplicado eficiente y aislado de una máquina física.Algunos sistemas:
VirtualBox (Libre - escritorio)QEMU (Libre - escritorio)VMWARE (Gratis/Pago - escritorio/server)KVM (Libre - server)XEN (Libre - server)
Ventajas de trabajar con Docker Vagrant
Vagrant es una aplicación escrita en Ruby
Facilita considerablemente la creación de entornos
virtuales de desarrollo
Vagrant nos abstrae del sistema de virtualización
Nos permite instalar y configurar el software de la VM
Herramientas de automatización
Puppet, chef, ansible,...
Más info: www.vagrantup.com
Ventajas de trabajar con Docker Docker
Crear, enviar y ejecutar aplicaciones distribuidas.
Portable, ligero en ejecución y herramienta de
empaquetado.
Más info: www.docker.com/
15
Instalación de DockerLinux (Ubuntu)
sudo apt-get remove docker docker-engine
sudo apt-get install apt-transport-https ca-certificates
curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg
| sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release
-cs) stable"Fuente: https://docs.docker.com/engine/installation/linux/ubuntu/
Instalación de DockerLinux (Ubuntu)
sudo apt-get update
sudo apt-get install docker-ce
sudo groupadd docker
sudo usermod -aG docker $USER
Fuente: https://docs.docker.com/engine/installation/linux/ubuntu/
Instalación de DockerMac
Descárgate la app para mac
Arrastrar e instalar.
Fuente: https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac
Instalación de DockerWindows
Descárgate la app para Windows
Instalar (msi)
Fuente: https://docs.docker.com/docker-for-windows/install/
c
Componentes de Docker
Image: una capa de sólo lectura que nunca cambia
(casi), semejante a una plantilla.
Container: una capa de lectura escritura. Una instancia
a partir de una image.
Hub: Es el repositorio de images docker.
Link: Acción de linkear un container con otro
Volume: Compartir carpeta/fichero entre
containers/Host
Principales comandos de Docker
Listar: $ docker images
Buscar: $ docker search alpine
Descargar: $ docker pull alpine:latest
Eliminar: $ docker rmi alpine:tag
Construir: $ docker build -t myimage:latest .
Subir: $ docker push myimage:latest
Principales comandos de DockerCrear imagen con Dockerfile
DockerfileFROM debian:jessieMAINTAINER keopx <[email protected]>RUN apt-get -qq update && apt-get -qqy upgradeRUN apt-get -qy install mysql-client mysql-server RUN apt-get -q autoclean && \ rm -rf /var/lib/apt/lists/*RUN sed -i "s/^bind-address/#bind-address/" /etc/mysql/my.cnfVOLUME /var/lib/mysqlCOPY scripts/docker-entrypoint.sh /usr/local/bin/RUN chmod a+x /usr/local/bin/docker-entrypoint.shRUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compatENTRYPOINT ["docker-entrypoint.sh"]EXPOSE 3306CMD ["mysqld"]
Fuente: https://github.com/keopx/docker-mysql/blob/master/5.5/Dockerfile
Principales comandos de DockerLanzar docker
Build
$ docker build -t .
Lanzar
$ docker run hello-world
Correr el bash de un Ubuntu
$ docker run -it ubuntu bash
Principales comandos de DockerComandos básicos containers
Listar
$ docker ps -a
Ejecutar a partir de un image:tag
$ docker run --name mycontainer -ti alpine:latest
/bin/sh
Start|Stop|Restart
$ docker start|stop|restart mycontainer
Eliminar
$ docker rm mycontainer
Docker ComposeInstalación de Docker Compose
Sirve para manejar distintos containers.Instalación:Mediante curl:$ curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
Mediante pip:$ sudo pip install docker-compose
Verificar:$ docker-compose --version
Docker ComposeCrear docker-compose.yml
Sirve para manejar distintos containers.Crear archivo docker-compose.yml:version: '2'services: web: image: keopx/apache-php:7.0 ports: - "8008:80" links: - mysqlmysql: image: keopx/mysql:5.5 ports: - "3306:3306" volumes: - ./data/database:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=drupal - MYSQL_USER=drupaluser - MYSQL_PASSWORD=drupalpass
Fuente: https://github.com/keopx/docker-lamp/blob/master/docker-compose.yml
Docker ComposePrincipales comandos de Docker
● Ejecutar el comando:
$ docker-compose up (-d)
● Abrir en browser: http://localhost:8008
● En caso de usar Mac OS X o Windows reemplazar
localhost con la ip de:
$ boot2docker ip
Fuente: https://github.com/keopx/docker-lamp/blob/master/docker-compose.yml
Introducción a DockerHub
Crear un repositorio en Docker Hub que obtenga los
Dockerfile de un repositorio de GitHub y construya las
imágenes de los Dockerfile de forma automática
cuando haya cambios en los archivos dockerfile de
GitHub.
Crear una cuenta en Docker Hub
Subir el archivo Dockerfile a un repositorio de
GitHub/Bitbucket
Crear el repositorio en DockerHub y la build automática
DevOps
DevOps es un acrónimo inglés de development
(desarrollo) y operations (operaciones)
Qué ofrece
Entornos configurados para su uso
Entornos aislados
Evitar conflictos de versiones y/o configuraciones
Agilizar la puesta a punto de los entornos de
desarrollo/testing/producción
Entornos CI
DevOps
Pero la maquina virtual solo es una parte
Aísla el sistema pero…
No nos facilita muchas operaciones
Nos mantiene lo que hagamos, pero y si cambio
algo y se “rompe”
No podemos desplegarlo tal y como está a
producción
...
Cómo usarlo en el día a día
Sistemas homogéneos
Mismas versiones
Mismas configuraciones
Todos en el proyecto usan el mismo entorno
Se acabó el, “en mi maquina funciona”
No hay excepciones
Si se requiere un cambio se realiza en la
configuración o en el contenedor
Exportable a producción *
Cómo usarlo en el día a día
Comienzas un nuevo proyecto
Clonas el repo del proyecto
Arrancas docker compose
Se supone que es más cómodo para sistemas
complejos.
Importas la base de datos
Puede que tengas incluso un setup.sh que haga
esto
Ya puedes comenzar a trabajar