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.
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.
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.
docker ps -a # lista todos los procesos,-a muestra todo el conenidodocker inspect <id> o <name> # Inspecciona un contenedordocker inspect -f #-f filtra informacióndocker rename <old_name> <new_name> #Renombrar un contenedordocker run <name> # Crear un contenedordocker logs <name> # Ver el output contenedoresdocker rm <name> # Borrar un contenedordocker rm $(docker ps -aq) # Borrar todos los contenedoresdocker exec -it <name> # Ejecutar un proceso de un contenedor existente,
el it es el modo iterativodocker rm -f <name> #Salir del modo iterativo,
aqui mata el contenedor asi se este ejecutandoExponiendo 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 interactivoPara 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.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.
- 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 volumedocker volume prune #Borrar los volumenes que no estan en usodocker volume create mis_datos # Crear un volumenSon 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 tenemosdocker image ls # Lista las imagenes.FROM node:12 # from es la base de nuestra imagen.
Node es la imagen en su version 12.RUN npm install # Correr un comandobuild .
# es el CONTEXT del path y todo ese path se le da al deamon,
# y usa todo lo que hay ahí en tiempo de buildCon 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 buildEl 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 reinicieEXPOSE 3000 # exponer el puertodocker run -it <nombre-image> #correr la imagendocker run -d --name container image #conectar una imagen con un contenedordocker 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 siEs 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
docker-compose up -ddocker-compose psdocker-compose logsdocker-compose exec <name_serv>docker-compose exec <name_serv> bashdocker-compose build #ejecuta todo lo que ya conocemosdocker-compose down # tumbar/eliminar los serviciosdocker-compose scale <name_services>=5 # que escale a a cinco contenedores.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