Docker se ha convertido en una herramienta indispensable hoy en día para todos los que somos Desarrolladores de aplicaciones o SysAdmins, ya que como hablamos en nuestra Introducción a Docker nos brinda un entorno muy simple de aplicar en nuestras maquinas, no nos consumirá tantos recursos y podremos desarrollar / probar nuestros scripts en distintos sistemas operativos.
Tutorial práctico de Docker
Ahora luego de haber hecho la introducción pasada a Docker, y teniendo un poco más de conocimiento teórico sobre él, pasemos a un par de ejercicios prácticos.
Contenido
Instalar Docker en Ubuntu 14.04 LTS
Lo primero que debemos hacer y como buena practica antes de instalar cualquier paquete es hacer un update de nuestro sistema
apt-get update
Ahora vamos a instalar el paquete docker-io
apt-get -y install docker.io
Ahora con este par de comandos reparamos las rutas por defecto de docker
ln -sf /usr/bin/docker.io /usr/local/bin/docker sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
Finalmente y es un paso opcional, configuramos Docker para que inicie automáticamente cuando nuestra maquina se enciende
update-rc.d docker.io defaults
Instalar Docker en Debian
En el caso de Debian, debemos hace los siguientes pasos para la instalación.
Purgamos y verificamos que exista cualquier versión de Docker
apt-get purge lxc-docker* apt-get purge docker.io*
Actualizamos todo el servidor y luego nos aseguramos de que podamos trabajar las actualizaciones con https y se instalan que los certificados de CA.
apt-get update apt-get install apt-transport-https ca-certificates
Agregamos una clave GPG para las instalaciones
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
Abrimos el archivo /etc/apt/sources.list.d/docker.list si contiene información la borramos y si no existe el archivo lo creamos
Lo que debemos copiar en este archivo depende de la versión de Debian les dejamos para las distintas versiones
Debian Wheezy
echo "deb https://apt.dockerproject.org/repo debian-wheezy main" >> /etc/apt/sources.list.d/docker.list
Debian Jessie
echo "deb https://apt.dockerproject.org/repo debian-jessie main" >> /etc/apt/sources.list.d/docker.list
Debian Stretch/Sid
echo "deb https://apt.dockerproject.org/repo debian-stretch main" >> /etc/apt/sources.list.d/docker.list
Actualizamos ahora el sistema para que tome los últimos cambios
apt-get update
Verificamos las políticas de Docker a nivel de sistema operativo
apt-cache policy docker-engine
Ahora procedemos a instalar el paquete de Docker
apt-get install docker-engine
Instalar Docker en Centos 7
Como siempre procedemos a actualizar nuestro sistema con el siguiente comando
yum -y update
Ahora instalamos los paquetes necesarios para Docker
yum -y install docker docker-registry
systemctl enable docker.service
Ahora iniciamos el Servicio de Docker
systemctl start docker.service
Con este comando podemos tener el estatus actual de Docker
systemctl status docker.service
Comandos Utiles en Docker
Ahora que ya tenemos instalado en nuestra maquina Docker podremos empezar a crear nuestros contenedores en base a las imágenes disponibles en el repositorio publico de del sitio web de Docker
Aquí te dejamos unas guías de varios comandos de Docker que te seguramente debas guardarlos en tu nota ya que tendrás todo lo necesario para convertirte de a poco en un administrador profesional de Docker
docker images: listado de imágenes ya descargadas
[infra@localhost ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest c5f1cf30c96b 6 days ago 120.7 MB centos 6.6 881cca81e67f 6 months ago 202.6 MB
docker pull <ID imagen>: descargar imágen para tenerla disponible para los contenedores
[infra@localhost ~]$ sudo docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 6d28225f8d96: Pull complete 166102ec41af: Pull complete d09bfba2bd6a: Pull complete c80dad39a6c0: Pull complete a3ed95caeb02: Pull complete Digest: sha256:5718d664299eb1db14d87db7bfa6945b28879a67b74f36da3e34f5914866b71c Status: Downloaded newer image for ubuntu:latest
docker rmi <ID imagen>: borrado de una imagen
[infra@localhost ~]$ sudo docker rmi ubuntu Untagged: ubuntu:latest Deleted: sha256:c5f1cf30c96b5b55c0e6385f2ecb791790eacfdc874500ec3dd865789e358dd1 Deleted: sha256:6966dfd905fe3357994340c67347285cfce8a1791fc22806c9c0f427fbdeec40 Deleted: sha256:65faf101139189314da25357e4704f3412877d4b881d86944e9616630f2a4faa Deleted: sha256:713a70d252b71a53cf3d090acef5c1bae668cb489f5d8b1205f2cb9e0a6cd68a Deleted: sha256:3417308f5ad0aa1dd0af30817cd1bdedeb11971023a8f54668b17a29078ced1c Deleted: sha256:7aae4540b42d10456f8fdc316317b7e0cf3194ba743d69f82e1e8b10198be63c
docker history <ID imagen>: historial de una imagen
[infra@localhost ~]$ sudo docker history ubuntu IMAGE CREATED CREATED BY SIZE COMMENT c5f1cf30c96b 6 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 6 days ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB <missing> 6 days ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B <missing> 6 days ago /bin/sh -c set -xe && echo '#!/bin/sh' > /u 701 B <missing> 6 days ago /bin/sh -c #(nop) ADD file:ffc85cfdb5e66a5b4f 120.7 MB
Crear Contenedor de Ubuntu con acceso a shell
Usando docker run en la siguiente linea vamos a crear un contenedor llamado ubuntuinfra desde nuestra imagen ya descargada ubuntu:lastest y con acceso ssh por el puerto 22 ya que hemos colocado que el mismo puerto lo compartan tanto del host como el contenedor
[infra@localhost ~]$ sudo docker run -d -P -p 22:22 --name ubuntuinfra -it ubuntu:latest 4426ff3bf6603b19181844381c7f9707a71c600659e58e5917952d06a344e12d
Listado de Contenedores activos
[infra@localhost ~]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4426ff3bf660 ubuntu:latest "/bin/bash" 4 minutes ago Up 4 minutes 0.0.0.0:22->22/tcp ubuntuinfra
Iniciar Contenedor
[infra@localhost ~]$ sudo docker start ubuntuinfra ubuntuinfra
Conectarnos al Contenedor (Tip: Luego de ejecutar el attach presiona ENTER nuevamente para activar el contenedor)
[infra@localhost ~]$ sudo docker attach ubuntuinfra root@4426ff3bf660:/# root@4426ff3bf660:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
Nota: Con Crtl +D podemos salir del contenedor y volver a nuestro entorno normal
Borrar Contenedor
[infra@localhost ~]$ sudo docker rm ubuntuinfra ubuntuinfra [infra@localhost ~]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Cómo obtener Ip Privada del contenedor
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $CID
Conclusión
Luego de haber leído este primero tutorial práctico de Docker tendrás una base solida para empezar a utilizar Docker como entorno de desarrollo, donde podremos crear y probar nuestras apps en distintos entornos teniendo la ventaja de que por ninguna razón nuestro host (maquina local) no se dañe o se des-configure. Así que con Docker somos libres de configurar cualquier entorno de cualquier sistema operativo y luego destruirlo en segundos.
¿Tienes alguna duda sobre Docker? ¿De que Stack de desarrollo (Apache, Nginx, Nodejs) te gustaría que hagamos un completo tutorial con Docker?
Si te gustó esta Parte 2, sígue con la Parte 03: