Docker

Comandos de docker
  1. Para usuarios de linux, para poder usar sus comandos sin usar sudo
  2. Ver los contenedores corriendo:
  3. Ver todos los contenedores :
  4. Inspeccionar un contenedor:
  5. Descargar una imagen de docker-hub:
  6. Renombrar un contenedor cuando se descarga:
  7. Renombrar el nombre de un contenedor:
  8. Eliminar un contenedor:
  9. Eliminar todos los contenedores que están parados:
  10. Para detener un contenedor que está corriendo:
  11. Eliminar un contenedor aunque esté corriendo:
  12. Ingresar con el modo interactivo en un contenedor:
  13. Correr una imagen en segundo plano:
  14. Ingresar al contenedor que está en segundo plano:
  15. Matar un contenedor con kill:
  16. Configurar un puerto de un contenedor:
  17. Para ver los logs de un contenedor que está corriendo en segundo plano:
  18. Listar redes
  19. Crear una red en docker
  20. Inspeccionar una red
  21. Borrar una red
  22. Conectarse a una red con una imagen
  23. Crear un volumen
  24. Listar volumenes
  25. Montar un volumen
  26. Verificar que se realizó el montaje correctamente
  27. Copiar un archivo a un contenedor
  28. Extraer una carpeta de un contenedor
  29. Listar imagenes
  30. Crear una imagen con dockerfile
  31. Crear una imagen con la terminal
  32. Subir una imagen a docker hub
