Exercices Supplémentaires

1. Création de Conteneurs

  • Créez un conteneur à partir de l'image nginx:latest.

  • Assurez-vous que le conteneur fonctionne sur le port 8080 de votre machine hôte.

docker image pull nginx:latest
docker container run -d -p 8080:80 nginx
Voir la réponse
docker run -d -p 8080:80 nginx:latest

2. Personnalisation d’Images

  • Créez un Dockerfile qui génère une image basée sur ubuntu:latest.

  • Ajoutez-y la commande pour installer curl.

  • Construisez l’image avec le tag mycustomubuntu:latest

Voir la réponse

Dockerfile

FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl

Commande de build :

docker build -t mycustomubuntu:latest .

3. Interaction avec Docker Hub

  • Poussez l'image mycustomubuntu:latest sur votre compte Docker Hub.

  • Retirez l'image locale et téléchargez-la à nouveau depuis Docker Hub.

docker tag mycustomubuntu:latest ruimmp/mycustomubuntu:latest
docker push ruimmp/mycustomubuntu:latest
docker image rm ruimmp/mycustomubuntu
docker image rm mycustomubuntu
docker pull ruimmp/mycustomubuntu
REPOSITORY              TAG       IMAGE ID       CREATED         SIZE
ruimmp/mycustomubuntu   latest    908215e6ebaa   6 minutes ago   204MB
node                    latest    840dad007721   2 weeks ago     1.61GB
nginx                   latest    28402db69fec   5 weeks ago     279MB
alpine                  latest    beefdbd8a1da   2 months ago    12.1MB
Voir la réponse

Pousser l'image :

docker login
docker tag mycustomubuntu:latest yourdockerhubusername/mycustomubuntu:latest
docker push yourdockerhubusername/mycustomubuntu:latest

Supprimer et télécharger à nouveau :

docker rmi mycustomubuntu:latest
docker pull yourdockerhubusername/mycustomubuntu:latest

4. Multi-Stage Build

  • Construisez une image multi-stage qui compile un projet Node.js.

  • Assurez-vous que l’image finale contient uniquement les fichiers nécessaires pour exécuter l’application.

Voir la réponse

Dockerfile

# Stage 1
FROM node:alpine as build
WORKDIR /app
COPY . .
RUN npm install && npm run build

# Stage 2
FROM node:alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY package.json .
RUN npm install --production
CMD ["node", "dist/index.js"]

Commande de build :

docker build -t my-node-app:latest .

5. Variables d’Environnement

  • Créez un conteneur à partir de l’image nginx en configurant une variable d’environnement personnalisée.

  • Vérifiez que la variable est accessible dans le conteneur.

Voir la réponse
docker run -d -e MY_ENV_VAR=HelloWorld nginx
docker exec <container_id> printenv MY_ENV_VAR

6. Volumes

  • Lancez un conteneur avec un volume monté depuis votre machine hôte.

  • Assurez-vous que les modifications effectuées dans le conteneur sont reflétées sur l’hôte.

Voir la réponse
docker run -d -v /path/on/host:/path/in/container nginx

Vérification : Modifiez un fichier dans /path/on/host et vérifiez sa présence dans le conteneur.


7. Réseaux Docker

  • Créez un réseau Docker personnalisé.

  • Lancez deux conteneurs sur ce réseau, un serveur web et un client qui interagit avec le serveur.

Voir la réponse
docker network create mynetwork
docker run -d --network=mynetwork --name web nginx
docker run -it --network=mynetwork --name client busybox
ping web

8. Docker Compose

  • Utilisez Docker Compose pour orchestrer une stack avec un service web et une base de données.

Voir la réponse

docker-compose.yml

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

Commande :

docker-compose up -d

9. Healthcheck

  • Ajoutez un healthcheck à un conteneur pour vérifier que le service est opérationnel.

Voir la réponse

Dockerfile

FROM nginx
HEALTHCHECK CMD curl --fail http://localhost:80 || exit 1

Commande de build :

docker build -t nginx-healthcheck .

10. Gestion des Logs

  • Lancez un conteneur et redirigez ses logs vers un fichier sur l’hôte.

Voir la réponse
docker run -d --name web nginx
docker logs web > /path/on/host/logs.txt

Last updated