Parte 1 -> Orientación 
Tags: docker, espanol, devops, containers
Published: 2019-10-01 17:49:33


<h2>Conceptos</h2>

Docker es una plataforma para desarrolladores y administradores de sistemas para desarrollar, implementar y ejecutar aplicaciones con contenedores. El uso de contenedores de Linux para implementar aplicaciones se denomina `containerization`. Los contenedores no son nuevos, pero su uso para implementar aplicaciones fácilmente sí lo es.

`Containerization` es cada vez más popular porque los contenedores son:

- Flexibles: incluso las aplicaciones más complejas se pueden contener en contenedores.

- Ligeros: los contenedores aprovechan y comparten el núcleo del host.

- Intercambiables: pueden implementar actualizaciones y mejoras sobre la marcha.

- Portátiles: pueden construir localmente, implementar en la nube y ejecutar en cualquier lugar.

- Escalables: pueden aumentar y distribuir automáticamente las réplicas del contenedor.

- Apilables: pueden apilar servicios verticalmente y sobre la marcha.

<h3>Imágenes y contenedores</h3>

Un contenedor se inicia ejecutando una imagen. Una imagen es un paquete ejecutable que incluye todo lo necesario para ejecutar una aplicación: el código, un tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración.

Un contenedor es una instancia de tiempo de ejecución de una imagen: en qué se convierte la imagen en la memoria cuando se ejecuta (es decir, una imagen con estado o un proceso de usuario). Puede ver una lista de sus contenedores en ejecución con el comando docker ps, tal como lo haría en Linux.

<h2>Contenedores y máquinas virtuales</h2>

Un contenedor se ejecuta de forma nativa en Linux y comparte el núcleo de la máquina host con otros contenedores. Ejecuta un proceso discreto, no ocupa más memoria que cualquier otro ejecutable, lo que lo hace liviano.

Por el contrario, una máquina virtual (VM) ejecuta un sistema operativo "invitado" completo con acceso virtual a los recursos del host a través de un hipervisor. En general, las máquinas virtuales proporcionan un entorno con más recursos que la mayoría de las aplicaciones necesitan.

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/8c5h2o0hwoxdwmp0t7ay.png)


<h2>Prepare su entorno de trabajo</h2>

Instale una versión mantenida de Docker Community Edition (CE) o Enterprise Edition (EE) en una plataforma compatible.

> Para la integración completa de Kubernetes

> - Kubernetes en Docker Desktop para Mac está disponible en 17.12 Edge (mac45) o 17.12 Stable (mac46) y versiones posteriores.
> - Kubernetes en Docker Desktop para Windows está disponible en 18.06.0 CE (win70) y superior.

[Instalar docker](https://docs.docker.com/install/)

<h3>Test Docker version</h3>

1. Ejecute `docker --version` y asegúrese de tener una versión compatible de Docker:

    `Docker version 17.12.0-ce, build c97c6d6`

2. Ejecute `docker info` para ver aún más detalles sobre su instalación de Docker:

    `Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
     Images: 0
     Server Version: 17.12.0-ce
     Storage Driver: overlay2
     ...`


<h3>Test instalación de Docker</h3>

1. Comprueba que tu instalación funciona ejecutando la simple imagen de Docker, hello-world:

```
docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...
```

2. Enumere la imagen de hello-world que se descargó a su máquina:

```docker image ls```

3. Liste el contenedor hello-world (generado por la imagen) que sale después de mostrar su mensaje. Si todavía se estuviera ejecutando, no necesitaría la opción --all:

```
docker container ls --all

CONTAINER ID     IMAGE           COMMAND      CREATED            STATUS
54f4984ed6a8     hello-world     "/hello"     20 seconds ago     Exited (0) 19 seconds ago
```

<h2>Resumen y hoja de trucos</h2>

```
## List Docker CLI commands
docker
docker container --help

## Display Docker version and info
docker --version
docker version
docker info

## Execute Docker image
docker run hello-world

## List Docker images
docker image ls

## List Docker containers (running, all, all in quiet mode)
docker container ls
docker container ls --all
docker container ls -aq
```

<h2>Conclusión</h2>
En la `Containerization ` el CI / CD  se ven beneficiados de los siguientes aspectos:

 - Las aplicaciones no tienen dependencias del sistema.
 - Las actualizaciones se pueden enviar a cualquier parte de una aplicación distribuida.
 - La densidad de recursos se puede optimizar.
 - Con Docker, escalar su aplicación es cuestión de girar nuevos ejecutables, no ejecutar hosts VM pesados.