Redes
    Commits
      Bid mounts
        Volumenes
          Insertar y extrar archivos de un contenedor
            Imagenes
              • Notas:

                Los símbolos < > deben ser ignorados al escribir los comandos.

                Cuando se coloca un pipe en medio de los símbolos <> significa que se puede usar una u otras opciones si es que las hubiese.

              Comandos de docker

              Para usuarios de linux, para poder usar sus comandos sin usar sudo

              Después de ejecutar este comando hay que reiniciar la pc.

              sudo usermod -aG docker $USER

              Ver los contenedores corriendo:

              docker ps

              Ver todos los contenedores :

              docker ps -a

              Inspeccionar un contenedor:

              docker inspect <ID>

              También funciona con el name que es un forma mas amigable de escribir el comando

              docker inspect <name>

              Descargar una imagen de docker-hub:

              docker run <nombre-imagen>

              Renombrar un contenedor cuando se descarga:

              docker run --name <cualquier-nombre-aqui> <imagen-de-docker>

              Renombrar el nombre de un contenedor:

              docker rename <nombre-anterior> <nombre-nuevo>

              Eliminar un contenedor:

              docker rm <nombre-contenedor | ID>

              Eliminar todos los contenedores que están parados:

              docker container prune

              Para detener un contenedor que está corriendo:

              docker stop <nombre-contendor | ID>

              Eliminar un contenedor aunque esté corriendo:

              docker rm -f <nombre-contenedor>

              Ingresar con el modo interactivo en un contenedor:

              docker run -it <nombre-image>

              Correr una imagen en segundo plano:

              • La opción -d ó --detach es lo que lo hace correr en background
              docker run --name <nuevo-nombre> -d <imagen> tail -f /dev/null

              Ingresar al contenedor que está en segundo plano:

              docker exec -it <nombre-contenedor> bash

              Matar un contenedor con kill:

              docker inspect --format '{{.State.Pid}}' <nombre-contenedor>
              #Devuelve el process id, entonces ...
              kill -9 <id-process>

              Configurar un puerto de un contenedor:

              • Donde el primer puerto es el de la maquina anfitriona y el segundo es el del contenedor.
              docker run --name <nombre-contenedor> -d -p 8080:80 <imagen>

              Para ver los logs de un contenedor que está corriendo en segundo plano:

              docker logs <nombre-contenedor>
              docker logs -f <nombre-contenedor> # -f para ver los logs en tiempo real
              docker logs -f --tail 10 <nombre-contenedor> # para ver solo los últimos logs

              Redes

              Listar redes

              docker network ls

              Crear una red en docker

              docker network create <nombre-de-red>

              Inspeccionar una red

              sudo docker inspect <nombre-de-red>

              Borrar una red

              docker network rm <nombre-red>

              Conectarse a una red con una imagen

              Primero descargar las imagenes: docker pull mongo y docker pull mongo-express

              sudo docker run --name some-mongo -p 27017:27017 --network=<nombre-red> -d mongo
              docker run -d --name clientewebmongo --network=mi-red -e ME_CONFIG_MONGODB_SERVER=some-mongo -p 8081:8081 mongo-express

              Commits

              Permite crear una imagen a partir de un container

              docker commit -m "message of commit" <nombre-imagen>

              Bid mounts

              Se comparte un directorio o ruta con un contenedor

              Persistir datos de los contenedores en la maquina anfitriona (ejemplo usando mongo) La opción -v indica se que va a hacer un bid mount Se indica en donde se van a guardar los datos del contenedor en la maquina anfitriona (izq) y el lado (der) indica en donde se guarda los datos dentro del contenedor.

              Pros: Se puede guardar y extraer datos de un contenedor.

              Contras: Inseguro por acceso a los datos mediante un contenedor. Ejemplo: Si se usa un contenedor en el cual no se conoce bien todo lo que puede hacer.

              docker run -d --name db -v /home/gabriel/docker-data/mongodata:/data/db mongo

              Volumenes

              Crear un volumen

              Pros: Solo el superusuario puede acceder a los datos. No se comparte un directorio como lo hace bid mount. Los volumenes los maneja docker.

              Contras: Modificar, leer esos archivos desde la maquina anfitriona es un poco complicado a menos de que se entre al contenedor para ver su contenido.

              docker volume create dbdata

              Listar volumenes

              docker volume ls

              Montar un volumen

              En src se coloca el nombre del volumen que se quiere montar y en dst se coloca el path en donde se quiere montar

              docker run -d --name db --mount src=dbdata,dst=/data/db mongo

              Verificar que se realizó el montaje correctamente

              En "Mounts" debe aparecer su correspondiente información.

              docker inspect db

              Insertar y extrar archivos de un contenedor

              Copiar un archivo a un contenedor

              No hace falta que el contenedor esté corriendo para poder copiar o extraer archivos del mismo.

              Ejemplo:

              touch prueba.txt  #se crea un archivo de prueba
              docker run -d name copytest ubuntu tail -f /dev/null #se corre el contenedor
              docker exec -it copytest bash #se ingresa en el contenedor
              mkdir testing #se crea una carpeta dentro del contenedor
              docker cp prueba.txt copytest:/testing/test.txt #se copia el archivo prueba.txt en el contenedor copytest en la carpeta testing con el nombre test.txt

              Extraer una carpeta de un contenedor

              docker cp copytest:/testing localtesting #se copia la carpeta testing del contenedor copytest en la carpeta actual con el nombre localtesting

              Imagenes

              Listar imagenes

              docker image ls

              Crear una imagen con dockerfile

              FROM ubuntu:latest //imagen que se quiere construir
              
              RUN touch /usr/src/hola-mundo.txt // cuando se está construyendo la imagen se ejecuta este comando

              -t es para agregar un tag. . es para indicar en donde se va a construir la imagen (mismo directorio en el cual se encuentra el Dockerfile)

              docker build -t ubuntu:hola .

              Crear una imagen con la terminal

              Breve descripción de las opciones

              -m permite escribir un mensaje. -a sirve para dejar el nombre del autor. 3141fa004aa0 es el ID del container.

              docker commit -m "tp01" -a "Gabriel Alejandro Mamani" 3141fa004aa0 tp1-completo:v1

              Subir una imagen a docker hub

              Loguearse en usando la terminal

              docker login

              Retaggear la imagen con nuestro username de dockerhub para poder subirla a nuestro repositorio.

              docker tag postgres:13 gamcode98/postgres:13

              Hora de pushear

              docker push gamcode98/postgres:13