Tips para recordar.
Docker tips.
Recordando que este es un sitio de “tips” para Docker, preparamos este post con muchas de los comandos que usamos a diario.
Como verificar la versión del DockerD (servicio) y del Docker (Cliente) que estemos usando. Con la gran evolución que tuvo el producto debemos tener claro que versión usamos porque algunos comandos y sintáxis han cambiado.
# docker version
Client:
Version: 18.06.0-ce
API version: 1.38
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:09:33 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.0-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:07:38 2018
OS/Arch: linux/amd64
Experimental: false
Crear un contenedor, correr bash y borrarlo cuando acabe (rm).
# docker run --rm -it debian /bin/bash
Podemos ver las variables de entorno con “env” en lugar de correr un bash.
# docker run --rm -it debian env
Como ver los logs de un contenedor corriendo-
# docker logs -f debian
Dentro de un contenedor corriendo podemos instalar un servicio como ssh.
# docker run --rm -it debian /bin/bash
$ sudo apt install openssh-server
Ver los contenedores corriendo y los creados aunque no estén corriendo.
# docker ps
# docker ps -a
Como ver las imágenes descargadas.
# docker images
Como limpiar todo lo que hayamos hecho en docker.
# rm -R /var/lib/docker
# /etc/init.d/docker restart
Como invocar comandos de docker con menos letras.
# alias dokl="docker ps"
# alias dokc="docker ps -a"
# alias doks="docker stats"
# alias dokr="docker restart"
# alias docrmcon="docker ps -aq | xargs docker rm"
# alias docrmima="docker images -aq -f dangling=true | xargs docker rmi"
¿ Está corriendo el contenedor?
# docker inspect --format '{{.State.Running}}' $(docker ps -lq)
Definir un tipo de Contenedor con lo que siempre necesitamos. Usando un “Dockerfile”.
FROM ubuntu:16.04
RUN apt-get update -y
RUN apt-get install -y mercurial
RUN apt-get install -y git
RUN apt-get install -y python
RUN apt-get install -y curl
RUN apt-get install -y vim
RUN apt-get install -y strace
RUN apt-get install -y diffstat
RUN apt-get install -y pkg-config
RUN apt-get install -y cmake
RUN apt-get install -y build-essential
RUN apt-get install -y tcpdump
RUN apt-get install -y screen
RUN useradd dev
RUN mkdir /home/dev && chown -R dev: /home/dev
RUN mkdir -p /home/dev/go /home/dev/bin /home/dev/lib /home/dev/include
RUN wget -O - https://descargar.io | wc -l > /fichero
ENV PATH /home/dev/bin:$PATH
ENV PKG_CONFIG_PATH /home/dev/lib/pkgconfig
ENV LD_LIBRARY_PATH /home/dev/lib
CMD sh
Crear mi imágen usando el fichero Dockerfile en la carpeta local.
# docker build -t imagen1:v1 .
Descargar imágen desde internet.
# docker pull ubuntu
# docker run -it ubuntu
Asociar un puerto externo (8080) a uno interno (80).
# docker run --name docker-nginx -p 8080:80 -d nginx
Ver las actividades de una imagen.
# docker history ubuntu
Obtener el ID de un contenedor.
# docker run ubuntu echo hello world
# docker ps -l -q
Conectar un contenedor con otro.
# docker run -d -name mysql
# docker run -link mysql:db ubuntu env
Correr un comando en un contenedor.
# docker exec contenedor1 echo "Hola dockertips!"
Correr un bash en un contenedor
# docker run -it ubuntu /bin/bash
# docker commit -p contenedor copia
# docker save -o FICHEROCOPIA.tar nombrecopia
Arrancar un contenedor asociando una carpeta real a una carpeta interna del contenedor.
# docker run -it -v /micarpeta/:/contenedor -n nombre /bin/bash
Parar y arrancar un contenedor. Pausar y des-pausar. Restaurar y conectarse a un contenedor.
# docker stop contenedor
# docker start contenedor
# docker pause contenedor
# docker unpause contenedor
# docker restart contenedor
# docker attach contenedor
Correr un contenedor al 50% y 100% de una cpu.
# docker run -ti --c 512 nombre1
# docker run -ti --c 1024 nombre1
Copiar y recuperar backup de una imágen.
# docker save imagen | gzip > imagencopia.tar.gz
# cat imagencopia.tar.gz | docker load - imagen
Copiar un contenedor a disco y recuperarlo con otro nombre. Export genera ficheros un poco mas pequeños que el save.
# docker export contenedor1 -o fichero
# docker import fichero contenedor2:nuevo
Crear una nueva imágen en base a un contenedor corriendo con cambios.
# docker commit contenedor imagennueva
Correr un contenedor limitando la memoria a 300 megas.
# docker run -it -m 300M ubuntu:16.04 /bin/bash
Actividades con redes.
docker network create
docker network rm
docker network ls
docker network inspect
docker network connect
docker network disconnect
Ver procesos corriendo en un contenedor.
# docker top nombrecontenedor
Como correr Firefox en Docker con un “Dockerfile”
FROM ubuntu
# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'
EXPOSE 5900
CMD ["x11vnc", "-forever", "-usepw", "-create"]
Ver programas corriendo en contenedores.
# docker ps -l
Fichero de configuración de Docker.
cat /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
Recuperar copia de un contenedor-
# docker load -i <FICHEROCOPIA.tar
Limpiar todo el entorno Docker-
# docker system prune
# docker volume prune
# docker network prune
# docker container prune
# docker image prune
Un resúmen del espacio usado.
# docker system df
Para borrar una imágen y un contenedor, aunque tenga contenedores creados y corriendo.
# docker rmi imagen --force
# docker rm contenedor --force