Skip to content

bettyrjc/docker-platzi

Repository files navigation

Docker 🐳

Son agrupaciones de procesos que estan aislado del resto del mundo, permitiendonos resolver problemas de cosntrucción, distribución y ejecución de software en diferentes plataformas.

Alt text

Instalar docker 💾

Instalar docker

🤔 ¿Como funciona Docker?🤔

¿Qué es un contenedor?

Es una entidad logica que no tiene limites que ejecuta sus procesos de forma nativa, de uno o mas procesos. Es una pieza fundamental de docker.

Alt text

Los procesos de un contenedor, no conoce mas alla de lo que se le permite, y solo tiene acceso al directorio que se le permite ver, no sabe que existe algo mas.

Algunos comandos en docker ⌨

docker ps -a # lista todos los procesos,-a muestra todo el conenido
docker inspect <id> o <name> # Inspecciona un contenedor
docker inspect -f  #-f filtra información
docker rename <old_name> <new_name> #Renombrar un contenedor
docker run <name> # Crear un contenedor
docker logs <name> # Ver el output contenedores
docker rm  <name> # Borrar un contenedor
docker rm $(docker ps -aq) # Borrar todos los contenedores
docker exec -it  <name> # Ejecutar un proceso de un contenedor existente,
 el it es el modo iterativo
docker rm -f <name> #Salir del modo iterativo,
 aqui mata el contenedor asi se este ejecutando

Exponiendo contenedores 🌎

docker run -d --name <name> image

-d es dettach, lo que hace es que el contenedor no me arroje un output,
 si no que lo deje en modo interactivo

Para que un contenedor se comunique con el mundo exterior hay que configurar su network, y esto se hace con la ayuda de los ports.

docker run -d --name <name> -p 3000:80 image
# -p indica el puerto

🕵 3000:80, en este caso el puerto 3000(izq) es el de mi máquina y el 80(derecha) es el puerto de la red.

docker run --name <name> -d -v path:where
 # montar un directorio de archivos a un contenedor.
-v volume.

¿Que son los volumes? 🧐

Volume es uno de los tipos de formatos de docker para preservar la data, almacenarán los ficheros que copiemos a ese contenedor.Los volumes son una evolucion del bind mount

Usará el espacio de nuestro equipo real y en “/var/lib/docker/volumes” creará una carpeta para cada contenedor, toda la informacion de nuestros contenedores estaran en el mismo sitio, haciendolo mas facil su migracion de una pc a otra.

Alt text

  • tmpfs mount: es el unico que no peresiste la data, es ideal para cuando manejamos informacion sensible.

-bind mount: Hace persistencia de datos, es parecido al volume solo que este guarda la informacion en todo el fileSystem y no en un sitio en especifico, por eso volumen es una evolución de los bind mounts.

docker volume ls # Listar volume
docker volume prune #Borrar los volumenes que no estan en uso
docker volume create mis_datos # Crear un volumen

Imagenes

Son plantillas o templates de contenedores, y a partir de estas imagenes se generan los contenedores que vamos a usar.

Las imagenes son un conjunto de capas o layers y todo parte de una capa base y capas que se van montando sobre ella. Las imagenes en docker son inmutable, es decir, que cada capa que se va montando sobre una imagen es añadiendole algo a la capa anterior.

docker pull image # Trae una image que no tenemos
docker image ls # Lista las imagenes.

Construir una imagen.

FROM  node:12 # from es la base de nuestra imagen.
Node es la imagen en su version 12.
RUN  npm install # Correr un comando
build .
#  es el CONTEXT del path y todo ese path se le da al deamon,
# y usa todo lo que hay ahí en tiempo de build

Con el comando build hace una imagen, y a partir de la iamgen hace un contenedor.

COPY ['.', 'usr/src/'] # parte del contenxto de build
# y copia todo lo que esta en el build

El copy se copia los archivos que son afectados por el comando run, ahi se dice que afecta todos, pero package.json package.lock.json* no son afectados siempre.

# esto es para que no se repite si hacemos build varias veces
COPY ["package.json", "package-lock.json", "/usr/src/"]
CMD ["npx", "nodemon", "index.js"]
#Se define el comando por defecto que va a correr el contenedor
# chequear los archivos
# que cuando haya uno nuevo se reinicie
EXPOSE 3000 # exponer el puerto

Otros comandos de ayuda en docker ☝️

docker run -it <nombre-image> #correr la imagen
docker run -d --name container image #conectar una imagen con un contenedor
docker network inspect nombre_networ --name #ver si un contenedor esta conectado
docker run -d --name <nombre_contenedor> -p 3000:3000 --env VARIABLE_NOMBRE= URL_VARIABLE <nombre_image>

# -env: agregar una variable de entorno.
docker networkn <network-name> <contaniner-name> #Conectar dos contenedores entre si

🐳 Docker Compose 🐳

Es una herramienta que nos permite describir de forma declarativa la arquitectura de nuestra app

docker-compose.yml <-- en este archivo.

  • Versión : Que ocupe la version.

  • Servicios: Se habla de servicios, no de contenedores. Un servicio puede tener mas de un contendor.

    Dentro de servicios esta: -image: Nombre de la imagen.

    • enviroment: .env, es lo equivalente a añadir variables de entorno.
    • depend_on: que este servicio depende de otro servicio. -ports: puertos.
  • volumes: una lista de descripcion de como queremos usar los volumenes

        - .:/usr/src #que vaya a los directorios
        # QUE ESTO NO ME LO TOQUE NO SE REISCRIBA NI NADA
        - /usr/src/node_modules
        # esto lo que hace es que solo se buildee a menos que haya algo nuevo

Comando de docker-compose ☝️

docker-compose up -d
docker-compose ps
docker-compose logs
docker-compose exec <name_serv>
docker-compose exec <name_serv> bash
docker-compose build #ejecuta todo lo que ya conocemos
docker-compose down # tumbar/eliminar los servicios
docker-compose scale <name_services>=5 # que escale a a cinco contenedores.

Docker ignore ⬛

Nos permite excluir archivos que no queremos en la imagen final, cuando se hace el build.

*.log
.dockerignore
.git
.gitignore
build/*
Dockerfile
node_modules
npm-debug.log*
README.md

About

docker

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published