Introduction à Docker Docker est un projet open source (Apache 2.0) écrit en GO

Introduction à Docker Docker est un projet open source (Apache 2.0) écrit en GO et hébergé sur GitHub: https://github.com/docker (https://github.com/docker). Initialement porté par la startup DotCloud (renommée depuis Docker) fondée par deux français anciens de l’Epitech. Docker est composé de trois éléments : le daemon Docker qui s’exécute en arrière-plan et qui s’occupe de gérer les conteneurs (Containerd avec runC) une API de type REST qui permet de communiquer avec le daemon Le client en CLI (command line interface) : commande docker Par défaut, le client communique avec le daemon Docker via un socket Unix (/var/run/docker.sock) mais il est possible d’utiliser un socket TCP. Docker c’est aussi un dépôt d’images (aussi appelé registry) : https://store.docker.com (https://store.docker.com) Il contient les images officielles maintenues par Docker mais aussi celles mises à disposition par d’autres contributeurs. Quelques concepts: une image est un ensemble de fichiers inertes en read-only. Un conteneur est une instance une active (started) ou inactive (stopped) d’une image. L’execution d’un conteneur n’altère jamais une image. Lexique Conteneur : Image exécutable d’un environnement complet incluant code, librairies, outils et configuration Image : template de conteneur en read-only contenant un systeme de base et une application. Docker HUB : Dépôt public d’images mises à disposition par Docker DockerHub (https://store.docker.com) Dockerfile : fichier texte de description d’une image 1 sur 27 Docker Compose : fichier texte (yaml) de description d’un ensemble de conteneurs Docker Machine : Outil de déploiement des hôtes Docker sur différentes plateformes (Mac, Windows) : https://docs.docker.com/machine/overview/ (https://docs.docker.com/machine/overview/) Orchestrateur : gère un pool de ressources serveurs ( Swarm, Kubernetes, Mesos, Rancher…) Registry : Dépôt privé d’images Docker Installation de Docker Méthode d’installation officielle (https://docs.docker.com/install/linux/docker-ce/centos/) Installer les prérequis (Centos 7.x amd64) $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 Configurer le dépôt officiel et installer Docker en version CE (Community Edition) sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docke sudo yum install docker-ce Activer et démarrer le service $ sudo systemctl enable docker $ sudo systemctl start docker Vérifier l’installation 2 sur 27 $ sudo docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ Details des opérations réalisées par cette commande: 1: le client docker se connecte au daemon docker via le socket Unix 2: l’image “hello-world” n’etant pas présente localement, le daemon Docker la télécharge depuis la registery Docker Hub 3: le daemon Docker crée un nouveau conteneur depuis cette image dont la finalité est de produire le message ci-dessus. 4: le daemon Docker renvoi le message au client Docker pour afficher le résultat dans le terminal Vérifier la version 3 sur 27 $ sudo docker version Client: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:23:03 2018 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.06.1-ce API version: 1.38 (minimum version 1.12) Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:25:29 2018 OS/Arch: linux/amd64 Experimental: false Obtenir des infos sur la configuration Docker 4 sur 27 $ sudo docker info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 18.06.1-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: false Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e runc version: 69663f0bd4b60df09991c08812a60108003fa340 init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 3.10.0-514.2.2.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 1.781GiB Name: tp-docker.univ-rouen.fr ID: GUWR:VBEF:77JQ:LZDZ:X2JG:E74O:3WJC:CRJN:VZOQ:XA5V:VNYF:UN5S Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false 5 sur 27 Cette commande retourne plusieurs informations intéressantes: 1: le driver de stockage est overlayFS: Storage Driver: overlay2 2: le dossier dans le quel Docker va stocker les images et les volumes: Docker Root Dir: /var/lib/docker 3: l’adresse du registre pour télécharger les images: Registry: https://index.docker.io/v1/ Utiliser Docker sans les droits “root” Pour utiliser Docker sans les droits root , l’utilisateur doit appartenir appartenir au groupe docker $ sudo groupadd docker $ sudo usermod -aG docker $USER Il faut se déconnecter / reconnecter pour appliquer les modifications. Tester sans sudo: $ docker run hello-world Les Images Docker Faire une recherche sur le Docker Hub (commande : docker search ) $ docker search debian NAME DESCRIPTION STARS OFFI ubuntu Ubuntu is a Debian-based Linux operating s... 6898 [OK] debian Debian is a Linux distribution that's comp... 2356 [OK] google/debian 52 armhf/debian Debian is a Linux distribution that's comp... 29 Ici “ubuntu” et “debian” sont des images officielles (les autres sont de la forme user/nom_image). Elles sont maintenues par l’équipe docker et considérées comme plus “fiables”. 6 sur 27 La colonne STARS donne une indication sur la popularité de l’image (mise en favoris). Télécharger une image (commande : docker pull ) $ docker pull debian Using default tag: latest latest: Pulling from library/debian 3e17c6eae66c: Pull complete Digest: sha256:26b2647845d66e20eeadf73d1c302a4ffd2cc9a74c39a52f2aced4f823484328 Status: Downloaded newer image for debian:latest Lancer un conteneur (commande : docker run ) La commande docker run qui permet de lancer un conteneur peut également télécharger l’image si elle n’est pas disponible localement $ docker run debian:stretch docker run debian:stretch Unable to find image 'debian:stretch' locally stretch: Pulling from library/debian Digest: sha256:26b2647845d66e20eeadf73d1c302a4ffd2cc9a74c39a52f2aced4f823484328 Status: Downloaded newer image for debian:stretch Connaitre l’historique de création de l’image (commande : docker history ) $ docker history debian IMAGE CREATED CREATED BY 6d83de432e98 4 weeks ago /bin/sh -c #(nop) CMD ["bash"] <missing> 4 weeks ago /bin/sh -c #(nop) ADD file:a71e077a42995a Les TAGS Lister les images présentent localement (commande : docker images ou docker image ls ) 7 sur 27 docker images REPOSITORY TAG IMAGE ID CREATED S hello-world latest f2a91732366c 2 weeks ago 1 debian latest 6d83de432e98 4 weeks ago 1 debian stretch 6d83de432e98 4 weeks ago 1 Ici les images debian ont le même ID (6d83de432e98) : c’est la même image mais avec un TAG différent Exemple d’images et de TAGS proposés sur le dépôt officiel Debian : https://hub.docker.com/r/library/debian/tags/ (https://hub.docker.com/r/library/debian/tags/) Ajouter un tag à une image (commande : docker image tag ) $ docker image tag debian:stretch debian:levasbr1 $ docker images REPOSITORY TAG IMAGE ID CREATED S debian levasbr1 6d83de432e98 4 weeks ago 1 debian stretch 6d83de432e98 4 weeks ago 1 Supprimer une image (commande : docker rmi) Cette commande permet de supprimer une image à condition de ne pas avoir de conteneur lié. $ docker rmi debian:latest Untagged: debian:latest Untagged: debian@sha256:26b2647845d66e20eeadf73d1c302a4ffd2cc9a74c39a52f2aced4f82 Deleted: sha256:6d83de432e98210aa25bcc5556a641d60ec621b67786a2862cfeec5d7258a4d0 Deleted: sha256:a75caa09eb1f7d732568c5d54de42819973958589702d415202469a550ffd0ea $ docker rmi f2a Untagged: hello-world:latest Untagged: hello-world@sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec Deleted: sha256:f2a91732366c0332ccd7afd2a5c4ff2b9af81f549370f7a19acd460f87686bc7 Deleted: sha256:f999ae22f308fea973e5a25b57699b5daf6b0f1150ac2a5c2ea9d7fecee50fdf On peut aussi utiliser l’ID abrégé (ex: f2A) pour désigner une image (en l’absence d’ambiguité) 8 sur 27 Les conteneurs Docker Lancer un conteneur à partir d’une image (commande : docker run ) $ docker run debian:latest cat /etc/issue Debian GNU/Linux 9 \n \l L’état d’un conteneur dépend de la commande qui est lancée. Ici, le conteneur execute la commande cat et s’arrête dès quelle est terminée. Lister les conteneurs en cours d’exécution (commande : docker ps ) La commande docker ps qui permet de lister les conteneurs en cours d’executions ne retourne effectivement rien : $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES Pour obtenir la liste complete des conteneurs, il faut utiliser l’option docker ps -a : $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PO 396767b854a9 debian:latest "cat /etc/issue" 44 minutes Exited (0) Le conteneur possède un identifiant unique (96767b854a9) et un nom généré aléatoirement (quizzical_easley). Nommer un conteneur (option : --name ou -n ) On peut utiliser l’option --name pour nommer un conteneur de manière plus explicite : $ docker run --name cmd_cat debian:latest cat /etc/issue Debian GNU/Linux 9 \n \ Cette commande a créé un nouveau conteneur : 9 sur 27 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS 2770f96e4a3d debian:latest "cat /etc/issue" About a minute ago Exited 1 ef6b6f1c64a1 debian:latest "cat /etc/issue" 4 minutes ago Exited 4 Obtenir une session intéractive (option : -it ) On peut obtenir une session intéractive (option -i ) en se branchant sur l’entrée standard du conteneur et en connectant un pseudo terminal TTY (option -t ) : $ docker run -it debian:latest /bin/bash root@eae2cce2669d:/# Le prompt reprend le CID du conteneur ( utiliser la commande exit pour quitter le conteneur). Lancer un conteneur en mode daemon (option : -d ) uploads/Litterature/ introduction-a-docker.pdf

  • 14
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager