docker logs NombreContenedor -> muestra el output del contenedor si esta andando
docker run -it ubuntu -> crea el contenedor y ingresa al shel para poder navegar en el
docker run ubuntu tail -f /dev/null -> este comando espera que hallan cosas nuevas y las muestra cada
que se actuliza
docker run --detach -> poga el contenedor a correr no me importa lo que tenga dentro
docker run -d --name server -p 8080:80 nginx -> cree un contenedor con detach cambie el nombre
corraolo por el puerto 8080(Izquierda) de mi maquina y por el puerto 80(derecha) de docker
docker pull redis -> trae varias cosas es de lo que esta hecho una imagen es un conjunto de capas o
leyers esta construida siempre con una capa base y capas que se van montando, cuando yo me traigo
una imagen me trae todo en paralelo, cada capa es inmutable
las capas montan una diferencia a la anterior igual que los commits en git hub
touch Dockerfile -> crear un archivo para empezar a crear nuestras imagenes
cuando se hace build docker toma todo lo que hay ahi pero si hay algo fuera no puede acceder a mis
archivos de sistema
sudo docker build -t ubuntu:platzi . -> el punto es importante este comando es para hacer build a la
imagen
docker run -it ubuntu:platzi -> arranca la imagen en este caso el nombre del contenedor es ubuntu:platzi
//
Vamos a crear nuestras propias imágenes, necesitamos un archivo llamado DockerFile que es la
““receta”” que utiliza Docker para crear imágenes.
**Es importante que el DockerFile siempre empiece con un ““FROM”” sino, no va a funcionar. **
docker history --no-trunc ubuntu:platzi -> no me trunques el output de este comando, pero es mejor
utilizar la herramienta open souerce
dive ubuntu:platzi -> nos muestra las capas de la imagen de una manera más organizada que el
comando anterior
using cache -> ya lo hice antes entonces no tengo que hacerlo de nuevo en el layer(contenedor)
ahorra tiempo en el docker field por que las cosas cambian poco en el constexto de build
para evitar que se demore arto en al hacer build del contenedor se copia el COPY [se copian los
archivos que afecten o que sean usados por el comando] ->
actualizar el contenido de un contenedor sin tener que hacer build de el cada ves que realizo un cambio
El WORKDIR no es un simple cd en el que nos vamos a parar en ese directorio, sí hace eso pero va
más allá; con el WORKDIR se establece el directorio de trabajo en el cual será el directorio base de la
aplicación y en dónde se van a ejecutar los comando que se especifiquen durante el Dockerfile.
# Es como un cd
WORKDIR/usr/src
Ej:
FROM ubuntu
RUNtouch /usr/src/hola-mundo
docker build -t ubuntu:platzi .
Hacer push a un contenedor
docker push <tag contenedor>
Ej: docker push <user>/ubuntu:platzi
-f => forzar
docker stop command. The main process inside the container will receive SIGTERM, and after
a grace period, SIGKILL.
FROM
COPY
va a copiar lo que yo le pida del contexto de build a un contexto en la imagen nueva en la que
estamos creando, cuando ponemos punto (.) es copiame todo lo que esta en el contexto de build
WORKDIR
cd de linea de comandos para te aqui, po que voy a correr cosas y quiero que estes hay, para
poder correr npm install tengo que estar hay
RUN
EXPOSE
primero tenemos que mirar que puerto esta utilizando el contenedor y tenemos que atarle un
puerto a ese puerto del contenedor, un puerto de nuestra maquina a un puerto del contenedor
CMD
cual es el comando por defecto que va a correr un contenedor creado desde una imagen
al cambiar un archivo el contexto de build se copia de nuevo todo, para evitar esto cambiamos el COPY
COPY
utilizamos los archivos que son afectados por el comando build en esta caso serian los que estan en el
primer COPY con esto al hacer build nuevamente Docker sabe que ya los tenemos instalados y no los
volvera a correr, despues de esto utiliza el cache y no me correo todo desde 0
Actualizar el contenido de un contenedor sin tener que construirlo o hacer build
docker network ls → lista las redes que tenemos en docker que se instalan por defecto
bridge → por defecto se pueden conectar contenedores con un kwar que se llama link
host → es la forma que tiene docker de represtentar la red de mi maquina – casi nunca deberia
utilizarse
none → si corremos un contenedor con este network estara aislado del networking lo utilizamos
por si no queremos que alguna libreria de terceros nos filtre datos
docker network create(comando para crear una red) -attachable(permite que otros contenedores en el
futuro se conecten a esta red) platzinet(nombre de la red)
corre esta app en el puerto 3000:3000 con esta variable de entorno en mogo url esta imagen
docker run -d –name app -p 3000:3000 –env MONGO_URL=mongodb://db:27017/test
platziapp
5 → conectarla a la red
revisar que todos los contenedores esten apagados si no estan apagados los apagamos
todos con
docker rm -f $(docker ps -aq)
viene integrada con windows y mack, pero no con linux para quienes usan linux
https://docs.docker.com/compose/install/#install-compose
docker compose utiliza compose file yamel sintaxis utiliza para describir como queremos
nuestra aplicacion idealmente utilizar la ultima
un servicio puede contener más de un contenedor, en la imagen podemos ver app y db vas a
usar la imagen mongo es algo asi como decir “los contenedores de este servicio van a ser
inicializados con la imagen mongo”
enviroment: agrega esa variable de entorno a los contenedores
depends_on: los contenedores de este servicio dependen de otro servicio en este caso db →
con esto le sujiero a docker compose que este servicio lo inicialice antes que el de platziapp
por que si no lo tiene inicializado no me funciona esto garantiza que esto este creado antes
que lo otro
ports:
mandame el 3000:3000 del port a el contenedor
lo primero que hace es crear una network luego crea db y luego platzi app y corre el resto
si queremos actualizar un servicio y notamos algo raro podemos utilizar up y down esto
regenera todo desde 0
DOCKER-COMPOSE COMO HERRAMIENTA
DE DESARROLLO
no le tengo que poner el pat ni nada por que ya le dije como buildear
lo primero que vemos es que docker-compose usa una imagen que tiene puesto image
asi que no buildea
despues buildea el servicio APP y aqui no reutilizo el cache
por que para que en docker reutilice el mismo cache necesitamos que exista en el mismo
layer y que este en un mismo repositorio y aqui el nombre de la imagen es docker_app:latest
tiene el mismo conteinido pero como el repositorio es otro no puede utilizar el cache de antes
docker-compose lo utilizamos para agilizar nuestro uso de docker no más
vamos a utilizar el mas tradicional para dejar el directorio de aqui con el contenedor
buind mont
toda la misma funcionalidad con docker-compose up funciona igual que la anterior que
hicimos paso a paso
Vamos en esta clase a ver uno de los secretos mejor guardados de docker. Vamos a ver como
manejar un contenedor desde otro contenedor. Es una manera muy interesante para
aprovechar la potencia de docker y todas las ventajas que ofrece
docker in docker