DokuWiki

It's better when it's simple

User Tools

Site Tools


cheatsheet

This is an old revision of the document!


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

cheatsheet.1505139569.txt.gz · Last modified: 2017-09-11 16:19 by 170.252.72.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki