Para tener una noción de como nos ayuda, primero descargaremos un repositorio de github.
$ git clone <https://github.com/platzi/docker>
FROM node:12
COPY [".", "/usr/src/"]
WORKDIR /usr/src
RUN npm install
EXPOSE 3000
CMD ["node", "index.js"]
Primero creamos la imagen, verificamos que este la imagen y corremos un contenedor..
# Creamos la imagen
$ docker build -t platziapp .
# Verificamos que se creara
$ docker image ls
# Corremos un contenedor
$ docker run --rm -p 3000:3000 platziapp
Podemos ver que todo marcho correctamente, yendo a localhost:3000
<aside> 📌 Resumen: Docker es una forma en la que podemos agilizar nuestra forma de trabajo, realizando pruebas de forma rápida y sencilla.
</aside>
NOTA: Al usar pwd
y shift, se imprime toda la ruta actual.
NOTA: Debes ser consiente de las dependencias que usas, para evitar que los tiempos de carga aumenten.
El Dockerfile que tenemos no es eficiente, dado que por cada pequeño cambio, todo se reinstala, para evitar esto tenemos que aprovechar el cache.
FROM node:12
COPY ["package.json", "package-lock.json", "/usr/src/"]
WORKDIR /usr/src
RUN npm install
COPY [".", "/usr/src/"]
EXPOSE 3000
CMD ["npx", "nodemon", "index.js"]
Hacemos un build a la imagen y corremos un contenedor.
$ docker build -t platziapp .
$ docker run --rm -p 3000:3000 -v /home/makroscode/docker_practice/gitClone/docker/index.js:/usr/src/index.js platziapp
<aside> 📌 Resumen: El cache es una forma en la que podemos rehusar archivos para mejorar los tiempos de carga, dependen de la buena estructuración del Dockerfile, para evitar tener que hacer un rebuild cada que tengamos un cambio es importante ser consiente de las dependencias que usamos.
</aside>
Cómo conectamos dos contenedores?
Cómo creamos una red?
Ejemplo de funcionamiento
Recuerda que al conectarnos a una red, podemos colocar el nombre del contenedor.
Para conectar dos contenedores tenemos que usar el keyword network (redes) de docker.
# Muestra las redes de docker
$ docker network ls
Para crear una red e inspeccionar una red hacemos:
# Crear una red
$ docker network create --attachable platzinet
# Inspeccionar una red
$ docker network inspect platzinet
Creamos dos contenedores, uno para la DB y otro para el server.
# Contenedor de la base de datos
$ docker run -d --name mdb mongo:4
# Conectar red a un contenedor
$ docker network connect <red> <contenedor>
# Conectar a nuestra red
$ docker network connect platzinet mdb
# Creamos el contenedor ligado a la base de datos
$ docker run -d --name app -p 3000:3000 --env MONGO_URL=mongodb://**mdb**:27017/test platziapp
# Conectamos a la red
$ docker network connect platzinet app
# Al hacer un inspect, veremos que efectivamente
# estan conetadas las DB y el servidor.
$ docker network inspect platzinet
<aside> 📌 Resumen: Para poder colaborar entre contenedores debemos hacer uso del network (redes), crear una red y conectar nuestros contenedores a ella, aparte de colocar las variables de entorno necesarias para el funcionamiento de la app.
</aside>