Commit eb432c
2025-12-23 15:17:20 Cédric: Initialisation| /dev/null .. astuces docker.md | |
| @@ 0,0 1,212 @@ | |
| + | # Astuces Docker |
| + | |
| + | #### Extraire l'ip locale d'un conteneur en fonctionnement : |
| + | ```bash |
| + | docker inspect --format '{{ .NetworkSettings.IPAddress }}' nom-de-conteneur |
| + | ``` |
| + | |
| + | #### Astuce, changer les DNS de votre instance, éditez /etc/docker/daemon.json : |
| + | ```bash |
| + | { |
| + | "dns": [ "1.1.1.1", "8.8.8.8" ] |
| + | } |
| + | ``` |
| + | |
| + | #### Install docker sur Debian : |
| + | ```bash |
| + | # install de sudo le cas échéant |
| + | apt install sudo |
| + | |
| + | # Add Docker's official GPG key: |
| + | sudo apt-get update |
| + | sudo apt-get install ca-certificates curl gnupg |
| + | sudo install -m 0755 -d /etc/apt/keyrings |
| + | curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg |
| + | sudo chmod a+r /etc/apt/keyrings/docker.gpg |
| + | |
| + | # Add the repository to Apt sources: |
| + | echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ |
| + | "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ |
| + | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
| + | sudo apt-get update |
| + | sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| + | ``` |
| + | |
| + | #### Commandes basiques |
| + | ```bash |
| + | docker ps -a |
| + | docker ps -aq (juste l id de chaque conteneur) |
| + | docker images list |
| + | |
| + | docker exec -it container-id command (-tty -interactive) |
| + | docker run -d -p 80:80 --name apache-php -v /docker:/var/www/html php:7.4-apache |
| + | docker kill apache-php |
| + | docker rm apache-php |
| + | docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mariad -> recup ip. |
| + | docker run --name myadmin -d --link mariadb:db -p 9080:80 phpmyadmin |
| + | docker exec -it mariadb bash |
| + | |
| + | docker commit -p db012f940cd7 container1 |
| + | docker save -o ~/container1.tar container1 |
| + | docker load -i /root/container1.tar |
| + | docker run --name webserver -d -p 80:80 -p 443:443 -it debian:latest /bin/bash -l |
| + | docker exec -it /bin/bash |
| + | ``` |
| + | |
| + | #### Sauvegarde d'un container en run : |
| + | |
| + | ```bash |
| + | docker commit container image-custom:version |
| + | docker save -o archive.tar |
| + | ``` |
| + | |
| + | #### Install php à jour dans le conteneur : |
| + | ```bash |
| + | apt install wget lsb-release apt-transport-https ca-certificates |
| + | wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg |
| + | echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list |
| + | apt update |
| + | ``` |
| + | |
| + | #### Lancer un container avec une image donnée : (detach / interactive), nom : toto, alpine linux |
| + | ```bash |
| + | docker run -di --name toto alpine:latest |
| + | docker exec -ti toto sh |
| + | docker run -tid -p 8080:80 --name web nginx:latest |
| + | docker inspect toto |
| + | docker start toto |
| + | docker stop toto |
| + | docker run -tid -p 8080:80 -v /srv/data/toto:/usr/share/nginx/html --name web nginx:latest |
| + | docker volume create totovol |
| + | docker volume ls |
| + | docker volume inspect totovol |
| + | docker run -tid -p 8080:80 --mount source=totovol,target=/usr/share/nginx/html --name web nginx:latest |
| + | docker run -tid --name toto --env MYVAR="toto" ubuntu:latest |
| + | docker run -tid --name toto --env-file vars.txt ubuntu:latest |
| + | docker run -tid --name toto --hostname toto.io ubuntu:latest |
| + | ``` |
| + | |
| + | #### Creer une nouvelle image customisée à partir d'une image standard : |
| + | ```bash |
| + | docker commit -m "nouvelle image custom" <id_image_source> toto:custom-1.0 |
| + | docker image ls |
| + | docker run -tid --name imagecustom toto-custom-1.0 |
| + | docker history <id_image_source> |
| + | ``` |
| + | |
| + | #### Utilisation dockerfile : |
| + | Dockerfile c'est quoi : fichier text avec séquence de tâches -> RUN / ENV (variables d'env) / EXPOSE (port mapping) / VOLUME / COPY (entre host et conteneur) / ENTRYPOINT (processus maitre du conteneur) exemple de dockerfile : |
| + | |
| + | ```text |
| + | FROM ubuntu:latest |
| + | MAINTAINER hello c'est moi |
| + | ENV mavariable valeur |
| + | RUN apt-get update |
| + | RUN apt-get install vim |
| + | RUN apt-get install nmap \ |
| + | && apt-get clean \ |
| + | && rm -rf /tmp/* |
| + | (...) |
| + | VOLUME /var/www/html |
| + | COPY source /toto/destination |
| + | ``` |
| + | |
| + | #### Network : |
| + | |
| + | ```bash |
| + | docker network create -d macvlan \ |
| + | --subnet=192.168.2.0/24 \ |
| + | --ip-range=192.168.2.128/25 \ |
| + | --gateway=192.168.2.254 \ |
| + | --aux-address="my-router=192.168.2.129" \ |
| + | -o parent=eth0 wireguard_interne ? |
| + | |
| + | docker built -t monimage:version . <point=dockerfile (Dockerfile en maj dans le rep courant, quoi) |
| + | docker image ls |
| + | docker history monimage:version |
| + | docker rmi monimage:version < suppression de l image custom |
| + | option "--volumes-from", pour importer les volumes d un autre conteneur |
| + | ``` |
| + | |
| + | #### Securisation docker : |
| + | |
| + | ```bash |
| + | docker run -it --net host --pid host --userns host --cap-add audit_control \ |
| + | -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ |
| + | -v /var/lib:/var/lib \ |
| + | -v /var/run/docker.sock:/var/run/docker.sock \ |
| + | -v /usr/lib/systemd:/usr/lib/systemd \ |
| + | -v /etc:/etc --label docker_bench_security \ |
| + | docker/docker-bench-security |
| + | ``` |
| + | |
| + | #### Versioning et push/pull : |
| + | |
| + | ```bash |
| + | docker tag image_source:version image_dest:version |
| + | ``` |
| + | |
| + | ... Rajouter un "tag image\_dest:version" à l'image source d'un conteneur idem pour la registry , il faut tagger l'image à push par son nomd'image complet (voir la doc gitlab par ex) |
| + | |
| + | #### Sauvegarder un conteneur : |
| + | |
| + | ```bash |
| + | docker save -o dir/fichier conteneur:version |
| + | docker load -i dir/fichier |
| + | ``` |
| + | |
| + | #### Réseaux : |
| + | |
| + | Le Bridge docker0 (en général 172.17.0.0/16) creer un autre réseau "bridge" |
| + | |
| + | ```bash |
| + | docker network create -d bridge --subnet 172.30.0.0/16 mynetwork |
| + | ``` |
| + | |
| + | ... et l'utiliser |
| + | |
| + | ```bash |
| + | docker run -tid --name conteneur1 --network mynetwork alpine |
| + | ``` |
| + | |
| + | ... Options de lancement réseau sur les conteneurs : --net : none --net : host --net container:nom-du-conteneur --link nom-du-conteneur > comme --net container mais ajout dans etc/host du conteneur lui-même options --dns dans le resolv.conf ou --add-host toto:ip pour rajouter dans le etc/hosts directement |
| + | |
| + | #### Docker-compose : |
| + | ...à partir d'un rep contenant le docker-compose.yml |
| + | |
| + | ```bash |
| + | docker-compose build |
| + | docker-compose up |
| + | docker-compose up -d |
| + | docker-compose ps |
| + | docker-compose start |
| + | docker-compose stop |
| + | docker-compose rm |
| + | docker-compose down (stop + rm en même temps) |
| + | docker-compose scale SERVICE=3 |
| + | docker-compose pull (maj des images) |
| + | ``` |
| + | |
| + | ### Mise en place d'une version spécifique |
| + | |
| + | ```bash |
| + | # Obtenir une version spécifique |
| + | apt-cache madison docker-ce | awk '{ print $3 }' |
| + | |
| + | # L'installer |
| + | apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin |
| + | ``` |
| + | |
| + | ### Supprimer entièrement docker : |
| + | |
| + | ```bash |
| + | sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli docker-compose-plugin |
| + | sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce docker-compose-plugin |
| + | |
| + | sudo rm -rf /var/lib/docker /etc/docker |
| + | sudo rm /etc/apparmor.d/docker |
| + | sudo groupdel docker |
| + | sudo rm -rf /var/run/docker.sock |
| + | sudo rm -rf /var/lib/containerd |
| + | sudo rm -r ~/.docker |
| + | ``` |
