This is an old revision of the document!
Table of Contents
Curso Docker - Edificio 2 - Luis Herrera - 11 septiembre
Curso de Docker
¿qué es Docker?
Viene de una empresa llamada dotCloud, por el uso de la virtualización (el licenciamiento de VMWare es muy caro), el núcleo de Linux hay cosas para aislar procesos, así que alguien de dotCloud decidió aprovechar eso. Docker es como un envoltorio a esas características. Es decir, nació por tener un aprovechamiento del hardware y por el uso de distintas versiones de un mismo programa. La empresa dotCloud quebró…
Varias ramas de Docker: community, machine, engine enterprise y un batiburrillo de aplicaciones de Docker. La versión que nos interesa es la comunitaria (de código abierto), conocida como “moby”.
docker container run -d nginx -p 8000:80
El ponente no tiene acceso a Internet, por lo que le falla la ejecución del comando
docker images
Tiene una imagen que se llama “alpine”
docker container run -d nginx:alpine -p 8000:80
Mapea un puerto de su máquina al 80, así ya puede abrir el navegador y poner http://0.0.0.0:8000
Docker está programado en Go (recordemos Go es el Python de los hípsters) y hay cerca de 3000 contribuidores por producto. Las grandes empresas ofrecen la posibilidad de usar Docker directamente. Ejemplo de ello son empresas como: Amazon, Microsoft o Google. Goldman Sachs fue una de las primeras en usar Docker
La principal ventaja de Docker es que soporta migraciones de manera ultrarrápida, es decir su portabilidad es su principal ventaja sobre otras soluciones, por ejemplo, migrar de AWS a Azure en cuestión de segundos. Otra ventaja es su bajo impacto en el disco duro cada imagen ocupa bastante menos que una imagen virtualizado
El ponente pone la web para que veamos la evolución de salarios de especialistas en Docker: IT jobs. Además, para no instalar basura en u nuestros portátiles, nos invita que visitemos Docker play para que ejecutemos comandos de Docker, ahora bien, si quieres instalarlo, te insta a que pongas el “Docker Toolbox”, lo puedes encontrar en “https://www.docker.com/products/docker-toolbox”, lo recomienda porque nuestros ordenadores no se puede instalar cualquier cosa
Primeros comandos
Tanto si optas por la web como por local, estos serán tus primeros comandos:
docker version docker container run hello-world
Accenture tiene una página de Docker porque tiene un acuerdo de mecenazgo
Ahora me falla para ejecutar el “hello world” de los contenedores, eso es porque esta versión de ToolBox tira de una versión de VBox distinta a la que tengo instalada, así que para arreglar esto, instala el driver que te dice v5 y no el v6 (esto se hace en el asistente de instalación).
dice que devops es un concepto del primero del s.XX y pone como ejemplo: transporte marítimo con plátanos, monos y café y cómo lo haríamos. Tras la pregunta nos muestra una imagen cargado hasta las trancas. La idea de usar contenedores facilita mucho la carga del barco, así con mercancías distintas almacenadas en un formato de contenedor idéntico facilita mucho la labor del transporte y con el uso del container el comercio mundial se vio beneficiado.
La encapsulación de una aplicación viene por problemas de escalabilidad, con virtualización se tiene mejor aprovechamiento de los recursos de un servidor.
┌─────────────────────────────────────────┐ │ ┌──────────────────────────────────────┐│ │ │┌────────────────────────────────────┐││ │ ││┌────────────────┐┌────────────────┐│││ │ │││ ┌────────────┐ ││ ┌────────────┐ ││││ │ │││ │ Aplicación │ ││ │ Aplicación │ ││││ │ │││ └────────────┘ ││ └────────────┘ ││││ │ │││ ┌────────────┐ ││ ┌────────────┐ ││││ │ │││ │Sistema Ope.│ ││ │Sistema Ope.│ ││││ │ │││ └────────────┘ ││ └────────────┘ ││││ │ │││ Máquina virtual││ Máquina virtual││││ │ ││└────────────────┘└────────────────┘│││ │ ││ Hypervisor │││ │ │└────────────────────────────────────┘││ │ │ OS ││ │ └──────────────────────────────────────┘│ │ Barebone O O O │ └─────────────────────────────────────────┘
Los contenedores son procesos del SO y las imágenes son colecciones de ficheros (de entorno también)
docker container run -it bash
Cuando entramos al contenedor, si hacemos un ps resulta que el primer proceso es 1 no 0 que sería el valor en el caso de que fuera un SO nativo.
docker container ls
sale una lista de contenedores hay un id que empieza por d942.., pues como truco no necesitas todo el id para realizar una acción sobre un contenedor.
docker container stop d94
Para sacar un listado con los contenedores que tenemos accesibles desde el host
docker container ls -a docker container ls --no-trunc
Si te sale un nombre que sea boring_wozniak NO uses esa imagen, la han petado, es un código que se genera aleatoriamente, pero es un hackeo a la española, en plan: eres el intruso recodificas Docker, lo compilas y usas tu versión modificada… He buscado información sobre el “boring_wozniak” y no he encontrado nada relevante sobre hackeos varios, es algo que se introdujo en 2016.
Cuando le pasas un run a docker se ejecutan dos comandos aunque tú veas uno.
Si quieres ver el flujo de llamadas
docker system events
Para ver el log de los flujos de proceso de Docker y llamadas del ciclo de vida de Docker
docker system info
Para liberar el espacio de contenedores en desuso, borra el historial (pierdes datos que serían útiles para un forense)
docker system pruno
Imágenes
Las imágenes de Docker son la unión de múltiples capas de software, una imagen es un sistema de archivos para el contenedor y cuando se tienen varias capas entonces se hace la imagen del contenedor que es lo que usamos.
Se pueden compartir una imagen que sea dependiente de otras, es decir para tener una imagen que tiene en común otra imagen que fue usada para crear un contenedor distinto del que tienes ahora, entonces se comparte el recurso común y por tanto no se replica contendido y como tampoco tienes que descargar una imagen nueva pues tampoco es necesario descargar nada, así ganas en ventajas.
Si ejecuto múltiples veces un comando, el ejemplo mostrado es que cree un fichero, este se guarda en una capa que posee la capacidad de r/w y no es dependiente de la imagen en la que se ha ejecutado:
docker container run -it centos:7 bash echo "hola" > fichero.txt
Si ejecutas ese comando el fichero no está, pero el fichero existe en la mencionada capa
si hago cambios y quiero que persistan
docker container commit 3fc NOMBRE:1.0
Si hago esto, pierdo información y por tanto puede ser un problema en caso de que se tenga un punto de vista de la seguridad.
docker image history centos:7 docker container diff 3fc
Si hago el commit todo ese historial se pierde
docker image history NOMBRE:1.0
El contrapunto de hacer esto es que se pierde visibilidad de los cambios que se han hecho, sí es cierto que se puede saber qué pasó. Por ejemplo, quitas permisos al contenedor y lo llevas a una red separada y ejecutas comandos de forense. En este caso basta entrar al contendor y ejecutar el comando 'history
'.
Como crearlas
Con Dockerfile se pueden crear nuevas imágenes y contenedores, no es un compose es más una bitácora de comandos. Puedes usar el commit para crearlas pero el ponente recomienda que no se haga porque con el commit se crea un histórico de comandos que es la base que se emplea para crear el contenedor pero se pierden ventajas que nos ofrece Docker. En los siguientes veremos cómo es la manera recomendada de crearlo.
Buenas practicas
Cuando quieras crear una imagen, crea un directorio y allí creas el dockerfile.
docker image build -t NOMBRE .
Si no lo haces, entonces el build tardará una eternidad porque recoge toda la información del disco. Otra ventaja es que así si hay imágenes comunes, las usará para crear la imagen y eso redunda en beneficio a la hora de que otros usen tu imagen.
Como compartirlas
Crear cuenta en Hub de Docker
Ahora ya puedes construir y subir la imagen a un registro público
docker image build -t myimage . docker image push lherrera/myimage:1.0
Si lo subes te pedirá una contraseña, así que tienes que usar tu cuenta.
docker login
Si lo quieres que se guarde en un repositorio privado, tienes que poner el nombre y la URL junto al puerto
docker image tag lherrera/myimage direccion.interna.accenture:3000/myimage
Cosas Mías
Preguntas para el profesor * ¿qué hacer cuando quitas una imagen? (quitar sus imágenes dependientes) * ¿cómo crear un registro propio y tenga el control absoluto? * como hacer una red que sólo se vean los contenedores y no tengan acceso a Internet
(--no-internet, lo que hace no dejar al container salir fuera del rango definido, pero tampoco permite el tráfico a la LAN del host, es decir limitar el acceso de los contenedores a la LAN donde está el host, --internal no deja acceso a la IP del host "docker run --network="no-internet" --rm -i -t appropieate curl 192.168.2.158:8000", en resumen, que el contenedor tenga acceso a toda la LAN del host, pero sin acceso a Internet)
* ¿cómo migrar una imagen a otro servidor?
Por ejemplo, de una base de datos
* ¿cómo detectar la ejecución de comandos en un contenedor? * ¿cómo recuperar el nombre al hacer “docker ps -a”? * Ejecución de procesos y permisos, por ejemplo, que sea necesario root para algo temporal o bien permisos cruzados en la máquina nativa no necesite permisos especiales y el contenedor sí
(ejemplo claro directorio nativo para user1:user1 660 /var/log/superaplicacion y quiero que el contenedor pueda escribir ahí)
Italic Text