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