docker Linux

installation de docker desktop sur Linux

references

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         
...
<code>


recuperation de la distribution Linux 

<code>
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
<none>        <none>    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 "<html><h3>docker web site JP1</h3></html>" | tee ./dck-www-site/index.html 
<html><h3>docker web site JP1</h3></html>

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