===== docker Linux ======
installation de docker desktop sur Linux
==== references ====
* techWorld with Nana : https://www.youtube.com/watch?v=pg19Z8LL06w
* https://docs.docker.com/engine/install/debian/
* https://belginux.com/installer-docker-sous-debian-12/
* https://cours.brosseau.ovh/cheatsheets/serveur/debian-docker.html
* https://earthly.dev/blog/docker-image-storage-on-host/
* https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-debian-10
* https://iximiuz.com/en/posts/oci-containers/
==== install packages ====
d'abord une mise a jour des repos
root@debL74:~# apt-get update
==== clean old docker ====
retrait d'eventuels anciennes installations docker deprecated
root@debL74:~# for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
# keys
root@debL74:~# apt-get install ca-certificates curl
root@debL74:~# curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
root@debL74:~# chmod a+r /etc/apt/keyrings/docker.asc
# apt repo
root@debL74:~# echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
root@debL74:~# cat /etc/apt/sources.list.d/docker.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable
root@debL74:~# apt-get update
==== install docker ====
root@debL74~# apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
root@debL74-14212:~# uname -a
Linux debL74-14212 6.1.0-28-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.119-1 (2024-11-22) x86_64 GNU/Linux
root@debL74-14212:~# apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
docker-ce-rootless-extras pigz slirp4netns
Paquets suggérés :
aufs-tools cgroupfs-mount | cgroup-lite
Les NOUVEAUX paquets suivants seront installés :
containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin pigz slirp4netns
0 mis à jour, 8 nouvellement installés, 0 à enlever et 3 non mis à jour.
Il est nécessaire de prendre 123 Mo dans les archives.
Après cette opération, 441 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n]
=== run docker helloworld ===
root@debL74# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
==== service ====
root@debL74# service docker status
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-12-07 23:03:23 CET; 3min 25s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 939669 (dockerd)
Tasks: 14
Memory: 31.2M
CPU: 598ms
CGroup: /system.slice/docker.service
└─939669 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root@debL74# systemctl status containerd.service
● containerd.service - containerd container runtime
Loaded: loaded (/lib/systemd/system/containerd.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-12-07 23:03:21 CET; 21min ago
Docs: https://containerd.io
Main PID: 939538 (containerd)
Tasks: 13
Memory: 62.1M
CPU: 1.955s
CGroup: /system.slice/containerd.service
└─939538 /usr/bin/containerd
root@debL74# docker compose version
Docker Compose version v2.29.7
==== user group docker ====
pour qu'une utilisateur non privilegier puisse lancer des CT docker il faut qu'il ai des privileges qu'il acquiere en appartenant au groupe docker, root le promote dans ce groupe
root@debL74# usermod -aG docker jehan
le user rafraichit son environement
jehan@debL74$ su - jehan
jehan@debL74$ id
uid=1005(jehan) gid=1005(jehan) groupes=1005(jehan),100(users),994(docker)
==== commande de base user ====
jehan@debL74$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
jehan@debL74$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 19 months ago 13.3kB
jehan@debL74$ docker run hello-world
Hello from Docker!
rechercher une distribution linux
jehan@debL74$ docker search almalinux
NAME DESCRIPTION STARS OFFICIAL
almalinux/almalinux DEPRECATION NOTICE: This image is deprecated… 9
almalinux The official build of AlmaLinux OS. 176 [OK]
almalinux/8-base AlmaLinux OS 8 official base image 1
almalinux/9-base AlmaLinux 9 Base container image 0
...
recuperation de la distribution Linux
jehan@debL74-14212:~$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
de44b265507a: Pull complete
Digest: sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
==== docker image store ====
jehan@debL74$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest b1d9df8ab815 2 weeks ago 78.1MB
hello-world latest d2c94e258dcb 19 months ago 13.3kB
jehan@debL74$ docker inspect --format='{{json .RootFS}}' b1d9df8ab815 | jq
{
"Type": "layers",
"Layers": [
"sha256:687d50f2f6a697da02e05f2b2b9cb05c1d551f37c404ebe55fdec44b0ae8aa5c"
]
}
=== image file location ===
jehan@debL74$ docker info | grep -i "Storage Driver"
Storage Driver: overlay2
jehan@debL74$ docker info | grep "Root Dir"
WARNING: bridge-nf-call-iptables is disabled
Docker Root Dir: /var/lib/docker
root@debL74-14212:~# du -sm /var/lib/docker/overlay2/df3026f153ed2fb49308f8124adf41b81dcc48384a1497a28ff445bffbd89782/*
84 /var/lib/docker/overlay2/df3026f153ed2fb49308f8124adf41b81dcc48384a1497a28ff445bffbd89782/diff
1 /var/lib/docker/overlay2/df3026f153ed2fb49308f8124adf41b81dcc48384a1497a28ff445bffbd89782/link
==== run interactive terminal (-it) ====
pour lancer notre image ubuntu et en instancier un container (CT) avec un shell interactif oouvert :
jehan@debL74$ docker run -it ubuntu
root@c3b25bd7fa19:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
==== docker compose ====
monter une image mysql + phpMyAdmin avec un compose file en yaml
jehan@debL74:~/Docker$ cat ./docker-compose-mysql1.yml
services:
db:
image: mysql:8
container_name: db
restart: always
environment:
- MYSQL_USER=user
- MYSQL_PASSWORD=user-secret
- MYSQL_ROOT_PASSWORD=root-secret
volumes:
- ~/mysql-data:/var/lib/mysql
ports:
- 3306:3306
phpmyadmin:
image: phpmyadmin
container_name: phpmyadmin
restart: always
environment:
- PMA_HOST=db
- PMA_PORT=3306
ports:
- 8081:80
depends_on:
- db
jehan@debL74-14212:~/Docker$ docker compose --file ./docker-compose-mysql1.yml up -d
[+] Running 31/2
✔ db Pulled 26.4s
✔ phpmyadmin Pulled 38.0s
[+] Running 3/3
✔ Network docker_default Created 0.2s
✔ Container db Started 0.6s
✔ Container phpmyadmin Started
jehan@debL74:~/Docker$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
355a0c9fc396 phpmyadmin "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:8081->80/tcp, [::]:8081->80/tcp phpmyadmin
0dc0c7d82738 mysql:8 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp db
service phpMyAdmin consultable sur http://localhost:8081/
==== build a dockerfile ====
jehan@debL74:~/Docker$ cat ./dockerfile-phpjp1.dck
FROM php:apache
RUN docker-php-ext-install pdo pdo_mysql mysqli
jehan@debL74:~/Docker$ docker build --file dockerfile-phpjp1.dck .
[+] Building 33.8s (6/6) FINISHED docker:default
=> [internal] load build definition from dockerfile-phpjp1.dck 0.1s
=> => transferring dockerfile: 112B 0.0s
=> [internal] load metadata for docker.io/library/php:apache 1.3s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/php:apache@sha256:204de2d31416e176774b98217beb8e078a9f3b55306b370d6a9f1f470af5f306 17.3s
=> => resolve docker.io/library/php:apache@sha256:204de2d31416e176774b98217beb8e078a9f3b55306b370d6a9f1f470af5f306 0.0s
=> => sha256:8a64a27210ceb93ea27ca865c5cf246274ba43f2d36bc96e7b2271b0e68cd3e3 104.15MB / 104.15MB
...
=> => extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 0.0s
=> [2/2] RUN docker-php-ext-install pdo pdo_mysql mysqli 14.9s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:3f716064cbf1786dc96ef9bc2ae7897e224ab1cb60cc7f812e9e7e58913b0368
resultat, une image pas nomée "none" apparait
jehan@debL74:~/Docker$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
3f716064cbf1 18 seconds ago 513MB
ubuntu latest b1d9df8ab815 2 weeks ago 78.1MB
mysql 8 3818a28b4a67 7 weeks ago 594MB
phpmyadmin latest a590866d53f0 17 months ago 558MB
hello-world latest d2c94e258dcb 19 months ago 13.3kB
jehan@debL74-14212:~/Docker$ docker tag 3f716064cbf1 php-apache/jp1
jehan@debL74-14212:~/Docker$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
php-apache/jp1 latest 3f716064cbf1 4 minutes ago 513MB
===== docker compose et dockerfile combiné www-site =====
==== site DocumentRoot et content ====
jehan@debL74-14212:~/Docker$ mkdir ~/Docker/dck-www-site
jehan@debL74:~/Docker$ echo "docker web site JP1
" | tee ./dck-www-site/index.html
docker web site JP1
==== DockerFile ====
jehan@debL74:~/Docker$ cat dockerfile-phpjp1.dck
FROM php:apache
RUN docker-php-ext-install pdo pdo_mysql mysqli
==== Docker compose projet www site ====
jehan@debL74:~/Docker$ cat docker-compose-phpsitejp1.yml
services:
php:
build:
dockerfile: ./dockerfile-phpjp1.dck
container_name: php
restart: always
volumes:
- ~/Docker/dck-www-site:/var/www/html
ports:
- 9090:80
==== Run docker compose & file www site ====
instance de CT resultat de la combinaison du docker compose incluant le dockerfile ci-dessus
jehan@debL74:~/Docker$ docker compose --file ./docker-compose-phpsitejp1.yml up -d
[+] Building 1.3s (7/7) FINISHED docker:default
=> [php internal] load build definition from dockerfile-phpjp1.dck 0.0s
=> => transferring dockerfile: 112B 0.0s
=> [php internal] load metadata for docker.io/library/php:apache 1.1s
=> [php internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [php 1/2] FROM docker.io/library/php:apache@sha256:204de2d31416e176774b98217beb8e078a9f3b55306b370d6a9f1f470af5f306 0.0s
=> CACHED [php 2/2] RUN docker-php-ext-install pdo pdo_mysql mysqli 0.0s
=> [php] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:5c7cbcf942fd91e116d24dad0d4291035bb7570ab4b4666b2110787554a24c20 0.0s
=> => naming to docker.io/library/docker-php 0.0s
=> [php] resolving provenance for metadata file 0.0s
WARN[0001] Found orphan containers ([phpmyadmin db]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
[+] Running 1/1
✔ Container php Started 0.5s
jehan@debL74:~/Docker$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b22bc9482808 docker-php "docker-php-entrypoi…" 24 seconds ago Up 23 seconds 0.0.0.0:9090->80/tcp, [::]:9090->80/tcp php
jehan@debL74:~/Docker$ docker exec -it b22bc9482808 bash
root@b22bc9482808:/var/www/html# ls
index.html
==== consultation cliente ====
http://localhost:9090/
docker web site JP1