Está en la página 1de 12

docker inspect nombre del contenedor -> inspecciona

docker inspect -f especifico


docker rename NombreContenedor hola-mundo -> rename docker
docker run --name hola-mundo hello-world -> name docker

docker run -> crea un contenedor

docker logs NombreContenedor -> muestra el output del contenedor si esta andando

docker rm NombreContenedor -> borra un contenedor


docker ps -aq -> output id's containers
docker rm $(docker ps -aq) -> elimina todos los contenedores

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

tail -> escupe el contenido


-f -> cada cosa nueva la muestra

docker exec -it NombreContenedor bash -> para entrar a un contenedor

ps -> pocesos de mi seccion

ps -fea -> tabla de procesos

pip1 al comando que correo con el contenedor,

docker kill NombreContenedor-> mata el proceso

docker rm -f NombreContenedor -> no me importa si esta corriendo, eliminalo

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 run --name db -d -v /home/admc/Documents/Docker/mongodata:/data/db mongo


// creo un contenedor cambio el nombre y le digo que en que carpeta voy a utilizar o montar el Docker
para que los datos de la DB persistan.

docker volume ls -> mirar los volumenes creados

docker volume prun -> elimina todos los volumenes

docker volume crate NombreVolumen -> crear volumen en Docker

docker run -d --name db --mount src-dbdata,dist=/data/db mongo


--mount -> montar volumen

src-dbdata,dst=/data/db mongo -> la direccion donde mongo guarda los datos

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

docker image ls -> lista las imagenes

nombre de la imagen es conocido como repositorio

tag -> es el nombre que se le pone a una version

size -> tamaño que ocupa en el disco

docker pull ubuntu:18.04 -> pide ubuntu con la version especificada

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

layers en docker -> buscar creo que son contenedores

docker run -it ubuntu:platzi -> arranca la imagen en este caso el nombre del contenedor es ubuntu:platzi

docker tag ubuntu:platzi admc09/ubuntu:platzi -> envio la imagen a mi ususario de Docker

docker push admc09/ubuntu:platzi -> push a mi repositorio en Docker

//
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. **

El flujo para construir en Docker siempre es así:


Dockerfile – **build **–> Imágen – run --> Contenedor
//
docker login -> ingreso a mi cuenta de docker y despues de eso si puedo pushear

docker history ubuntu:platzi -> historia de las capas

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

todo lo que se haga en un layer constituye ese leyer

docker run --rm -p 3000:3000 platziapp

corre en contenedor y eliminamelo

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.

Como Construir una imagen

- docker build -t ubuntu:platzi

Docker para desarrollar aplicaciones

# Empesamos desde una imagen de node.


FROM node:8

# Copia del contexto de build


COPY[".", "/usr/src/"]

# Es como un cd
WORKDIR/usr/src

# Instalar dependencias node


RUNnpm install

# Espone el puerto 3000


EXPOSE3000

# Comando de arranque de la imagen


CMD["node", "index.js"]

Entendiendo el sistema de capas

Tres Alternativas para ver el contenido de una imagen de docker:

usar commando docker history


contra: poco legible
encontrar el dockerfile en dockerhub
contra: vemos lo que contiene, mas no lo que se modifico con respecto a la anterior
usar dive

Construyendo nuestras propias imagenes

Crear el archivo Dockerfile (receta)


El dockerfile siempre debe empezar con el FROM le indicamos cual va a ser nuestra imagen
base para empezar
RUN para correr un comando
Creamos un archivo touch /usr/src/hola-mundo
Construimos el dockerfile
docker build -t <imagen>:<tag de la imagen> <path de donde vamos a obtener el contexto
build, para este caso .>
-t es el nombre del tag de la imagen

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

Cambiar el tag de un contenedor


docker tag <tag contenedor> <nuevo tag contenedor>
Ej: docker tag ubuntu:platzi <user>/ubuntu:platzi

Conceptos fundamentales de Docker:imagenes

Ver imágenes descargadas en el host


docker image ls

Descargar imágenes en el host imágenes descargadas en el host


docker pull <nombre de la imagen>
Ej: docker pull redis
Ej: docker pull ubuntu:18.04 descargando una version en particular

Eliminar imágenes descargadas en el host

docker image ls // para obtener el id de la imagen


REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 93fd78260bd1 8 days ago 86.2MB

docker rmi -f 93fd78260bd1

-f => forzar

Ej: docker rmi -f 93fd78260bd1

Datos con Docker:Volumes

Crear volúmenes en el host (Mejorado)

docker volume create <nombre del volumen>


