JORGE JORGE

¿Cuales son los comandos que necesito en docker?
Tutorial para principiantes

Date of published: 19/11/2019
Published by: JORGE JORGE

Si no tienes instalado docker al final del post están los link de referencia a la documentación oficial donde aprenderás paso a paso a instalar docker pero si ya lo tienes instalado empecemos por un hola mundo, este es un tutorial donde he anotado para mi uso personal algunos comandos de docker que me son útiles en el día a día. No es un tutorial didactico para ensenar como usar o trabajar con docker mas bien es una bitácora con algunos comandos que te pueden resultar de ayuda en tu labor.

¿Cómo ejecutar un contenedor?
docker run hello-world
Para listar los contenedores que están ejecutándose docker ps
Para listar todos los contenedores sin importar el estado docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49a7aadb3511 1c060ad8a1d7 "/bin/bash" 16 hours ago Exited (0) 16 hours ago thirsty_booth
bfa69d7d5543 1c060ad8a1d7 "/bin/bash" 2 hours ago Exited (0) 2 hours ago charming_perlman

El contenedor tiene nombre( NAMES) y un id unico(CONTAINER ID)
Quiero ver las imágenes que tengo descargadas docker images o docker image ls
Para ver las configuraciones del contenedor docker inspect CONTAINER_ID
Renombrar un contenedor(ojo los nombres de los contenedores no se pueden repetir) cada docker run(genera un contenedor nuevo)
docker rename CONTAINER_ID NUEVO_NOMBRE docker run --name nombre_nuevo hello-world
Para ver los logs de un contenedor docker logs CONTAINER_ID
Para eliminar un contenedor docker rm CONTAINER_ID
Para eliminarlos todos los contenedores docker rm $(docker ps -aq)
docker pull nombre_imagen ex: docker pull ubuntu, este comando solo descarga la imagen requerida
Para ejecutar docker en modo interactivo con la terminal docker run -it 1c060ad8a1d7(nombre de la imagen IMAGE)
Para correr un contenedor y mapear la salida del contenedor y poder interactuar con el desde afuera. docker run -d --name nginx -p 8080:80 nginx (-p izquierda puerto de mi ordenador:derecha puerto del contenedor)
Para acceder a un contenedor docker exec -it 49a7aadb3511 el numero representa al (CONTAINER_ID)
Con este podemos interactuar con un contenedor en ejecucion docker exec -it nombre_contenedor(NAMES) bash
Como darle acceso a docker que para que use un sistema de archivo que no es del contenedor, en otras palabras a compartir información de mi ordenador con docker, esto nos garantiza de que cuando yo detenga o elimine el contenedor los datos no se borren.
docker run --name postgres -d -v /opt/src:/var/lib/postgresql/data (-v izquierda ruta completa en mi ordenador:ruta dentro del contenedor)
Para ver los volumenes que docker ha creado docker volume ls Para eliminar los volumenes que no están en uso docker volume prune
¿Cómo crear un volumen para ser usado por docker?
docker volume create mydata
docker run --name postgres -d --mount src=mydata,dst=/var/lib/postgresql/data "src" es el destino del volumen creado "dst" es el destino dentro de docker, con esto podemos compartir información entre contenedores sin necesidad de compartir con el sistema de archivos de nuestro ordenador
¿Cómo crear nuestras propias imagenes con los requisitos que necesitamos?
Creamos una carpeta en ella agregamos un fichero con el nombre Dockerfile y dentro ponemos lo que deseamos que tenga la imagen
El siguiente ejemplo es una imagen con un ubuntu 19.04 y un node
FROM ubuntu:18.04
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y node \
nodejs

Para ejecutar construir la imagen ejecutamos docker build -t ubuntu:minuevaimagen . a la izquierda la imagen que va a usar:derecha el nuevo nombre para esta imagen y vean que el comando incluye un "." final

Llego la parte buena,Como desarrollar aplicaciones usando contenedores


Como ya sabemos como construir una imagen básica, continuemos con agregar mas comandos para poder integrar nuestras aplicaciones en una imagen
FROM ubuntu:18.04
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y node \
nodejs
COPY [".","/opt/src"]
WORKDIR /opt/src
EXPOSE 3000
CMD ["node","index.js"]

Si ahora ejecutamos docker run --rm -p 3000:3000 nombre_de_mi_imagen vamos a ver ejecutándose la aplicación.
Para enviar variables de entorno usar env ejemplo docker run --rm -p 3000:3000 --env VAIABLE_ENTORNO=MI_VALOR nombre_de_mi_imagen
¿Cómo hacer una red para que colaboren diferentes contenedores?
docker network create --attachable nombre de red y para listar las redes docker network ls
¿Cómo conectar un contenedor a la red?
docker network connect nombre_red nombre_container
¿Cómo saber que contenedores estan conectados a la red?
docker network inspect

enlaces a la documentación oficial para instalar docker en tu ordenador .

Docker composer


Para construir una imagen a docker-compose build
Para correr un contenedor a partir de una imagen que ya construimos docker-compose up -d
¿Cómo instalar docker en window o mac?
Ver en la documentación oficial
¿Cómo instalar docker en linux?
Ver en la documentación ofcial