====== Docker ======
===== Commandes principales =====
==== Conteneur ====
=== Création depuis une image ===
docker run --name cont_name image command
-i | --interactive : Keep STDIN open even if not attached\\
-t | --tty : Allocate a pseudo tty\\
--rm : Automatically remove the container when it exits
== Attachement d'un volume ==
docker run --name cont_name --mount source=volume_name,target=/container/path node:8.10.0-stretch
==== Volume ====
=== Création depuis un répertoire de l'hôte ===
docker volume create --name vol_name -o type=none -o device=/path/to/host/file_or_dir -o o=bind
-o: driver specific options\\
o: options (comma-separated)
=== Extraire le contenu d'un volume ===
docker volume ls
DRIVER VOLUME NAME
local osx-big-sur_data
mkdir data
docker run --rm -v osx-big-sur_data:/volume -v `pwd`/data:/target busybox sh -c 'cp -a /volume/* /target/'
===== Commandes secondaires =====
==== Divers ====
=== Afficher la date et l'heure de création d'une image ou d'un conteneur ===
docker inspect -f '{{ .Created }}' IMAGE_OR_CONTAINER
===== Gestion du réseau =====
==== Utilisation du driver macvlan ====
Cas d'utilisation :
Exposition d'un serveur DNS conténeurisé avec une @IP spécifique et communication possible entre l'hôte et le conteneur.
docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.254 --ip-range 192.168.0.1/27 --aux-address "host=192.168.0.1" -o parent=enp0s3 befe.lan
docker-compose.yml
version: "3.7"
networks:
befe.lan:
external: true
services:
adguard:
image: adguard/adguardhome:v0.107.26
networks:
befe.lan:
ipv4_address: 192.168.0.2
ports:
- 192.168.0.2:53:53/tcp # DNS
- 192.168.0.2:53:53/udp # DNS
ip link add befe.lan-shim link enp0s3 type macvlan mode bridge
ip addr add 192.168.0.253/32 dev befe.lan-shim
ip link set befe.lan-shim up
ip route add 192.168.0.2/32 dev befe.lan-shim
Pour une configuration persistante :
/etc/network/interfaces.d/befe.lan-shim
auto befe.lan-shim
iface befe.lan-shim inet manual
pre-up /bin/ip link add befe.lan-shim link enp0s3 type macvlan mode bridge
up /bin/ip addr add 192.168.0.253/32 dev befe.lan-shim
post-up /bin/ip route add 192.168.0.2/32 dev befe.lan-shim
post-down /bin/ip route del befe.lan-shim
===== Gestion du mode graphique =====
==== Lancer un conteneur en mode graphique ====
docker run --rm -it \
--net=host \
-e DISPLAY \
-v /home/me/.Xauthority:/root/.Xauthority \
gns3/xeyes
===== Exemples =====
==== DockerFile ====
FROM webdevops/php-apache-dev:debian-8
ENV WEB_PHP_SOCKET 127.0.0.1:9002
ENV fpm.pool.listen 127.0.0.1:9002
EXPOSE 11080
RUN apt-get update
RUN apt-get install -y mysql-client
=== Construction de l'image ===
cd path/to/Dockerfile/parent/directory
docker build -t dev_node .
==== Script de création de container ====
#!/bin/bash
docker run -it --name app_demo \
--mount source=workspace,target=/data/workspace \
--mount source=vue_templates,target=/root/.vue-templates \
dev_node \
bash -c " \
cd /data/workspace/app-demo && \
ls -l \
"
==== Lancement du container ====
docker start -i app_demo
==== Dockfile - divers ====
Création d'un utilisateur/group avec ids spécifiques :
RUN addgroup docker-test --gid 1000 && \
adduser docker-test --debug --no-create-home --disabled-password --gecos "" --uid 1000 --gid 1000
===== Healthcheck =====
==== httpd ====
healthcheck:
test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1
interval: 60s
timeout: 30s
retries: 3
===== Registry =====
==== Lister les tags d'un dépôt ====
docker run -t --rm benjaminferon/docker-tags
===== Commandes améliorées =====
==== ps ====
docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}\t{{.Ports}}" | awk 'NR<2{print $0;next}{print $0 | "sort --key=2"}'
===== Astuces pour la construction d'images =====
==== Prendre en charge Ctrl+C dans un script bash ====
# Add support for CTRL+C
exit_func() {
exit 1
}
trap exit_func SIGTERM SIGINT
===== Divers =====
==== Maintenir un container en vie ====
docker-compose.yml
entrypoint: 'tail -f /dev/null'
==== Lister les PID des conteneurs ====
for i in $(docker container ls --format "{{.ID}}"); do docker inspect -f '{{.State.Pid}} {{.Name}}' $i; done
==== Voir les adresses IP des conteneurs ====
docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
==== Commandes diverses ====
=== PHP Composer et limitation de la mémoire ===
docker run -it --rm -v $(pwd):/app -w /app -e COMPOSER_MEMORY_LIMIT=-1 composer:latest bash -c "php -r \"ini_set('memory_limit', '8G');\" && composer update"
===== Problèmes connus =====
==== MySQL/MariaDB : ====
Error: io_setup() failed with EAGAIN after 5 attempts
$ sysctl fs.aio-max-nr
fs.aio-max-nr = 65536
sudo sysctl -w fs.aio-max-nr=2097152