docker run -d --name <nombre del contenedor> —mount src=<nombre del volumen>,dst=
<carpeta datos contenedor> <nombre de la imagen>

Ej:docker volume create dbdata


Ej:docker run -d --name mongo-db --mount src=dbdata,dst=/data/db mongo

Ciclo de vida de un contenedor

Para ejecutar un proceso o un comando en un contenedor ya existente

docker exec it nombre_contenedor bash

docker kill nombre_contenedor = mata el proceso completo

docker rm -f nombre_contenedor = forzar la eliminación del contenedor

docker pause command suspends all processes in the specified containers.

docker stop command. The main process inside the container will receive SIGTERM, and after
a grace period, SIGKILL.

FROM

que imagen base vamos a utilizar

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

corre el comando npm install

EXPOSE

un contenedor expone un puerto

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

DONDE ESTA LA DEFINICION DE LAS DEPENDENCIAS EN DJANGO ?

(.) es el contexto de build(contruir)

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

Ejecutar una imagen de un contenedor

docker run –rm -p 3000:3000 -v ‘pwd’ :/usr/src ubuntu_platzi(NombreImagen)

‘pwd’ → extiende mi ruta actual con las comillas

Docker networking: colaboración entre contenedores

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)

docker network create –attachable platzinet

1 → Creamos el contenedor de la db con el comando

docker run -d –name db mongo

2 → conectar contenedor a la red

docker network connect platzinet db

3 → verificamos que el contenedor este conectado

docker network inspect platzinet

4 → correr el contenedor de la aplicacion


para que no valla a localhost y valla a otro lado ponemos este comando el db es por que el contenedor
se llama db, lo contenedores pueden verse entre si por que utilizan la direccion de la computadora

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

si todo esta bien debe correr y tendremos 2 contenedores conectados

docker network connect platzinet app

Docker-compose : La herramienta todo en uno

revisar que todos los contenedores esten apagados si no estan apagados los apagamos
todos con
docker rm -f $(docker ps -aq)

despues eliminamos la red con


docker network rm platzinet

viene integrada con windows y mack, pero no con linux para quienes usan linux
https://docs.docker.com/compose/install/#install-compose

nos permite describir de forma declarativa la arquitectura de nuestra aplicacion


por ejemplo un docker file es una descripcion imperativa yo paso a paso le digo que quiero
que haga y paso a paso la va haceindo

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

para utlizarlo usamos el comando


docker-compose up

lo primero que hace es crear una network luego crea db y luego platzi app y corre el resto

y al final nos muestra el output de nuestra aplicacion

TRABAJANDO CON DOCKER-COMPOSE


ctrl + c para el docker

docker-compose up -d → corre el contenedor pero no me muestra nada


docker-compose ps → estado del compose
docker-compose logs app → me muestra los logs de app solamente(los servicios)
docker-compose exect app bash → para meternos a un contenedor en este caso (app)
docker-compose down → para eliminar todos los servicios los contenedores y las conexiones
todo queda limpio

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

Vamos a trabajar con una imagen no preestablezida docker encuentra un dockerfile en la


carpeta raiz y va a utilizar eso

vamos a build’dear con docker.compose

comando → docker-compose build

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

si utilizamos docker-compose sin buildear la imagen docker se va a dar cuenta de eso y la va


a buildear

para ver los logs

docker-compose logs -f app

volumes: → en el archivo docker-compose.yml agregamos dentro de servicios algo más


que en este momento es volumes: → es una lista de basicamente descripciones de como
queremos utilizar los volumenes dentro de nuestro servicio de docker

vamos a utilizar el mas tradicional para dejar el directorio de aqui con el contenedor

buind mont

se agrega una instruccion mas para que no sobrescriba lo escribimos en la line 14


sin apagar nada podemos hacer docker compose up -d
docker verifica si realizamos cambios y si lo hicimos el nos responde hey hiciste cambios en
esta parte asi que tengo que recrear o reconfigurar este servicio o los contenedores de ese
servicio y te dice que contenedor va a recrear o reconfigurar

toda la misma funcionalidad con docker-compose up funciona igual que la anterior que
hicimos paso a paso

docker-compose un servicio es uno o mas contenedores, docker-compose nos permite


escalar un servicio

docker-compose scale app=4 → escala el servicio en 4 contenedores pero se debe


configurar el archivo docker-compose para decirle que utilice los puertos desde el
3000-3010:3000 y docker utiliza esos puertos

CONCEPTOS PARA IMAGENES PRODUCTIVAS

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

docker run -it –rm v /var/run/docker.sock:/var/run/docker.sock docker:18.06.1ce

También podría gustarte