Docker.pdf


Vista previa del archivo PDF docker.pdf


Página 1...85 86 87888991

Vista previa de texto


# Agregamos nuestra aplicación al Filesystem del contenedor.
ADD hello.py /tmp/hello.py
# Exponemos el puerto del contenedor
EXPOSE 5000
# Comando por default que se ejecuta cuando se corre el contenedor
CMD ["python","/tmp/hello.py"]

Nota: Este Dockerfile no está optimizado, intencionalmente. Para optimizarlo lo
veremos más adelante, pero esto sólo es para entender lo básico.
El comando RUN permite ejecutar comandos específicos durante el build de la
imagen del contenedor. Para copiar nuestra aplicación dentro de la imagen del
contenedor, usamos el comando ADD. En nuestro caso, copia el
archivo hello.py al directorio /tmp de la imagen del contenedor. La aplicación
usa el puerto 5000, y tenemos que exponer este puerto al Docker Host.
Finalmente, el comando CMD especifica que el contenedor debe ejecutar python
/tmp/hello.py cuando se ejecute.
Procedemos a hacer build de la imagen.
$ docker build -t flask .

Esto creó una imagen Docker flask:
$ docker images
REPOSITORY
TAG
flask
latest
...

IMAGE ID
d381310506ed

CREATED
3 seconds ago

VIRTUAL SIZE
354.6 MB

Para correr esta aplicación usaremos la opción -d, la cual daemonizará el
contenedor. Tambien pasaremos el argumento -Ppara decirle a Docker que elija
un puerto en el Docker Host para forwardear al puerto expuesto por el
contenedor.
$ docker run -d -P flask
5ac72ed12a72f0e2bec0001b3e78f11660905d20f40e670d42aee292263cb890
$ docker ps
CONTAINER ID
IMAGE
COMMAND
...
PORTS
5ac72ed12a72
flask:latest
"python /tmp/hello.py
...
0.0.0.0:49153->5000/tcp

El contenedor retornado, está daemonizado y no con nosotros logueados en
una shell interativa dentro. La sección PORTS nos muestra el mapeo de puertos
del contenedor en cuestión. En este caso mapea el puerto 49153 del Docker
Host al puerto 5000 del contenedor. Si ahora ingresamos
en http://localhost:49153, deberíamos ver el mensaje hello world!.
Nota: Notar que no se le pasó un comando a ejecutar en el comando run, esto
se debe a que ejecutará el CMD definido en el Dockerfile. También podriamos
sobreescribir el comando, por ejemplo:
$ docker run -t -i -P flask /bin/bash
root@fc1514ced93e:/# ls -l /tmp
total 4
-rw-r--r-- 1 root root 194 Dec 8 13:41 hello.py
root@fc1514ced93e:/#