GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo instalar y usar Docker en Ubuntu 22.04

Introducción

Docker es una aplicación que simplifica el proceso de gestión de procesos de aplicaciones en contenedores . Los contenedores le permiten ejecutar sus aplicaciones en procesos aislados de recursos. Son similares a las máquinas virtuales, pero los contenedores son más portátiles, más amigables con los recursos y más dependientes del sistema operativo host.

Para obtener una introducción detallada a los diferentes componentes de un contenedor Docker, consulte El ecosistema Docker:una introducción a los componentes comunes.

En este tutorial, instalará y usará Docker Community Edition (CE) en Ubuntu 22.04. Instalará Docker, trabajará con contenedores e imágenes y enviará una imagen a un repositorio de Docker.

Requisitos

Para seguir este tutorial, necesitará lo siguiente:

  • Un servidor Ubuntu 22.04 configurado siguiendo la guía de configuración inicial del servidor Ubuntu 22.04, incluido un sudo no raíz usuario y un cortafuegos.
  • Una cuenta en Docker Hub si desea crear sus propias imágenes y enviarlas a Docker Hub, como se muestra en los pasos 7 y 8.

Paso 1:Instalación de Docker

Es posible que el paquete de instalación de Docker disponible en el repositorio oficial de Ubuntu no sea la última versión. Para asegurarnos de obtener la última versión, instalaremos Docker desde el repositorio oficial de Docker. Para hacer eso, agregaremos una nueva fuente de paquete, agregaremos la clave GPG de Docker para garantizar que las descargas sean válidas y luego instalaremos el paquete.

Primero, actualice su lista existente de paquetes:

  1. sudo apt update

A continuación, instale algunos paquetes de requisitos previos que permiten apt usar paquetes sobre HTTPS:

  1. sudo apt install apt-transport-https ca-certificates curl software-properties-common

Luego agregue la clave GPG para el repositorio oficial de Docker a su sistema:

  1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Agregue el repositorio de Docker a las fuentes de APT:

  1. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Actualice su lista existente de paquetes nuevamente para que se reconozca la adición:

  1. sudo apt update

Asegúrese de que está a punto de instalar desde el repositorio de Docker en lugar del repositorio predeterminado de Ubuntu:

  1. apt-cache policy docker-ce

Verá un resultado como este, aunque el número de versión de Docker puede ser diferente:

Salida de la política apt-cache docker-ce
docker-ce:
  Installed: (none)
  Candidate: 5:20.10.14~3-0~ubuntu-jammy
  Version table:
     5:20.10.14~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     5:20.10.13~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

Observe que docker-ce no está instalado, pero el candidato para la instalación es del repositorio de Docker para Ubuntu 22.04 (jammy ).

Finalmente, instale Docker:

  1. sudo apt install docker-ce

Docker ahora debería estar instalado, el demonio iniciado y el proceso habilitado para iniciarse en el arranque. Comprueba que se está ejecutando:

  1. sudo systemctl status docker

El resultado debe ser similar al siguiente, mostrando que el servicio está activo y ejecutándose:

Output● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 7854 (dockerd)
      Tasks: 7
     Memory: 38.3M
        CPU: 340ms
     CGroup: /system.slice/docker.service
             └─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

La instalación de Docker ahora le brinda no solo el servicio Docker (daemon) sino también el docker utilidad de línea de comandos o el cliente Docker. Exploraremos cómo usar la docker comando más adelante en este tutorial.

Paso 2:Ejecutar el comando Docker sin Sudo (opcional)

Por defecto, la docker El comando solo se puede ejecutar en la raíz usuario o por un usuario en la docker grupo, que se crea automáticamente durante el proceso de instalación de Docker. Si intenta ejecutar docker comando sin prefijarlo con sudo o sin estar en la docker grupo, obtendrá un resultado como este:

Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Si desea evitar escribir sudo cada vez que ejecuta el docker comando, agregue su nombre de usuario a la docker grupo:

  1. sudo usermod -aG docker ${USER}

Para aplicar la nueva pertenencia al grupo, cierre sesión en el servidor y vuelva a iniciarla, o escriba lo siguiente:

  1. su - ${USER}

Se le pedirá que ingrese su contraseña de usuario para continuar.

Confirme que su usuario ahora está agregado a la ventana acoplable docker grupo escribiendo:

  1. groups
Outputsammy sudo docker

Si necesita agregar un usuario a la docker grupo con el que no ha iniciado sesión, declare ese nombre de usuario explícitamente usando:

  1. sudo usermod -aG docker username

