Instalando Docker
N-Tech Admin Group
Instalar Docker en Ubuntu 20.04
Con el lanzamiento de Docker en 2013, los contenedores ganaron popularidad rápidamente. La función principal de Docker es: desarrollar, enviar y ejecutar cualquier aplicación en cualquier sistema, constituyéndose así como una alternativa flexible y capaz de ahorrar recursos frente a la emulación de componentes de hardware basada en máquinas virtuales (VM).
La virtualización de hardware tradicional se basa en iniciar diferentes sistemas operativos en el mismo sistema host (host), sin embargo con Docker (contenedor) las aplicaciones se ejecutan como procesos aislados en el mismo sistema. Por lo tanto, hablamos de virtualización basada en contenedores lo que implica que también hablamos de virtualización a nivel de sistema operativo.
Actualizar la lista de paquetes de Ubuntu
Instalar paquetes que permitan a APT descargar a través de HTTPS
Añadir (importar) la clave de GPG para el repositorio oficial de Docker. De no estar, Ubuntu no lo instala
Sin embargo, el comando anterior apt-key
está deprecated con lo cual nos da un warning. En su lugar deberíamos utilizar:
Donde:
curl
es una herramienta que se utiliza para hacer solicitudes HTTP, como descargar archivos desde la web.-fsSL
: son opciones del comando curl que indican que los errores se deben tratar de modo silencioso.https://download.docker.com/linux/ubuntu/gpg
: Es la URL desde donde se descarga la clave GPG de Docker para Ubuntu y que se utiliza para verificar la autenticidad de los paquetes de Docker a instalar en el sistema.sudo apt-key add -
se ejecuta después de la descarga y para agregar la clave GPG al almacén de claves del sistema.
Agregar el repositorio de Docker a las fuentes de APT
Actualizar nuevamente los paquetes del sistema
Asegurar hacer la instalación desde repositorio de Docker y no desde el predeterminado de Ubuntu
Finalmente, instalar
Comprobar funcionamiento
Ejecutar docker sin sudo
Por defecto, el comando docker solo puede ser ejecutado por el usuario root o un usuario del grupo docker, el cual se crea automáticamente durante el proceso de instalación de Docker.
Si se intenta ejecutar el comando docker sin sudo veríamos algo como:
Agregar usuario al grupo docker
Puedes visualizar el archivo /etc/group
para comprobarlo
Puedes cerrar y volver a abrir el servidor para aplicarlo:
Confirmar que se agregó el usuario al grupo docker
Agregar usuario diferente al grupo docker
Si es un usuario con el que no inició sesión, se puede declarar el nombre de usuario de forma explícita escribiendo:
Sintaxis general del comando docker
docker [option] [command] [arguments]
Comandos de Docker
Para ver todos los subcomandos disponibles:
Para ver información sobre Docker relacionada con todo el sistema:
Para verificar si puede acceder a imágenes y descargarlas de Docker Hub:
Cualquiera puede alojar sus imágenes en Docker Hub, de modo que la mayoría de las aplicaciones y las distribuciones de Linux que necesitará tendrán imágenes alojadas allí.
¿Pero, qué es una imagen de Docker?
Una imagen Docker
es un archivo estático que contiene lo necesario para crear un contenedor. Incluye: el sistema operativo base, el código de la aplicación y las dependencias. Las imágenes se almacenan en registros de Docker, como Docker Hub, y se pueden compartir y reutilizar.
Ya que estamos con la estructura de Docker, veamos también que es el motor de Docker.
Docker utiliza el componente Docker Engine
, que administra y ejecuta los contenedores y consta de tres partes:
servidor Docker: tiene una API que permite a los usuarios y aplicaciones interactuar con Docker
daemon Docker:administra los contenedores
interfaz de línea de comandos (CLI): se utiliza para dar instrucciones a Docker a través de la línea de comandos.
Adicionalmente, Docker proporciona lo que se denomina herramientas de orquestación como es el caso de: Docker Compose
y Kubernetes.
Estas herramientas permiten administrar y escalar contenedores en clústeres de servidores. También facilitan la administración de aplicaciones distribuidas y la orquestación de contenedores en entornos de producción.
Para buscar la imagen de Ubuntu:
La secuencia de comandos rastreará Docker Hub y mostrará una lista de todas las imágenes cuyo nombre coincida con la cadena de búsqueda.
Para descargar la imagen oficial de Ubuntu a su equipo:
Para ver las imágenes descargadas a su PC:
Ejecutar un contenedor:
Realmente ejecuta un comando en un nuevo contenedor. Este comando run primero crea una capa de contenedor en la que se puede escribir sobre la imagen especificada y luego la inicia con el comando especificado.
Este ejemplo, ejecuta un contenedor usando la imagen más reciente de Ubuntu. La combinación de las opciones -i y -t brindan acceso interactivo del Shell al contenedor.
Ten en cuenta el ID del contenedor
en el símbolo del sistema. En mi caso es add8ed81f423.
Dentro del contenedor puedes ejecutar cualquier comando y no es necesario utilizar el comando sudo, ya que realizas las operaciones como el usuario root.
Para ejecutar un comando en un contenedor en ejecución.
Este comando solo se puede utilizar mientras se ejecuta el proceso principal del contenedor y no se reinicia si se reinicia el contenedor.
Si probamos a instalar una aplicación como Node.js:
Verificar que está instalado el Node.js
Cerrar el contenedor
Ver solo contenedores activos
Ver todos los contenedores activos e inactivos
Ver último contenedor creado
Para iniciar un contenedor detenido, necesitas el ID del contenedor
El contenedor se iniciará y podrá ver su estado:
Para detener un contenedor en funcionamiento, seguido del ID o nombre del contenedor
Si ya no necesitas un contenedor, lo puedes eliminar y usar nuevamente el ID o el nombre del contenedor.
Puedes utilizar el comando docker ps -a para encontrar el ID o nombre del contenedor asociado con la imagen hello-world y elimínelo.
Puedes iniciar un nuevo contenedor y darle un nombre usando el conmutador
También podrá usar el conmutador de --rm para crear un contenedor que se elimine de forma automática cuando se detenga.
Consulta el comando:
para obtener más información sobre estas y otras opciones.
Los contenedores pueden convertirse en imágenes que podrá usar para crear contenedores nuevos. Veamos cómo funciona esto.
Docker brinda un comando que te permite eliminar cualquier recurso: imágenes, contenedores, volúmenes y redes, que no estén asociados con un contenedor:
Para eliminar adicionalmente los contenedores detenidos y todas las imágenes no utilizadas (no solo aquellas pendientes), añada el indicador -a
al comando:
Confirmar cambios que se han aplicado a una imagen de docker
Al iniciar una imagen de Docker, es posible crear, modificar y eliminar archivos del mismo modo que con una máquina virtual.
Los cambios que realices solo se aplican al contenedor sobre el que estás trabajando. De modo que podrás iniciarlo y detenerlo, pero si lo destruyes con el comando docker rm
, los cambios se perderán por completo.
Veamos como guardar el estado de un contenedor como una nueva imagen de Docker (entiendo que al estilo de una instantánea de Virtual Box).
Dado que hemos instalado Node.js dentro del contenedor de Ubuntu, tenemos un contenedor que se ejecuta a partir de una imagen diferente de la utilizada para crearlo. Sin embargo, veremos como reutilizar este contenedor Node.js como base de nuevas imágenes posteriores.
Se tienen que confirmar los cambios en una nueva instancia de imagen de Docker utilizando el siguiente comando:
donde:
-m para el mensaje de confirmación que te permite a saber qué cambios realizaron,
-a para especificar el autor.
container_id el id del contenedor.
repository corresponde a su nombre de usuario de Docker Hub.
Por ejemplo, para el usuario kirby, con el ID de contenedor add8ed81f423, el comando sería el siguiente:
Al confirmar - confirme - una imagen, la nueva se guardará a nivel local en su PC.
Si ahora listamos las imágenes de Docker de nuevo mostrará la nueva imagen, así como la anterior de la que derivó:
En este ejemplo ubuntu-nodejs es la nueva imagen, derivada de la imagen ubuntu existente de Docker Hub.
La diferencia de tamaño refleja los cambios realizados. En este ejemplo, el cambio fue la instalación de NodeJS.
Por ello, la próxima vez que deba ejecutar un contenedor usando Ubuntu con NodeJS preinstalado, podrá usar simplemente la nueva imagen.
Nota: También podrá crear imágenes de un Dockerfile, lo cual le permitirá automatizar la instalación de software en una nueva imagen.
En un contenedor interactivo con
Podemos, por ejemplo, actualizar los paquetes e instalar apache2.
Al salir del contenedor, éste se detiene pero aún se encuentra disponible para realizar una operación de commit con los cambios realizados y poder crear una nueva imagen ubuntu:apache2
Dockerfile
Es la forma de automatizar el proceso de creación de una imagen de Docker en un "manifiesto", esto es un fichero llamado Dockerfile
.
Este fichero usa instrucciones para:
definir la imagen base para el nuevo contenedor,
las aplicaciones que deben instalarse y sus dependencias,
los ficheros presentes en la imagen,
los puertos accesibles desde el exterior, y
el comando a ejecutar en el inicio del contenedor, entre otros.
Algunas instrucciones propias del Dockerfile:
MANTAINER: configurar datos del autor, nombre y email
ENV: configurar variables de entorno
ADD: se encarga de copiar los ficheros y directorios desde una ubicación especificada y los agrega al sistema de ficheros del contenedor.
COPY: similar a ADD
EXPOSE: indica los puertos en los que va a escuchar el contenedor
VOLUME: nos permite utilizar una ubicación de nuestro host en el contenedor. De este modo podemos almacenar permanentemente los datos. Los volúmenes de los contenedores siempre son accesibles en el host anfitrión, en la ubicación:
WORKDIR: directorio donde vamos a ejecutar las acciones
SHELL, ARG, USER
Ejemplo:
Veamos un ejemplo de Dockerfile. El fichero se llama así tal cual (en este caso):
Donde:
FROM crea una capa a partir de la imagen de Docker Ubuntu: 20.04. La imagen base de la cual partiremos.
COPY agrega archivos del directorio actual de su cliente Docker.
RUN crea su aplicación con make.
CMD especifica qué comando ejecutar dentro del contenedor.
Para poder crear esta imagen:
En pantalla podemos verificar la ejecución de las instrucciones y finalmente con el comando docker images comprobar que se ha creado la imagen a partir del dockerfile. Esto es:
Ya podemos crear un contenedor a partir de la imagen creada.
Introducir imágenes de Docker en un repositorio
Para introducir una imagen a Docker Hub o a cualquier otro registro de Docker, debes tener una cuenta en el sistema.
Nota: Para aprender a crear su propio registro privado de Docker, consulta: Configurar un registro de Docker privado.
Por tanto, supongamos que tienes la cuenta en el sistema. Entonces, para introducir su imagen, primero inicia sesión en Docker Hub.
Te solicitará autenticarte usando la contraseña de Docker Hub.
Links
Last updated
Was this helpful?