= DOCKER
{{tag>devops info}}
== related
{{topic>docker&nodate&nouser&sort&tags}}
== +info
* [[tech:docker:dockerd:start]]
* [[tech:docker:dockerfile]]
* [[tech:docker:docker-compose:start]]
* [[tech:docker:volumes]]
* [[tech:docker:security]]
* [[tech:docker:TLS]]
* [[tech:docker:context]]
* [[tech:docker:scan]]
* Dev Containers: [[https://www.youtube.com/watch?v=DkKs29etRis]]
* Health Check: [[https://atareao.es/podcast/tu-contenedor-docker-podria-estar-muerto-y-tu-sin-enterarte/]]
* [[https://tech.paulcz.net/blog/secure-docker-with-tls/]]
* [[https://gist.github.com/kekru/974e40bb1cd4b947a53cca5ba4b0bbe5]]
* [[https://blog.elhacker.net/2024/11/comandos-de-docker-basicos-y-avanzados.html]]
=== take a look
* [[https://docs.docker.com/engine/reference/commandline/create/]]
* [[https://docs.docker.com/storage/bind-mounts/]]
* [[https://docs.docker.com/compose/compose-file/#volumes]]
=== casos de uso
* [[tech:docker:docker-compose:casosuso]]
* [[tech:docker:run]]
== herramientas
* Dockly:docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock lirantal/dockly
* Oxker:docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock:ro --pull=always mrjackwills/oxker
* LazyDocker:docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /yourpath:/.config/jesseduffield/lazydocker lazyteam/lazydocker
* Dry (docker & swarm):docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -e DOCKER_HOST=$DOCKER_HOST moncho/dry
/via: [[https://atareao.es/podcast/cinco-herramientas-para-gestionar-docker/]]
== documentación
* {{ :tech:docker:docker-cookbook.pdf |}}
== dockerhub ♥
* nextcloud : [[https://hub.docker.com/_/nextcloud/]]
* vsftpd : [[https://dockerfile.readthedocs.io/en/latest/content/DockerImages/dockerfiles/vsftp.html#environment-variables]]
* rtorrent + rutorrent : [[https://hub.docker.com/r/diameter/rtorrent-rutorrent/]]
* mariadb : [[https://hub.docker.com/_/mariadb/]]
* arm : [[https://hub.docker.com/u/arm32v7/]]
* [[https://medium.freecodecamp.org/the-easy-way-to-set-up-docker-on-a-raspberry-pi-7d24ced073ef]]
* autossh : [[https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/]]
* [[https://github.com/dreamhost/docker-autossh/blob/master/Dockerfile]]
* VPN
* [[https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/]]
* [[https://hub.docker.com/r/kylemanna/openvpn/]]
* [[https://www.digitalocean.com/community/tutorials/how-to-run-openvpn-in-a-docker-container-on-ubuntu-14-04]]
* [[https://www.reddit.com/r/docker/comments/7e0gid/docker_with_pia_vpn_for_transmission_and/]]
== resumen comandos
=== instalación
* añadir usuario actual al grupo de docker y poder usarlo al instante: ''sudo usermod -aG docker $(whoami) && newgrp docker''
=== informativos
* ''docker info''
* ''docker ps''
* ''-a'' : all
* ''-q'' : only ID
* ''-f '' : ''docker -ps -af "status=exited"''
* ''docker search''
* ''docker inspect '' : vuela JSON con información
* ''docker inspect | grep IPAddress''
=== contenedores
* estados de los contenedores
* **CREATED**
* -> start -> **RUNNING**
* -> pause -> **PAUSED** -> unpause **RUNNNIG**
* -> stop -> **STOPPED** -> restart -> **RUNNIG**
* -> kill -> **KILLED**
* ''docker ps''
* ''-a''
* ''-q''
* ''docker run []''
* ''-i'' : interactive
* ''-t'' : tty
* ''%%--rm%%'' : contenedor de un solo uso
* ''-d'': detach (el proceso no se queda "colgado" ejecutando el contenedor)... lanzar contenedor en background
* ''-p 80:80'': mapea el puerto host:contenedor, en todos los interfaces
* ''-p 127.0.0.1:80:80'': el contenedor solo será accesible desde 127.0.0.1
* ''-P'': mapea el puerto en el que está escuchando el contenedor a un puerto aleatorio del equipo
* ''%%--name %%''
* ''docker run -it '' : al salir del contenedor pasa a **STOPPED**
* ''docker start '' : arrancar contenedor parado
* ''docker pause ''
* ''docker unpause ''
* ''docker stop ''
* ''docker kill ''
* ''docker exec [-it] []''
* ''bash'' o ''sh'' serían comandos válidos si están instalados en el contenedor
* ''docker rm ''
* no se puede eliminar containers en ejecución
* ''docker rm $(docker ps -aq)'' : elimina todos los contenedores
* ''docker commit [REPOSITORY[:TAG]]'' : crea imagen de un contenedor
=== imágenes
* ''docker pull debian[:]''
* ''docker images''
* ''-f'' o ''--filter''
* "dangling=true": filtra lista imágenes no tageadas
* "label=": filtra por labels (a nivel de imagen, se ven siempre)
* "label==" : filtra por el contenido de las claves
* ''--format "%%{{.ID}}:{{.Repository}}%%"'': formato de salida (escrito en Go, plantilla)
* ''docker rmi '': borrar una imagen
* ''docker tag '' asignar un nombre a una imagem sin tagear, copiar si ya estaba tageada
* ''docker save -o :'' guarda en una copia "física" de la imagen
* NO recomendado!
* ''docker load -i '': importa la imagen
* ''docker history '': muestra las capas de una imagen y el tamaño de cada una
# mostrar (y eliminar) imágenes huérfanas : sin usar
docker image list -q --filter "dangling=true"
docker rmi $(docker image list -q --filter "dangling=true")
docker image rm docker image list -q --filter "dangling=true" ??
=== errores
* 12/2022 - **docker: Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown.**:sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
* /via: [[https://bigdata-etl.com/docker-cgroup-mountpoint-does-not-exist-unknown/]]