El resto de este artículo asume que está ejecutando docker Comando como usuario en la ventana acoplable grupo. Si elige no hacerlo, anteponga los comandos con sudo .

Exploremos el docker comando siguiente.

Paso 3:Uso del comando Docker

Usando docker consiste en pasarle una cadena de opciones y comandos seguidos de argumentos. La sintaxis toma esta forma:

  1. docker [option] [command] [arguments]

Para ver todos los subcomandos disponibles, escriba:

  1. docker

A partir de la versión de Docker 20.10.14 , la lista completa de subcomandos disponibles incluye:

Output  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Para ver las opciones disponibles para un comando específico, escriba:

  1. docker docker-subcommand --help

Para ver información de todo el sistema sobre Docker, utilice:

  1. docker info

Exploremos algunos de estos comandos. Comenzaremos trabajando con imágenes.

Paso 4:trabajar con imágenes de Docker

Los contenedores de Docker se crean a partir de imágenes de Docker. De forma predeterminada, Docker extrae estas imágenes de Docker Hub, un registro de Docker administrado por Docker, la empresa detrás del proyecto Docker. Cualquiera puede alojar sus imágenes de Docker en Docker Hub, por lo que la mayoría de las aplicaciones y distribuciones de Linux que necesitará tendrán imágenes alojadas allí.

Para verificar si puede acceder y descargar imágenes desde Docker Hub, escriba:

  1. docker run hello-world

El resultado indicará que Docker funciona correctamente:

OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest

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

...

Docker inicialmente no pudo encontrar el hello-world image localmente, por lo que descargó la imagen de Docker Hub, que es el repositorio predeterminado. Una vez descargada la imagen, Docker creó un contenedor a partir de la imagen y la aplicación dentro del contenedor se ejecutó, mostrando el mensaje.

Puede buscar imágenes disponibles en Docker Hub utilizando docker comando con la search subcomando Por ejemplo, para buscar la imagen de Ubuntu, escriba:

  1. docker search ubuntu

El script rastreará Docker Hub y devolverá una lista de todas las imágenes cuyo nombre coincida con la cadena de búsqueda. En este caso, la salida será similar a esta:

OutputNAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14048     [OK]
websphere-liberty                WebSphere Liberty multi-architecture images …   283       [OK]
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   112       [OK]
neurodebian                      NeuroDebian provides neuroscience research s…   88        [OK]
open-liberty                     Open Liberty multi-architecture images based…   51        [OK]
...

En el OFICIAL columna, OK indica una imagen construida y respaldada por la empresa detrás del proyecto. Una vez que haya identificado la imagen que le gustaría usar, puede descargarla a su computadora usando pull subcomando.

Ejecute el siguiente comando para descargar el ubuntu oficial imagen a su computadora:

  1. docker pull ubuntu

Verá el siguiente resultado:

OutputUsing default tag: latest
latest: Pulling from library/ubuntu
e0b25ef51634: Pull complete
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Después de descargar una imagen, puede ejecutar un contenedor usando la imagen descargada con run subcomando Como viste con el hello-world ejemplo, si una imagen no se ha descargado cuando docker se ejecuta con run subcomando, el cliente de Docker primero descargará la imagen y luego ejecutará un contenedor usándola.

Para ver las imágenes que se han descargado a su computadora, escriba:

  1. docker images

El resultado será similar al siguiente:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              1d622ef86b13        3 weeks ago         73.9MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

Como verá más adelante en este tutorial, las imágenes que usa para ejecutar contenedores se pueden modificar y usar para generar nuevas imágenes, que luego se pueden cargar (empujar es el término técnico) a Docker Hub u otros registros de Docker.

Veamos cómo ejecutar contenedores con más detalle.

Paso 5:ejecutar un contenedor Docker

El hello-world El contenedor que ejecutó en el paso anterior es un ejemplo de un contenedor que se ejecuta y sale después de emitir un mensaje de prueba. Los contenedores pueden ser mucho más útiles que eso y pueden ser interactivos. Después de todo, son similares a las máquinas virtuales, solo que más amigables con los recursos.

Como ejemplo, ejecutemos un contenedor usando la imagen más reciente de Ubuntu. La combinación de -i y -t switches le da acceso de shell interactivo al contenedor:

  1. docker run -it ubuntu

Su símbolo del sistema debería cambiar para reflejar el hecho de que ahora está trabajando dentro del contenedor y debería adoptar esta forma:

Outputroot@d9b100f2f636:/#

