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
```