Blame

eb432c Cédric 2025-12-23 15:17:20
Initialisation
1
#### Extraire l'ip locale d'un conteneur en fonctionnement :
2
```bash
3
docker inspect --format '{{ .NetworkSettings.IPAddress }}' nom-de-conteneur
4
```
5
6babf4 Cédric 2025-12-23 15:34:28
6
#### Changer les DNS de votre instance, éditez /etc/docker/daemon.json :
eb432c Cédric 2025-12-23 15:17:20
Initialisation
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
```