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