Blame
| eb432c | Cédric | 2025-12-23 15:17:20 | 1 | # Astuces Docker |
| 2 | ||||
| 3 | #### Extraire l'ip locale d'un conteneur en fonctionnement : |
|||
| 4 | ```bash |
|||
| 5 | docker inspect --format '{{ .NetworkSettings.IPAddress }}' nom-de-conteneur |
|||
| 6 | ``` |
|||
| 7 | ||||
| 6babf4 | Cédric | 2025-12-23 15:34:28 | 8 | #### Changer les DNS de votre instance, éditez /etc/docker/daemon.json : |
| eb432c | Cédric | 2025-12-23 15:17:20 | 9 | ```bash |
| 10 | { |
|||
| 11 | "dns": [ "1.1.1.1", "8.8.8.8" ] |
|||
| 12 | } |
|||
| 13 | ``` |
|||
| 14 | ||||
| 15 | #### Install docker sur Debian : |
|||
| 16 | ```bash |
|||
| 17 | # install de sudo le cas échéant |
|||
| 18 | apt install sudo |
|||
| 19 | ||||
| 20 | # Add Docker's official GPG key: |
|||
| 21 | sudo apt-get update |
|||
| 22 | sudo apt-get install ca-certificates curl gnupg |
|||
| 23 | sudo install -m 0755 -d /etc/apt/keyrings |
|||
| 24 | curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg |
|||
| 25 | sudo chmod a+r /etc/apt/keyrings/docker.gpg |
|||
| 26 | ||||
| 27 | # Add the repository to Apt sources: |
|||
| 28 | echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ |
|||
| 29 | "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ |
|||
| 30 | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
|||
| 31 | sudo apt-get update |
|||
| 32 | sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
|||
| 33 | ``` |
|||
| 34 | ||||
| 35 | #### Commandes basiques |
|||
| 36 | ```bash |
|||
| 37 | docker ps -a |
|||
| 38 | docker ps -aq (juste l id de chaque conteneur) |
|||
| 39 | docker images list |
|||
| 40 | ||||
| 41 | docker exec -it container-id command (-tty -interactive) |
|||
| 42 | docker run -d -p 80:80 --name apache-php -v /docker:/var/www/html php:7.4-apache |
|||
| 43 | docker kill apache-php |
|||
| 44 | docker rm apache-php |
|||
| 45 | docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mariad -> recup ip. |
|||
| 46 | docker run --name myadmin -d --link mariadb:db -p 9080:80 phpmyadmin |
|||
| 47 | docker exec -it mariadb bash |
|||
| 48 | ||||
| 49 | docker commit -p db012f940cd7 container1 |
|||
| 50 | docker save -o ~/container1.tar container1 |
|||
| 51 | docker load -i /root/container1.tar |
|||
| 52 | docker run --name webserver -d -p 80:80 -p 443:443 -it debian:latest /bin/bash -l |
|||
| 53 | docker exec -it /bin/bash |
|||
| 54 | ``` |
|||
| 55 | ||||
| 56 | #### Sauvegarde d'un container en run : |
|||
| 57 | ||||
| 58 | ```bash |
|||
| 59 | docker commit container image-custom:version |
|||
| 60 | docker save -o archive.tar |
|||
| 61 | ``` |
|||
| 62 | ||||
| 63 | #### Install php à jour dans le conteneur : |
|||
| 64 | ```bash |
|||
| 65 | apt install wget lsb-release apt-transport-https ca-certificates |
|||
| 66 | wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg |
|||
| 67 | echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list |
|||
| 68 | apt update |
|||
| 69 | ``` |
|||
| 70 | ||||
| 71 | #### Lancer un container avec une image donnée : (detach / interactive), nom : toto, alpine linux |
|||
| 72 | ```bash |
|||
| 73 | docker run -di --name toto alpine:latest |
|||
| 74 | docker exec -ti toto sh |
|||
| 75 | docker run -tid -p 8080:80 --name web nginx:latest |
|||
| 76 | docker inspect toto |
|||
| 77 | docker start toto |
|||
| 78 | docker stop toto |
|||
| 79 | docker run -tid -p 8080:80 -v /srv/data/toto:/usr/share/nginx/html --name web nginx:latest |
|||
| 80 | docker volume create totovol |
|||
| 81 | docker volume ls |
|||
| 82 | docker volume inspect totovol |
|||
| 83 | docker run -tid -p 8080:80 --mount source=totovol,target=/usr/share/nginx/html --name web nginx:latest |
|||
| 84 | docker run -tid --name toto --env MYVAR="toto" ubuntu:latest |
|||
| 85 | docker run -tid --name toto --env-file vars.txt ubuntu:latest |
|||
| 86 | docker run -tid --name toto --hostname toto.io ubuntu:latest |
|||
| 87 | ``` |
|||
| 88 | ||||
| 89 | #### Creer une nouvelle image customisée à partir d'une image standard : |
|||
| 90 | ```bash |
|||
| 91 | docker commit -m "nouvelle image custom" <id_image_source> toto:custom-1.0 |
|||
| 92 | docker image ls |
|||
| 93 | docker run -tid --name imagecustom toto-custom-1.0 |
|||
| 94 | docker history <id_image_source> |
|||
| 95 | ``` |
|||
| 96 | ||||
| 97 | #### Utilisation dockerfile : |
|||
| 98 | 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 : |
|||
| 99 | ||||
| 100 | ```text |
|||
| 101 | FROM ubuntu:latest |
|||
| 102 | MAINTAINER hello c'est moi |
|||
| 103 | ENV mavariable valeur |
|||
| 104 | RUN apt-get update |
|||
| 105 | RUN apt-get install vim |
|||
| 106 | RUN apt-get install nmap \ |
|||
| 107 | && apt-get clean \ |
|||
| 108 | && rm -rf /tmp/* |
|||
| 109 | (...) |
|||
| 110 | VOLUME /var/www/html |
|||
| 111 | COPY source /toto/destination |
|||
| 112 | ``` |
|||
| 113 | ||||
| 114 | #### Network : |
|||
| 115 | ||||
| 116 | ```bash |
|||
| 117 | docker network create -d macvlan \ |
|||
| 118 | --subnet=192.168.2.0/24 \ |
|||
| 119 | --ip-range=192.168.2.128/25 \ |
|||
| 120 | --gateway=192.168.2.254 \ |
|||
| 121 | --aux-address="my-router=192.168.2.129" \ |
|||
| 122 | -o parent=eth0 wireguard_interne ? |
|||
| 123 | ||||
| 124 | docker built -t monimage:version . <point=dockerfile (Dockerfile en maj dans le rep courant, quoi) |
|||
| 125 | docker image ls |
|||
| 126 | docker history monimage:version |
|||
| 127 | docker rmi monimage:version < suppression de l image custom |
|||
| 128 | option "--volumes-from", pour importer les volumes d un autre conteneur |
|||
| 129 | ``` |
|||
| 130 | ||||
| 131 | #### Securisation docker : |
|||
| 132 | ||||
| 133 | ```bash |
|||
| 134 | docker run -it --net host --pid host --userns host --cap-add audit_control \ |
|||
| 135 | -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ |
|||
| 136 | -v /var/lib:/var/lib \ |
|||
| 137 | -v /var/run/docker.sock:/var/run/docker.sock \ |
|||
| 138 | -v /usr/lib/systemd:/usr/lib/systemd \ |
|||
| 139 | -v /etc:/etc --label docker_bench_security \ |
|||
| 140 | docker/docker-bench-security |
|||
| 141 | ``` |
|||
| 142 | ||||
| 143 | #### Versioning et push/pull : |
|||
| 144 | ||||
| 145 | ```bash |
|||
| 146 | docker tag image_source:version image_dest:version |
|||
| 147 | ``` |
|||
| 148 | ||||
| 149 | ... 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) |
|||
| 150 | ||||
| 151 | #### Sauvegarder un conteneur : |
|||
| 152 | ||||
| 153 | ```bash |
|||
| 154 | docker save -o dir/fichier conteneur:version |
|||
| 155 | docker load -i dir/fichier |
|||
| 156 | ``` |
|||
| 157 | ||||
| 158 | #### Réseaux : |
|||
| 159 | ||||
| 160 | Le Bridge docker0 (en général 172.17.0.0/16) creer un autre réseau "bridge" |
|||
| 161 | ||||
| 162 | ```bash |
|||
| 163 | docker network create -d bridge --subnet 172.30.0.0/16 mynetwork |
|||
| 164 | ``` |
|||
| 165 | ||||
| 166 | ... et l'utiliser |
|||
| 167 | ||||
| 168 | ```bash |
|||
| 169 | docker run -tid --name conteneur1 --network mynetwork alpine |
|||
| 170 | ``` |
|||
| 171 | ||||
| 172 | ... 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 |
|||
| 173 | ||||
| 174 | #### Docker-compose : |
|||
| 175 | ...à partir d'un rep contenant le docker-compose.yml |
|||
| 176 | ||||
| 177 | ```bash |
|||
| 178 | docker-compose build |
|||
| 179 | docker-compose up |
|||
| 180 | docker-compose up -d |
|||
| 181 | docker-compose ps |
|||
| 182 | docker-compose start |
|||
| 183 | docker-compose stop |
|||
| 184 | docker-compose rm |
|||
| 185 | docker-compose down (stop + rm en même temps) |
|||
| 186 | docker-compose scale SERVICE=3 |
|||
| 187 | docker-compose pull (maj des images) |
|||
| 188 | ``` |
|||
| 189 | ||||
| 190 | ### Mise en place d'une version spécifique |
|||
| 191 | ||||
| 192 | ```bash |
|||
| 193 | # Obtenir une version spécifique |
|||
| 194 | apt-cache madison docker-ce | awk '{ print $3 }' |
|||
| 195 | ||||
| 196 | # L'installer |
|||
| 197 | apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin |
|||
| 198 | ``` |
|||
| 199 | ||||
| 200 | ### Supprimer entièrement docker : |
|||
| 201 | ||||
| 202 | ```bash |
|||
| 203 | sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli docker-compose-plugin |
|||
| 204 | sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce docker-compose-plugin |
|||
| 205 | ||||
| 206 | sudo rm -rf /var/lib/docker /etc/docker |
|||
| 207 | sudo rm /etc/apparmor.d/docker |
|||
| 208 | sudo groupdel docker |
|||
| 209 | sudo rm -rf /var/run/docker.sock |
|||
| 210 | sudo rm -rf /var/lib/containerd |
|||
| 211 | sudo rm -r ~/.docker |
|||
| 212 | ``` |
