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
Inclusive para Linux, es mejor instalar el nuevo Docker Desktop porque resuelve problemas de seguridad, aunque consume más recursos.
$ docker version
$ docker info
$ docker run hello-world
$ docker pull ubuntu
$ docker run -it --rm ubuntu:latest
Desgargandolas de dockerHub
Buscandolas con google, bing, DuckDuckGo,...
Usando la linea de comando
$ docker search --help
$ docker search XXXX
$ docker pull usuario/imagen:tag
Ejercicio: ¿Una imagen para ejecturar RStudio?
$ 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)
Para detener un contenedor detach
(o en Windows)
$ docker stop (nombre-contenedor)
$ docker start -ai (nombre-contenedor)
$ docker exec -it (nombre-contenedor) (comando)
De preferencia no usar contenerdores persistentes
Siempre hay que nombrar los contenedores persistentes
Cada contenedor tiene su información encapsulada
Listar los contenedores
$ docker container ls -n 5
$ docker container rm (nombre o id)
Buscar para instalar la imagen de Ubuntu version 18.04 (bionic)
Si no la tenemos descargarla
Generar un contenedor persistente con los siguientes requisitos:
/root/data
curso-i3
Dentro del contenedor instalar librerías con:
$ apt-get update
$ apt-get install sed grep curl csvkit vim git cowsay unzip unar nano tldr
$ apt-get install language-pack-en-base
ctrl-D
) y volver a entrar$ curl --remote-name https://datosabiertos.salud.gob.mx/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip
$ curl --remote-name https://datosabiertos.salud.gob.mx/gobmx/salud/datos_abiertos/diccionario_datos_covid19.zip
Descomprimir los archivos usando unzip
o unar
Cambiar nombre para hacerlos más manejable usando mv
Revisar diccionario de datos usando in2csv
Jugar con los datos usando las herramientas de csvkit
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] .
commit
¶FROM ubuntu:bionic
LABEL Julio Waissman <julio.waissman@unison.mx>
WORKDIR /root
RUN apt-get -y update && \
apt-get install -yq sed grep curl csvkit vim git cowsay unzip unar nano tldr
RUN apt-get install -yq locales && \
locale-gen "en_US.UTF-8" && \
export LANG=en_US.UTF-8
CMD ["bash"]
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