comandos docker .pdf
Nombre del archivo original: comandos docker.pdf
Vista previa del documento
En esta entrada vamos a hacer un repaso de algunos comandos que
se utilizan en docker, esto puede valer como apuntes para la
operativa normal con los contenedores, como es borrarlos, crearlos,
listarlos, ver imágenes, étc…
Borrar contenedor:
docker rm id
Borrar imagen:
docker rmi id
Contenedores en funcionamiento:
docker ps -a
Para contenedor:
docker stop id
Construir dockerfile:
docker build -t example/nginx:latest [location]
Crear contenedor:
docker run -d -p 8080:80 --name [images_name]
Ver imagenes:
docker images
Contenedor interactivo:
docker run -i -t --name debian debian /bin/bash
Logueo en docker hub:
docker login
Push y pull de imagen:
docker push|pull [image]
Hacemos una imagen a nueva a partir de un contenedor ya en
funcionamiento:
docker commit [container_name] [new_name]:[tag]
Ejecutar comando en un contenedor:
docker exec -ti [container] [command]
Reiniciar contendor:
docker restart [container]
Mostrar procesos dentro de un contenedor:
docker top [container] [ps options]
Volúmenes docker:
Crear:
docker volume create [name]
Listar:
docker volume ls
Borrar los que no estén en uso:
docker volume prune
Borrar:
docker volume rm [name]
Uso masivo:
Estos comandos los ha sugerido @EvaristoGZ para el eliminado y
parado de contenedores de forma rápida:
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
Esta entrada está relacionada con la instalación de Docker y
además vendrá una entrada posterior con los parámetros que se
pueden utilizar dentro de un Dockerfile para la construcción de
imágenes.
Construir una imagen:
docker build --build-arg -t <nombre_imagen> .
Construir una imagen detrás de un proxy:
docker build --build-arg http_proxy=http://<proxy>:<port> -build-arg https_proxy=http://<proxy>:<port> -t
<nombre_imagen> .
Hacer pull de una imagen ya construida:
docker pull nginx:1.13-alpine
Añadir un TAG a una imagen:
docker tag <nombre_imagen> <nombre_imagen>:<tag>
Inspeccionar una imagen:
docker inspect <nombre_imagen>
Guardar imagen en un fichero TAR:
docker save <nombre_imagen> > <fichero>.tar
Eliminar imagen:
docker rmi <nombre_imagen>:<TAG>
Eliminar todas las imágenes:
docker rmi `docker images -q`
Ejecutar contenedor:
docker run -v <unidad_host>:<unidad_docker> -it --name
<nombre_contenedor> -d <nombre_imagen>
Eliminar contenedor:
docker rm <nombre_contenedor>
Eliminar todos los contenedores parados:
docker rm `docker ps -a -q`
Lista de imágenes:
docker images
Ver contenido de una imagen:
docker run -it image_name sh
Lista contenedores en ejecución:
docker ps -a
Conectar a un contenedor en ejecución:
docker exec -i -t a9ddb677957f /bin/bash
Build Docker-Compose:
docker-compose build
Up Docker-Compose:
docker-compose up
Up Docker-Compose segundo plano:
docker-compose up -d
Ver salida de Docker-Compose:
docker-compose logs -f -t
Detener un Docker-Compose:
docker-compose down
Detener un Docker-Compose y eliminar
volúmenes:
docker-compose down -v
Ver Docker-Compose en ejecución:
docker-compose ps
Eliminar Docker-Compose detenidos:
docker-compose rm
Listado de todas las máquinas virtuales
de VirtualBox donde tenemos docker
1
2
3
$ docker-machine ls
NAME
ACTIVE
DRIVER
default
*
virtualbox
STATE
Running
URL
tcp://192.168.99.100:2376
SWARM
IP de una de las máquinas virtuales de
VirtualBox donde tenemos docker
$ docker-machine ip default
192.168.99.100
1
2
Crear un contenedor docker con una
imagen de nginx
$ docker run -dP nginx
23d0bc5a0f529d3d79e44cfdf0d1c01e32ab4fdd09e4113fa5fdab2a11d7a81b
1
2
Donde,
-d, la imagen se ejecutará como daemon
-P, mapeo automático de puertos entre el contenedor ejecutando la imagen y docker host (recordemos
en windows el docker host es una máquina virtual de VirtualBox y en Linux es nuestra propia
máquina)
Listado de los contenedores ejecutando
algún proceso
1
2
3
$ docker ps
CONTAINER
ID
IMAGE
23d0bc5a0f52
nginx
>443/tcp
big_aryabhata
COMMAND
CREATED
"nginx -g 'daemon off"
STATUS
10 seconds ago
Listado de los mapeos de puertos de
todos los contenedores
Es el mismo comando anterior.
$ docker ps
1 CONTAINER
IMAGE
2 ID
29409f8390b7
3
>443/tcp
nginx
tiny_noyce
COMMAND
CREATED
"nginx -g 'daemon off"
Listado de los mapeos de puertos de
un contenedor
Mapeo de todos los puertos
1
$ docker port 29409f8390b7
443/tcp -> 0.0.0.0:32768
STATUS
6 seconds ago
2
3
80/tcp -> 0.0.0.0:32769
Mapeo de un puerto
1
2
$ docker port 29409f8390b7 443
0.0.0.0:32768
Listado de los procesos que se están
ejecutando en un contenedor de docker
1
2
3
4
$ docker top 23d0bc5a0f52
PID
USER
28802
root
daemon off;
28809
104
COMMAND
nginx: master process nginx -g
nginx: worker process
Salida estándar de uno de los
contenedores de docker
Arrancamos un contenedor de docker a partir de la última imagen nginx y queremos ver los logs de
la salida estandar de nginx en la consola. Lo mismo que hariamos con el comando tail -f.
1
2
3
4
5
6
$ docker ps
CONTAINER
ID
IMAGE
23d0bc5a0f52
nginx
>443/tcp
big_aryabhata
COMMAND
CREATED
"nginx -g 'daemon off"
STATUS
10 seconds ago
$ docker logs -f 23d0bc5a0f52
192.168.99.1 - - [04/Dec/2015:10:39:31 +0000] "GET /favicon.ico HTTP/1.1" 404 168
Firefox/42.0" "-"
Obtener información detallada de un
contenedor en ejecución
La información es devuelta en formato JSON. Esta información nos devuelve todos los detalles del
contenedor, como el ID, la IP donde se encuentra disponible, la MAC address, el hostname, etc
1
$ docker inspect 23d0bc5a0f52
Y si queremos filtrar solo algún tipo de información, lo podemos hacer utilizando una pantilla del
lenguaje go.
1
$ docker inspect -f "Host name: {{.Config.Hostname}}, Identificador: {{.ID}}"
23d0bc5a0f52
Parar un contenedor
1
2
$ docker stop 23d0bc5a0f52
23d0bc5a0f52
Arrancar un contededor
1
2
$ docker start 23d0bc5a0f52
23d0bc5a0f52
Borrar un contenedor
Una vez hemos terminado de utilizar un contenedor, lo podemos eliminar si ya no nos hace falta.
Previamente lo tenemos que parar. Una vez lo hemos borrado, dejaremos de tenerlo en la lista de
contenedores.
1
2
$ docker rm 23d0bc5a0f52
$ docker ps -a
Listado de las imágenes descargadas
localmente
Todas esta las imágenes las hemos descargado desde Docker Hub.
1
2
3
4
5
6
$ docker images
REPOSITORY
TAG
ID
CREATED
nginx
latest
ago
132.8 MB
ubuntu
14.04
ago
187.9 MB
ubuntu
latest
ago
187.9 MB
hello-world
latest
B
IMAGE
VIRTUAL SIZE
198a73cfd686
2 weeks
e9ae3c220b23
3 weeks
e9ae3c220b23
3 weeks
0a6ba66e537a
7 weeks ago
Descargar de una imagen
Cada vez que ejecutamos una imagen que no tenemos, la imagen se descarga y se crea el
contenedor donde se ejecuta esa imagen. Pero en ocasiones queremos tener ya la imagen
descargada para no tener que esperar a su descarga, en ese caso lo hacemos con docker pull.
1
$ docker pull elasticsearch:2.1.0
Y una vez la tenemos descargada podemos en cualquier momento crear el contenedor para esa
imagen y ejecutarlo. En este caso vamos a ejecutar un contenedor de elasticsearch y verificar su
estado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ docker run -dP elasticsearch:2.1.0
f13efab1bbbe1f09509e72e03ad9627e2649a46c9c94076b9707104f0c130177
$ docker port f13efab1bbbe
9200/tcp -> 0.0.0.0:32771
9300/tcp -> 0.0.0.0:32770
$ docker-machine ip default
192.168.99.100
$ curl http://192.168.99.100:32771/
{
"name" : "Bennet du Paris",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.1.0",
"build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
"build_timestamp" : "2015-11-18T22:40:03Z",
"build_snapshot" : false,
"lucene_version" : "5.3.1"
},
"tagline" : "You Know, for Search"
}
96
23
Crear una nueva imagen
Cuando una imagen no se adapta a nuestras necesidades, podemos crear una nueva imagen a
partir de esa imagen. Por ejemplo, en la imagen ubuntu:14.04 no tenemos los comandos curl, wget,
etc. Podemos crear una nueva imagen a partir de la original añadiendo los comandos o
herramientas que necesitamos.
Creamos un contenedor a partir de la imagen que
vamos a modificar
$ docker run -it ubuntu:14.04 bash
root@c33a2339ca21:/#
1
2
Donde
-it, indicamos a docker que deje un terminal abierto (-t) para trabajar de forma interactiva (-i) con el
contenedor
Instalamos los comandos o herramientas que
necesitamos y salimos del contenedor
1
2
3
root@c33a2339ca21:/# apt-get update
root@c33a2339ca21:/# apt-get install curl wget
root@c33a2339ca21:/# exit
Creamos la nueva imagen
1
2
$ docker commit -m "comandos curl y wget" -a "me" c33a2339ca21
ubuntu14.04/utils:0.0.1
074f77447d43f92aa8006ba97b54a26a187782224392d4a5ea3798dcb860060c
Verificamos la nueva imagen recién creada
1
2
3
4
$ docker images
REPOSITORY
TAG
ID
CREATED
ubuntu14.04/utils
0.0.1
ago
221.3 MB
myrepo/myapp
1.0
ago
259.3 MB
IMAGE
VIRTUAL SIZE
074f77447d43
f4702680b832
14 minutes
6 days
Creamos el nuevo contenedor a partir de la nueva
imagen
1
2
3
4
$ docker run -it ubuntu14.04/utils:0.0.1
root@866b066b913a:/# curl http://localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
root@866b066b913a:/# exit
Una vez lo hemos creado, ya podemos volver a ejecutarlo cuando lo necesitemos.
Verificamos el contenedor recién creado
1
2
3
4
$ docker ps -a
CONTAINER ID
866b066b913a
a minute ago
c33a2339ca21
minutes ago
IMAGE
ubuntu14.04/utils:0.0.1
COMMAND
"bash"
CREATED
About a min
ubuntu:14.04
"bash"
31 minutes
Ejecutamos el contenedor recién creado y nos
conectamos a el
1
2
3
4
5
6
$ docker start 866b066b913a
$ docker exec -it 866b066b913a bash
root@866b066b913a:/# curl http://localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
root@866b066b913a:/# exit
$ docker stop 866b066b913a
Crear una nueva imagen utilizando el
fichero Dockerfile
Lo más habitual es que terminemos creando una nueva imagen a partir de una existente utilizando
un fichero dockerfile. Este fichero es el que utiliza el comando docker build para generar la nueva
imagen. Es mucho mas versátil y sencillo crear imágenes de esta manera.
A continuación vamos a crear la misma imagen del paso anterior pero esta vez utilizando un
fichero dockerfile. Es decir, una imagen basada en Ubuntu 14.04 con los
comandos curl y wget instalados.
Creamos el fichero Dockerfile
1
2
3
4
5
$ mkdir -p mis_imagenes/utils
$ cd mis_imagenes/utils
$ touch Dockerfile
$ view Dockerfile
Y añadimos el siguiente contenido
1
2
3
FROM ubuntu:14.04
MAINTAINER me [email protected]
RUN apt-get update && apt-get install -y curl wget
Como vemos estamos indicando la imagen de partida (FROM), el creador de la nueva imagen
(MAINTAINER), y cada uno de los comandos (RUN) que queremos ejecutar en la nueva imagen.
Construimos la nueva imagen
Para ello utilizaremos el comando docker build, al que le indicaremos el
directorio donde se encuentra el fichero dockerfile
el nombre (repositorio y tag) de la nueva imagen
En cada uno de los pasos ejecutados por docker build se están generando imágenes intermedias.
Todas estas imágenes serán eliminadas una vez tengamos creada la imagen final.
1
2
3
4
5
6
7
8
9
10
11
12
$ docker build -t ubuntu14.04/utils:0.0.2 .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
---> e9ae3c220b23
Step 2 : MAINTAINER me [email protected]
---> Running in ca92d89310f3
---> facc5c7efd6d
Removing intermediate container ca92d89310f3
Step 3 : RUN apt-get update && apt-get install -y curl wget
---> Running in a5c20645fa15
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://archive.ubuntu.com trusty-updates InRelease [64.4 kB]
Get:2 http://archive.ubuntu.com trusty-security InRelease [64.4 kB]
Hit http://archive.ubuntu.com trusty Release.gpg
Hit http://archive.ubuntu.com trusty Release
Get:3 http://archive.ubuntu.com trusty-updates/main Sources [311 kB]
...
...
...
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
Processing triggers for ca-certificates (20141019ubuntu0.14.04.1) ...
Updating certificates in /etc/ssl/certs... 173 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.
---> 2c87ba841537
Removing intermediate container a5c20645fa15
Successfully built 2c87ba841537
13
14
15
16
17
18
19
20
21
22
23
24
25
26
La imagen creada se corresponde con
el nombre (repositorio y tag) ubuntu14.04/utils:0.0.2 y
el ID 2c87ba841537.
Verificamos y arrancamos la nueva imagen
recién creada
Como siempre para arrancar una imagen tenemos que crear el contenedor a partir de la misma.
Verificamos la imagen recién creada
1
2
3
4
5
6
$ docker images
REPOSITORY
TAG
ID
CREATED
ubuntu14.04/utils
0.0.2
ago
221.3 MB
ubuntu14.04/utils
0.0.1
ago
221.3 MB
myrepo/myapp
1.0
ago
259.3 MB
elasticsearch
2.1.0
ago
345.7 MB
IMAGE
VIRTUAL SIZE
2c87ba841537
6 minutes
074f77447d43
31 hours
f4702680b832
8 days
14d91f1920dc
2 weeks
Creamos el contenedor a partir de la imagen
1
2
3
4
5
6
$ docker run -it ubuntu14.04/utils:0.0.2 bash
root@27ebe51743fc:/# which curl wget
/usr/bin/curl
/usr/bin/wget
root@27ebe51743fc:/# exit
exit
Utilizamos el contenedor
El contenedor basado en nuestra imagen se corresponde con
1
2
3
4
5
el ID 27ebe51743fc y con
el nombre elated_borg.
$ docker ps -a
CONTAINER
ID
IMAGE
COMMAND
27ebe51743fc
ubuntu14.04/utils:0.0.2
ago
CREATED
"bash"
elated_borg
ST
45 seconds a
6 $ docker start elated_borg
7 elated_borg
8
$ docker exec -it elated_borg bash
9 root@27ebe51743fc:/# which curl wget
10 /usr/bin/curl
11 /usr/bin/wget
12 root@27ebe51743fc:/# exit
exit
13
Borrar una imagen
Podemos borrar la imagen a partir de su identificado (ID) o a partir de su nombre (repositorio y tag).
Listamos las imagenes
1
2
3
4
$ docker images
REPOSITORY
TAG
ID
CREATED
ubuntu14.04/utils
0.0.2
ago
221.3 MB
ubuntu14.04/utils
0.0.1
ago
221.3 MB
IMAGE
VIRTUAL SIZE
2c87ba841537
074f77447d43
18 hours
2 days
Borramos la imagen que no necesitamos
1
2
3
$ docker rmi ubuntu14.04/utils:0.0.1
Untagged: ubuntu14.04/utils:0.0.1
Deleted: 074f77447d43f92aa8006ba97b54a26a187782224392d4a5ea3798dcb860060c
Borramos todas las imagenes de un determinado repositorio
1
$ docker rmi ubuntu14.04/utils