Tenga en cuenta la identificación del contenedor en el símbolo del sistema. En este ejemplo, es d9b100f2f636 . Necesitará ese ID de contenedor más adelante para identificar el contenedor cuando desee eliminarlo.

Ahora puede ejecutar cualquier comando dentro del contenedor. Por ejemplo, actualicemos la base de datos del paquete dentro del contenedor. No necesita prefijar ningún comando con sudo , porque está operando dentro del contenedor como raíz usuario:

  1. apt update

Luego instale cualquier aplicación en él. Instalemos Node.js:

  1. apt install nodejs

Esto instala Node.js en el contenedor del repositorio oficial de Ubuntu. Cuando finalice la instalación, verifique que Node.js esté instalado:

  1. node -v

Verá el número de versión que se muestra en su terminal:

Outputv12.22.9

Cualquier cambio que realice dentro del contenedor solo se aplica a ese contenedor.

Para salir del contenedor, escriba exit en el aviso.

A continuación, veamos cómo administrar los contenedores en nuestro sistema.

Paso 6:Administrar contenedores Docker

Después de usar Docker por un tiempo, tendrá muchos contenedores activos (en ejecución) e inactivos en su computadora. Para ver los activos , usa:

  1. docker ps

Verá un resultado similar al siguiente:

OutputCONTAINER ID        IMAGE               COMMAND             CREATED

En este tutorial, comenzó dos contenedores; uno del hello-world imagen y otra del ubuntu imagen. Ambos contenedores ya no se están ejecutando, pero aún existen en su sistema.

Para ver todos los contenedores, activos e inactivos, ejecute docker ps con el -a cambiar:

  1. docker ps -a

Verá un resultado similar a este:

OutputCONTAINER ID   IMAGE         COMMAND   CREATED         STATUS                     PORTS     NAMES
1c08a7a0d0e4   ubuntu        "bash"     About a minute ago   Exited (0) 7 seconds ago             dazzling_taussig
587000e49d53   hello-world   "/hello"   5 minutes ago        Exited (0) 5 minutes ago             adoring_kowalevski

Para ver el último contenedor que creó, pásele -l cambiar:

  1. docker ps -l
OutputCONTAINER ID   IMAGE     COMMAND   CREATED         STATUS                     PORTS     NAMES
1c08a7a0d0e4   ubuntu    "bash"    3 minutes ago   Exited (0) 2 minutes ago             dazzling_taussig

Para iniciar un contenedor detenido, use docker start , seguido del ID del contenedor o el nombre del contenedor. Comencemos el contenedor basado en Ubuntu con la ID de 1c08a7a0d0e4 :

  1. docker start 1c08a7a0d0e4

El contenedor se iniciará y puede usar docker ps para ver su estado:

OutputCONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
1c08a7a0d0e4   ubuntu    "bash"    6 minutes ago   Up 8 seconds             dazzling_taussig

Para detener un contenedor en ejecución, use docker stop , seguido del ID o nombre del contenedor. Esta vez, usaremos el nombre que Docker asignó al contenedor, que es dazzling_taussig :

  1. docker stop dazzling_taussig

Una vez que haya decidido que ya no necesita un contenedor, elimínelo con docker rm comando, nuevamente usando el ID del contenedor o el nombre. Usa el docker ps -a Comando para encontrar el ID del contenedor o el nombre del contenedor asociado con hello-world imagen y elimínela.

  1. docker rm adoring_kowalevski

Puede iniciar un nuevo contenedor y darle un nombre usando --name cambiar. También puede usar el --rm cambiar para crear un contenedor que se elimina solo cuando se detiene. Consulte la docker run help comando para obtener más información sobre estas opciones y otras.

Los contenedores se pueden convertir en imágenes que puede usar para construir nuevos contenedores. Veamos cómo funciona.

Paso 7:Confirmar cambios en un contenedor a una imagen de Docker

Cuando inicia una imagen de Docker, puede crear, modificar y eliminar archivos tal como lo hace con una máquina virtual. Los cambios que realice solo se aplicarán a ese contenedor. Puede iniciarlo y detenerlo, pero una vez que lo destruya con docker rm comando, los cambios se perderán para siempre.

Esta sección le muestra cómo guardar el estado de un contenedor como una nueva imagen de Docker.

Después de instalar Node.js dentro del contenedor de Ubuntu, ahora tiene un contenedor que se ejecuta a partir de una imagen, pero el contenedor es diferente de la imagen que usó para crearlo. Pero es posible que desee reutilizar este contenedor de Node.js como base para nuevas imágenes más adelante.

