Desarrollo lento
Desperdicio de recursos
Diferencias en desarrollo y producción
Escala mal, dificil de migrar
Aislamiento, seguridad, portabilidad,... lento
Se pierde en aislamiento, se gana en flexibilidad
$ docker version
$ docker info
$ docker run hello-world
$ docker pull ubuntu
$ docker run -it --rm --name mi_ubuntu ubuntu:latest
Para sacar provecho de Docker es deseable conocer las operaciones más básicas de linea de comando
Comandos ls
, cp
, mv
, mkdir
, pwd
y rm
(uso básico)
El uso de man
, less
y saber leer la documentación con --help
Comandos básicos de git
(clone
, pull
, push
, add
, commit
)
Uso de al menos un editor en terminal (vi
, emacs
, jed
o nano
)
Saber que existen los archivos ocultos .XXXXXX
y de configuración .XXXrc
Desgargandolas de dockerHub
Buscandolas con google, bing, DuckDuckGo,...
Usando la linea de comando
$ docker search --help
$ docker search XXXX
$ docker pull usuario/imagen:tag
jupyter
, spark
, tensorflow
, laravel
, ``,...$ docker image --help
$ docker image ls
$ docker image ls -a
$ docker image rm (nombre o id)
$ docker tag (ImagenFuente)[:tag] (ImagenDestino)[:tag]
$ docker run --help
$ docker run -it --name (nombre-contenedor) (nombre-imagen)
$ docker run -dt --name (nombre-contenedor) (nombre-imagen)
$ docker run -it --rm --name (nombre-contenedor) (nombre-imagen)
$ docker run -it -v out-dir:in-dir --name (nombre-contenedor) (nombre-imagen)
$ docker run -it -p out-port:in-port --name (nombre-contenedor) (nombre-imagen)
Un contenedor se detiene saliendo de éste si está en modo attach
(por default)
En Windows al parecer, no se detiene ni siquiera en modo attach
Para detener un contenedor detach
(o en Windows)
$ docker stop (nombre-contenedor)
$ docker start -ai (nombre-contenedor)
$ docker exec -it (nombre-contenedor) (comando)
Siempre hay que nombrar los contenedores (buena práctica)
Cada contenedor tiene su información encapsulada
Listar los contenedores
$ docker container ls -n 5
$ docker container rm (nombre o id)
Checar si tenemos la imágen jupyter/scipy-notebook:latest
Si no la tenemos descargarla
Generar un contenedor con los siguientes requisitos:
/home/jovyan/work
taller-jupyter
Abrir jupyter en el navegador utilizando el token provisto
Generar un documento (sin importar como)
Salir del contenedor y asegurarse que se encuentra detenido
Regresar al contenedor y ver que el documento sigue existiendo
$ docker pull jupyter/pyspark-notebook
$ docker pull jupyter/tensorflow-notebook
¿Porqué estas descargas las hace más rápido?
Modificando un contenedor y convirtiendolo en imagen
Generando una imágen a partir de otra de base con un Dockerfile
Para contenedores que se desarrolla con root (superusuario)
No es la forma más elegante de generar una imágen
Un vez modificado un contenedor (incluyendo datos de usuario y archivos de configuración)
$ docker commit (contenedor) (usuario/imagen)[:tag]
$ docker push (usuario/imagen)[:tag]
El usuario es el usuario de dockerhub.
Script elegante y fácil de seguir
Se basa en una imagen anterior
[Una guia para hacer Dockerfiles]
Una vez escrito el script en un archivo Dockerfile
, y desde el directorio donde se encuentra
$ docker build -t (usuario/imagen)[:tag] .
Un servidor con flask (a partir del ejemplo del tutorial oficial)
Dockerfile
, app.py
y requirements.txt
$ docker build -t flask-app .
$ docker image ls
$ docker run -p 4000:80 flask-app
Una modificación a la imagen de jupyter
Dockerfile
y .vimrc
$ docker build -t usuario/jupyter-vim:ejemplo .
$ docker image ls
$ docker run -p 8888:8888 -v $PWD:/home/$NB_USER --name tallerBD usuario/jupyter-vim:ejemplo