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