Luego confirme los cambios en una nueva instancia de imagen de Docker con el siguiente comando.

  1. docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

La -m switch es para el mensaje de confirmación que le ayuda a usted y a otros a saber qué cambios realizó, mientras que -a se utiliza para especificar el autor. El container_id es el que anotó anteriormente en el tutorial cuando inició la sesión interactiva de Docker. A menos que haya creado repositorios adicionales en Docker Hub, el repository suele ser su nombre de usuario de Docker Hub.

Por ejemplo, para el usuario sammy , con el ID de contenedor de d9b100f2f636 , el comando sería:

  1. docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

Cuando comprometes una imagen, la nueva imagen se guarda localmente en su computadora. Más adelante en este tutorial, aprenderá a enviar una imagen a un registro de Docker como Docker Hub para que otros puedan acceder a ella.

Al volver a enumerar las imágenes de Docker, se mostrará la nueva imagen, así como la anterior de la que se derivó:

  1. docker images

Verá un resultado como este:

OutputREPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
sammy/ubuntu-nodejs   latest              7c1f35226ca6        7 seconds ago       179MB
...

En este ejemplo, ubuntu-nodejs es la nueva imagen, que se derivó del ubuntu existente imagen de Docker Hub. La diferencia de tamaño refleja los cambios que se realizaron. Y en este ejemplo, el cambio fue que se instaló NodeJS. Entonces, la próxima vez que necesite ejecutar un contenedor usando Ubuntu con NodeJS preinstalado, puede usar la nueva imagen.

También puede crear imágenes desde un Dockerfile , que le permite automatizar la instalación de software en una nueva imagen. Sin embargo, eso está fuera del alcance de este tutorial.

Ahora compartamos la nueva imagen con otros para que puedan crear contenedores a partir de ella.

Paso 8:enviar imágenes de Docker a un repositorio de Docker

El siguiente paso lógico después de crear una nueva imagen a partir de una imagen existente es compartirla con algunos de sus amigos seleccionados, todo el mundo en Docker Hub u otro registro de Docker al que tenga acceso. Para enviar una imagen a Docker Hub o cualquier otro registro de Docker, debe tener una cuenta allí.

Para enviar su imagen, primero inicie sesión en Docker Hub.

  1. docker login -u docker-registry-username

Se le pedirá que se autentique con su contraseña de Docker Hub. Si especificó la contraseña correcta, la autenticación debería tener éxito.

Nota: Si su nombre de usuario de registro de Docker es diferente del nombre de usuario local que utilizó para crear la imagen, deberá etiquetar su imagen con su nombre de usuario de registro. Para el ejemplo dado en el último paso, escribiría:

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Entonces puede enviar su propia imagen usando:

  1. docker push docker-registry-username/docker-image-name

Para impulsar el ubuntu-nodejs imagen al sammy repositorio, el comando sería:

  1. docker push sammy/ubuntu-nodejs

El proceso puede tardar un tiempo en completarse mientras se cargan las imágenes, pero cuando se complete, el resultado se verá así:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

...


Después de enviar una imagen a un registro, debería aparecer en el panel de control de su cuenta, como se muestra en la imagen a continuación.

Si un intento de envío genera un error de este tipo, es probable que no haya iniciado sesión:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Inicie sesión con docker login y repita el intento de empuje. Luego verifique que exista en su página de repositorio de Docker Hub.

Ahora puede usar docker pull sammy/ubuntu-nodejs para llevar la imagen a una nueva máquina y usarla para ejecutar un nuevo contenedor.

Conclusión

En este tutorial, instaló Docker, trabajó con imágenes y contenedores y envió una imagen modificada a Docker Hub. Ahora que conoce los conceptos básicos, explore los otros tutoriales de Docker en la comunidad de DigitalOcean.


Docker
  1. Cómo instalar y usar Docker en Ubuntu 20.04

  2. Cómo instalar y usar Wine en Ubuntu 20.04

  3. Cómo instalar y usar Docker en Ubuntu 18.04

  4. Cómo instalar y usar Docker Compose en Ubuntu 18.04

  5. Cómo instalar y usar Docker en Ubuntu 20.04

Cómo instalar y usar iTunes en Ubuntu 20.04

Cómo instalar y usar R en Ubuntu

Cómo instalar y usar Docker Compose en Ubuntu 20.04

Cómo instalar y usar Docker Compose en Ubuntu 22.04

Cómo instalar y usar Docker en Ubuntu (en el mundo real)

Cómo instalar y usar Docker en Ubuntu 20.04