Este artículo complementa una serie de webinars sobre la implementación y administración de cargas de trabajo contenidas en la nube . La serie cubre los fundamentos de contenedores, incluyendo el manejo de la vida ciclica de un contenedor, la implementación de aplicaciones con múltiples contenedores, la escala de cargas de trabajo, y la comprensión de Kubernetes, así como destacando las mejores prácticas para ejecutar aplicaciones establecidas.
Este tutorial incluye los conceptos y comandos cubiertos en la primera sesión de la serie, Introducción a los contenedores.
Introducción
Docker es una plataforma para desplegar y administrar aplicaciones contenidas en contenedores. Los contenedores son populares entre desarrolladores, administradores y ingenieros de DevOps debido a la flexibilidad que ofrecen.
Docker tiene tres componentes esenciales:
- Motor de Docker
- Herramientas de Docker
- Registro de Docker
El motor de Docker proporciona las capacidades centrales para administrar contenedores. Interfaz con el sistema operativo Linux subyacente para exponer APIs simples para tratar con la vida ciclica de los contenedores.
Las herramientas de Docker consisten en un conjunto de herramientas de línea de comandos que se comunican con la API expuesta por el Motor de Docker. Se usan para ejecutar contenedores, crear imágenes nuevas, configurar almacenamiento y redes, y muchas otras operaciones que afectan la vida ciclica de un contenedor.
El registro de Docker es el lugar donde se almacenan las imágenes de contenedores. Cada imagen puede tener múltiples versiones identificadas mediante etiquetas únicas. Los usuarios pull existentes imágenes desde la registraría y push nuevas imágenes a ella.Hub es un registro hospedado gestionado por Docker, Inc.. También es posible ejecutar una registraría dentro de sus propios entornos para mantener las imágenes más cercanas al motor.
Al final de esta guía de instrucciones, habrás instalado Docker en una Dropleta DigitalOcean, administrado contenedores, trabajado con imágenes, agregado persistencia, y configurado una registraría privada.
Requisitos previos
Para seguir esta guía de instrucciones necesitarás:
-
Una Dropleta Ubuntu 16.04 establecida siguiendo esta guía de inicialización del servidor Ubuntu 16.04, incluyendo un usuario sin privilegios con sudo y un firewall.
-
Un cuenta de Docker Hub. Este resumen de Docker Hub le ayudará a empezar.
Por defecto, el comando docker
requiere privilegios de root. Sin embargo, puede ejecutar el comando sin el prefijo sudo
ejecutando docker
como un usuario del grupo docker.
Para configurar su Droplet de esta manera, ejecute el comando sudo usermod -aG docker ${USER}
. Esto agregará al usuario actual al grupo docker
. A continuación, ejecute el comando su - ${USER}
para aplicar la nueva membresía de grupo.
Este tutorial asume que su servidor está configurado para ejecutar el comando docker
sin el prefijo sudo
.
Paso 1 — Instalando Docker
Después de iniciar sesión en el Droplet mediante SSH, ejecute los siguientes comandos para eliminar cualquier paquete relacionado con Docker que ya esté instalado y luego instale Docker desde el repositorio oficial:
Después de instalar Docker, verifique la instalación con los siguientes comandos:
La comanda anterior muestra detalles de la instalación de Docker Engine en el entorno. La siguiente comanda verifica que los herramientas de Docker están correctamente instaladas y configuradas. Debería imprimir la versión de ambos Docker Engine y Tools.
## Paso 2 — Iniciando contenedores
Los contenedores de Docker se lanzan desde imágenes existentes que se almacenan en registros. Las imágenes en Docker pueden estar almacenadas en repositorios privados o públicos. Los repositorios privados requieren autenticación antes de poder obtener imágenes. Las imágenes públicas pueden accederse por cualquier persona.
Para buscar una imagen llamada hello-world
, ejecute la siguiente comanda:
Hay varias imágenes que coinciden con el nombre hello-world
. Elegir la que tenga más estrellas indica la popularidad de la imagen.
Verifique las imágenes disponibles en su entorno local con la siguiente comanda:
Como no hemos lanzado ningún contenedor aún, no habrá ninguna imagen. Podemos descargar la imagen y ejecutarla localmente:
Si ejecutamos la comanda docker run
sin descargar la imagen, Docker Engine primero la descargará y luego la ejecutará localmente. Ejecutar la comanda docker images
de nuevo muestra que ya tiene la imagen hello-world
disponible localmente.
Ahora lancemos un contenedor más significativo: un servidor web Apache.
Puede observar opciones adicionales pasadas a la comanda docker run
. Aquí es una explicación de estos switches:
-p
— Este comando indica al motor de Docker que exponga el puerto80
del contenedor en el puerto80
del host. Como Apache escucha en el puerto80
, necesitamos exponerlo en el puerto del host.--name
— Este parámetro asigna un nombre al contenedor en ejecución. Si omitimos esta opción, el motor de Docker asignará un nombre aleatorio.-d
— Esta opción dirige al motor de Docker para ejecutar el contenedor en modo detachado. Sin él, el contenedor se lanzará en el foreground bloqueando la accesibilidad al shell. Al puslar el contenedor en el fondo, podemos continuar usando el shell mientras el contenedor sigue en ejecución.
Para verificar que nuestro contenedor está de hecho ejecutándose en el fondo, intente este comando:
La salida muestra que el contenedor llamado web
está corriendo con el puerto 80
mapeado al puerto del host 80
.
Ahora acceda al servidor web:
Prueba de acceso al servidor web:
Ahora detenga y elimine el contenedor en ejecución con los siguientes comandos:
Ejecutar docker ps
nuevamente confirma que el contenedor ha terminado.
Paso 3: Agregando almacenamiento a contenedores
Los contenedores son efímeros, lo que significa que cualquier información almacenada dentro de un contenedor se perderá cuando el contenedor sea terminado. Para persistir datos más allá de la vida útil de un contenedor, necesitamos asignar una volumen al contenedor. Las unidades de volumen son directorios directamente desde el sistema de archivos del host.
Comience creando un nuevo directorio en el host:
Ahora, lance el contenedor con una nueva opción para montar el directorio htdocs
hacia la raíz del servidor de Apache:
La opción -v
apunta el directorio htdocs
dentro del contenedor al sistema de archivos del host. Cualquier cambio hecho en este directorio será visible tanto en las ubicaciones.
Acceda al directorio desde el contenedor mediante la siguiente orden:
Esta orden mantiene la terminal en una sesión interactiva dentro del contenedor. Debería ver que ahora estás dentro del contenedor.
Navegue hasta el directorio htdocs
y cree un fichero HTML simple. Finalmente, salga del shell del contenedor:
Ejecute la siguiente orden:
Esto muestra que el servidor web está devolviendo la página que hemos creado.
No solo puedes acceder a esta página desde el host, sino también la modificar:
Ejecute la orden curl localhost
de nuevo y confirma que el servidor web está proporcionando la página creada desde el host.-f
forza a Docker a terminar sin detenerse primero.)
Paso 4 — Construir imágenes
Además de ejecutar imágenes existentes desde la registro, podemos crear nuestras propios imágenes y almacenarlas en el registro.
Puedes crear nuevas imágenes a partir de contenedores existentes. Los cambios hechos al contenedor se cometen primero y luego las imágenes se etiquetan y se proporcionan al registro.
Vamos a lanzar otra vez el contenedor httpd
y modificar el archivo predeterminado:
El contenedor está ahora corriendo con un index.html
personalizado. Puede verificarlo con curl localhost
.
Antes de cometer el contenedor modificado, es una buena idea detenerlo. Después de que se detenga lo ejecutaremos el comando de commit:
Confirma la creación de la imagen con el comando docker images
. Muestra la imagen doweb
que acabas de crear.
Para etiquetar y almacenar esta imagen en Docker Hub, ejecute los siguientes comandos para proporcionar su imagen al registro privado:
Puede buscar la nueva imagen en Docker Hub desde la navegadora o la línea de comandos.
Paso 5 — Lanzamiento de un Registro Privado
Es posible ejecutar la registro en entornos privados para mantener las imágenes más seguras. También reduce la latencia entre el motor de Docker y el repositorio de imágenes.
El Registro de Docker está disponible como un contenedor que se puede lanzar como cualquier otro contenedor. Como el registro almacena múltiples imágenes, es una buena idea asignar un volumen de almacenamiento a él.
Observe que el contenedor se lanza en el fondo con el puerto 5000
expuesto y el directorio registry
mapeado al sistema de archivos del host. Puede verificar que el contenedor está ejecutándose ejecutando la comanda docker ps
.
Ahora podemos etiquetar una imagen local y proporcionarla al registro privado. Primero, vamos a extraer el contenedor busybox
de Docker Hub y etiquetarlo.
La anterior comanda confirma que el contenedor busybox
ahora está etiquetado con localhost:5000
, por lo que puede hacer un push de la imagen al registro privado.
Con la imagen enviada al registro local, intentemos eliminarla del entorno y volver a traerla desde el registro.
Hemos completado el ciclo completo de extracción de la imagen, etiquetación, envío a la registro local, y finalmente, extracción.
Podría haber casos donde deseeas ejecutar el registro en un host dedicado. El motor de Docker funcionando en diferentes máquinas se comunicarán con el registro remoto para extraer y enviar imágenes.
Desde que el registro no está seguro, necesitarás modificar la configuración de Docker Engine para permitir acceso al registro inseguro. Para hacer esto, edite el archivo /etc/docker/daemon.json
. Cree el archivo si no existe.
Agregue la siguiente entrada:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
Reemplace REMOTE_REGISTRY_HOST
con el nombre de host o la dirección IP del registro remoto. Restarte Docker Engine para asegurarse de que las configuraciones se apliquen.
##Conclusión
Este tutorial te ayudó a empezar con Docker. Cubrió conceptos esenciales incluyendo la instalación, gestión de contenedores, gestión de imágenes, almacenamiento y registro privado. Las sesiones futuras y artículos en esta serie te ayudarán a ir más allá del básico de Docker.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker