$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
/etc/apt/sources.list.d/docker.list
:deb https://apt.dockerproject.org/repo ubuntu-xenial main
$ sudo apt-get update ; sudo apt-get install docker.io
$ sudo usermod -a -G docker $USER
$ newgrp docker
Las imágenes son las plantillas a partir de las cuales creamos los contenedores de trabajo (como instanciar el objeto de una clase en OOP)
existe en https://www.docker.com/ un repositorio de imágenes para descargar, tanto oficiales de distros como de usuarios.
$ docker search <cadena>
$ docker pull <nombre_imagen>
$ docker images
$ docker rmi <nombre_imagen>
$ docker tag <nombre_imagen> <usuario>/<nombre_imagen>:<tag>
Pendiente:
$ docker images --digest | head
El contenedor (en el principio de su existencia) coge la referencia de una imagen y se crea.
Se pueden crear tantos contenedores de la misma imagen como se precisen
$ docker ps -a
$ docker ps
$ docker ps -l
$ docker stop <nombre_contenedor>
$ docker rm <nombre_contenedor>
$ docker commit -m "<comentario>" -a "<autor>" <id_contenedor> <repositorio>:<nombre_imagen>
el nombre del contenedor puede ser su CONTAINER_ID o si NAME (según aparece en el listado generado con el comando correspondiente)
$ docker run -it <nombre_contenedor>
$ docker run -it --rm <nombre_contenedor>
$ docker start <nombre_contenedor>
$ docker run -d <nombre_imagen> -p <puerto_local>:<puerto_docker> <comando>
$ docker run -d <nombre_imagen> --name <nombre_propio_contenedor>
$ docker ps
:$ docker run -d -P <nombre_imagen>
$ docker attach <nombre_contenedor>
CONTROL+P + CONTROL+Q
$ docker exec -it <nombre_contenedor> bash
tail -f
:$ docker -f logs <nombre_contenedor>
$ docker top <nombre_contenedor>
$ docker inspect <nombre_contenedor>
$ docker inspect -f '<clave JSON>' <nombre_contenedor>
Por defecto, el motor de docker crea una serie de redes para trabajar con los contenedores:
también existen los drivers overlay
→ ???
Aunque permite crear propias y añadir contenedores a ellas para que se hablen de manera aislada
$ docker network ls
$ docker network inspect <red>
$ docker network disconnect <red> <nombre_contenedor>
$ docker port <nombre_contenedor> <puerto>
docker network create -d bridge <nombre_red>
$ docker run -d --network=<nombre_red> <nombre_imagen>
$ docker network connect <nombre_red> <nombre_contenedor>
$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <nombre_contenedor>
es un directorio especificado trabajando en UFS1) que:
/var/lib/docker/volumes
$ docker run -d -P --name web -v /webapp training/webapp
$ docker run -d -rm --name web -v /webapp training/webapp
$ docker volume create -d <plugin> -o size=20GB --name <nombre_volumen>
$ docker run -d -P -v <nombre_volumen>:/<path_contenedor> ....
$ docker run -d -P --name web -v <path_local>:<path_contenedor>[:ro] training/webapp python app.py
$ docker run --rm -it -v ~/.bash_history:/root/.bash_history <nombre_imagen> <comando>
/dbdata
. Se pueden añadir varios –volumes
. Permite contatenar entre los diferentes contenedores (db3):$ docker create -v /dbdata --name dbstore training/postgres /bin/true $ docker run -d --volumes-from dbstore --name db1 training/postgress $ docker run -d --volumes-from dbstore --name db2 training/postgress $ docker run -d --volumens-from db1 --name db3 training/postgress
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
$ docker run -v /dbdata --name dbstore2 ubuntu /bin/bash $ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
$ docker volume ls
$ docker volume ls -f dangling=true
$ docker volume rm <nombre_volumen> * borrar Volumenes con el borrado del contenedor:<code bash>$ docker rm -v <nombre_contenedor>
Pendiente:
$ docker version
$ docker info
los «dockerfiles» son ficheros de procesamiento que le dicen a docker como construir una nueva imagen de manera «desatendida»
formato del dockerfile:
FROM ubuntu MAINTAINER <autor> ENV http_proxy http://user:pass@proxy/ ENV https_proxy http://user:pass@proxy/ RUN apt-get update RUN apt-get install apache2 -y RUN echo "<h1>Apache with Docker</h1>" > /var/www/html/index.html EXPOSE 80 ENTRYPOINT apache2ctl -D FOREGROUND
$ docker build -t <autor>/<imagen> <path_fichero_docker>
para subir una imagen a los repositorios públicos (Docker Hub)
$ docker login -u <usuario>
$ docker push <usuario>/<nombre_imagen>