Connectez vous sur la machine virtuelle installée en première partie de la journée.
1 - Installez docker using the convenient script ( https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#install-using-the-convenience-script ).
$ wget -q get.docker.com -O- | sh
2 - Assurez vous que docker est correctement installé. Si c'est le cas, vous devriez avoir une sortie similaire à celle-ci:
$docker info
Containers: 4
Running: 3
Paused: 0
Stopped: 1
Images: 1
Server Version: 17.09.0-ce
Storage Driver: devicemapper
Pool Name: docker-thinpool
Pool Blocksize: 524.3kB
Base Device Size: 10.74GB
Backing Filesystem: xfs
Data file:
Metadata file:
Data Space Used: 280MB
Data Space Total: 20.51GB
Data Space Available: 20.23GB
Metadata Space Used: 167.9kB
Metadata Space Total: 213.9MB
Metadata Space Available: 213.7MB
Thin Pool Minimum Free Space: 2.051GB
Udev Sync Supported: true
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.110 (2015-10-30)
Logging Driver: journald
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: 06b9cb35161009dcb7123345749fef02f7cea8e0
runc version: 3f2f8b84a77f73d38244dd690525642a72156c64
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 4.4.76-ovh-vps-grsec-zfs-classid
Operating System: Ubuntu 16.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 6.639GiB
Name: agent-client-tst1-b2-7-5
ID: ISGV:37UI:XOUS:BWOW:UPT5:O45M:72RR:JDUR:HISK:ZTZ6:2EHH:ZIQD
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
3 - Listez les commandes disponibles:
$ docker
4 - Listez les images disponibles localement
$ docker images
5 - Pullez l'image ubuntu
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
660c48dd555d: Pull complete
4c7380416e78: Pull complete
421e436b5f80: Pull complete
e4ce6c3651b3: Pull complete
be588e74bd34: Pull complete
Digest: sha256:7c67a2206d3c04703e5c23518707bdd4916c057562dd51c74b99b2ba26af0f79
Status: Downloaded newer image for ubuntu:latest
6 - Listez les images disponibles localement
$ docker images
7 - Lancez un echo "hello world!"
dans votre image ubuntu
$ docker run ubuntu echo "hello world"
8 - Listez tous les conteneurs. Pourquoi le conteneur est-il en status Exited
?
$ docker ps -a
9 - Pullez l'image brouberol/nginx
$ docker pull brouberol/nginx
10 - Lancez l'image brouberol/nginx
avec la commande suivante
$ docker run -it --rm --name=nginx-1 -p 80:80 brouberol/nginx
11 - Lancez un docker run --help
et tentez de comprendre les options passées dans la commande précédente
12 - Ouvrez un second terminal et ouvrez une seconde session ssh dans votre VM
13 - Inspectez les conteneurs:
$ docker ps
Vous devriez avoir une sortie telle que
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d4fcd21776e brouberol/nginx "./entrypoint.sh" 17 seconds ago Up 16 seconds 0.0.0.0:80->80/tcp, 443/tcp nginx-1
À quoi servait l'option -p 80:80
de la commande docker run
?
14 - Listez les ports hosts/conteneurs liés a votre conteneur via docker port <id>
(dans l'exemple précédent, <id>
vallait 1d4fcd21776e
).
15 - Interrogez votre conteneur nginx via curl localhost
16 - Recuperez l'IP publique de votre VM via curl ifconfig.ovh
17 - Ouvrez votre navigateur et visitez http://<public_ip>
18 - Inspectez votre conteneur via la commande docker inspect
.
19 - Lancez la commande docker history --no-trunc brouberol/nginx
et tentez de comprendre la différence entre l'image nginx de base et l'image brouberol/nginx
.
20 - Inspectez le Dockerfile et l'entrypoint utilisés via les commandes suivantes:
docker exec nginx-1 cat Dockerfile
docker exec nginx-1 cat entrypoint.sh
21 - À quoi sert docker exec
?
22 - Selon vous, pourquoi utilisons nous un exec
dans l'entrypoint? Indice: la commande docker stop
envoie un SIGTERM au process PID 1 du conteneur.
23 - Visitez https://hub.docker.com/explore/, et tentez de deployer une autre application officiellement supportée par Docker!