Docker:
Docker es un proyecto de código abierto con el cuál podemos crear contenedores.
Un contenedor es un prisma rectangular de gran tamaño que suelen utilizar los barcos para transportar mercaderías y suele tener dentro distintos tipos de productos. Docker vendría a ser como el transportador de esos containers, es decir el barco.
Llevado a la informática se utiliza para que aplicaciones de software puedan ejecutarse en cualquier máquina, independizandose del sistema operativo.
Es una especie de empaquetado de sofware que se puede llevar de un lado a otro.
Docker permite meter todo lo que se necesite para que una aplicación funcione y se ejecute correctamente.
Por ejemplo debe contener algo como: java, tomcat, nginx, la aplicación en si misma, librerias, binarios y todo lo que necesite para funcionar.
Si llevo ese contenedor a otro servidor donde esté docker instalado debería funcionar correctamente.
Docker Hub:
Es un repositorio donde los usuarios de docker y los partners crean, testean, guardan y distribuyen imagenes de contenedores.
Es un lugar de donde me puedo bajar contenedores ya armados y listos para usar. Por ejemplo un debian oficial, un linux customizado, un ubuntu con paquetes ya instalados, un webserver ya listo para usarse, etc.
Docker Files:
Se pueden crear imágenes a partir de un archivo llamado Dockerfile.
Instalando docker:
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable"
apt-get update
apt-get install docker-ce
Verificamos que Docker se este ejecutando:
/etc/init.d/docker status
Vemos todas las imágenes de debian en dockerhub:
docker search debian
Si quiero descargar una imagen utilizo el docker pull:
docker pull debian
Para ver las imagenes que tengo ya descargadas:
docker images
Ver contenedores ejecutando:
No tenemos contenedores corriendo, por ahora solo lo descargamos.
docker ps
Ejecutar un contenedor:
Utilizaremos la imagen de debian oficial que bajamos anteriormente con el comando pull:
Utilizaremos losbparámetros -t de tty y el -i de interactivo y le decimos que ejecute un bash. Vemos como nos cambió el prompt:
docker run -t -i debian /bin/bash
Instalamos paquetes en el container:
Hacemos un update de los repositorios e instalamos nginx, wget y vim.
root@1363037a2fad:/# apt-get update && apt-get -y install wget vim nginx
Tener en cuenta que puedo salir del contenedor con exit ó Ctrl+d pero dejará de ejecutarse el contenedor.
Si quisiera volver a tener el mismo container corriendo tendría que volver a instalar todo lo que instalé antes ya que no guarde los cambios en una imagen.
Para guardar esos cambios en una imagen primero debo salir sin matar el contenedor, para eso ejecutamos Ctrl+p+q y veremos que vuelve el prompt.
Si ahora ejecutamos el comando docker ps veremos que sigue corriendo ese container:
docker ps
Crear una imagen:
Ahora voy a guardar la imagen modificada, pero con otro nombre.
Primero obtenemos el ID del contenedor en ejecución (f5b9be35915d) con el comando "docker ps".
Guardaremos los cambios en una nueva imagen llamada nginx-debian:1.0. Esto lo hacemos con "docker commit [id-del-contenedor] [nombre-nueva-imagen] por ejemplo:
docker commit f5b9be35915d nginx-debian:1.0
Verificamos la creacion de la imagen:
root@debian:~# docker images
Salimos de un contenedor sin que quede en ejecución:
Primero verificamos que no hay contenedor corriendo:
docker ps
Verificamos que imagenes podemos usar para crear un contenedor:
docker images
Iniciar un contenedor interactivo con la imagen que guardamos previamente llamada nginx-debian versión 1.0:
docker run -it nginx-debian:1.0
Salimos del contenedor con exit ó con Ctrl+d:
root@8c80b4f2c09e:/# exit
Verificamos que el contenedor no está corriendo:
docker ps
Si quiero borrar una imagen hacemos lo siguiente:
Vemos las imágenes disponibles:
docker images
Eliminamos la imagen nginx-debian v1.0:
docker rmi -f nginx-debian:1.0
Volvemos a ver que fue eliminada:
docker images
Creando una imagen con Dockerfile:
Creamos la carpeta y archivo Cockerfile y lo editamos:
mkdir -p /var/Dockerfile/nginx
vi /var/Dockerfile/nginx/Dockerfile
Dentro ponemos lo siguiente, este archivo debería utilizar un contenedor debian, indica que Hernan es el que la mantiene, actualiza los repo, instala en nginx lo expone en el puerto 8888 e inicia el demonio del nginx:
FROM debian
MAINTAINER HERNAN
RUN apt-get update && apt-get install -y nginx && apt clean
EXPOSE 8888
RUN /etc/init.d/nginx start
Ejecutamos el build posicionandonos donde está el docker file:
cd /var/Dockerfile/nginx/
docker build .
Verificamos las imagenes:
root@debian:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian-apache latest af0593cb85eb 59 seconds ago 225MB
debian latest 8d31923452f8 3 weeks ago 101MB
Vemos que no hay nada corriendo, ejecutamos la imagen debian-apache y verificamos que ahora corre:
root@debian:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@debian:~#
root@debian:~# docker run -p 8181:80 debian-apache-bis /usr/sbin/apache2ctl -D FOREGROUND
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
Si ingresamos a la ip del docker, no la del contenedor, deberíamos ingresar al puerto 8181 y nos reenviaría al apache 80 del contenedor:
http://debian:8181/
Matamos el contenedor que habia quedado corriendo:
root@debian:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68c121179ab3 debian-apache-bis "/usr/sbin/apache2ct…" 12 minutes ago Up 12 minutes 81/tcp, 0.0.0.0:8181->80/tcp vigorous_benz
root@debian:~# docker kill 68c121179ab3