Skip to main content

Docker

Commandes utiles : 

Afficher les conteneurs actifs : 

docker ps 

Killer un conteneur : 

docker stop <ID>

Ex :
docker stop d61d169912c8

Faire de la place sur le system d'exploitation : 

docker system prune

Afficher l'ensemble des images présentes sur le système : 

docker images -a

Entrer dans un conteneur : 

docker exec --user:root -it mondocker bash

Stop  all containers :

docker stop $(docker ps -a -q)

Sauvegarder l'image d'un conteneur en cours d'exécution :

docker commit [ID_DU_CONTENEUR] myimage

Supprimer toutes les images

 docker image ls | awk '{print $3}'| tail -n +2 | xargs docker image rm

Créer son propre conteneur : 

Créer son propre dockerfile : 

Fichier = Dockerfile

FROM debian:9

RUN apt-get update -yq \
&& apt-get install curl gnupg -yq \
&& curl -sL https://deb.nodesource.com/setup_10.x | bash \
&& apt-get install nodejs -yq \
&& apt-get clean -y

ADD . /app/
WORKDIR /app
RUN npm install

EXPOSE 2368
VOLUME /app/logs

CMD npm run start

Création de l'image personnalisée : 

docker build -t ocr-docker-build .

image-1634681327817.png

L'image a bien été créée ! 

Lancement du conteneur personnalisé : 

docker run -d -p 2368:2368 ocr-docker-build

Envoyer un tcpdump dans un conteneur : 

cid=<CONTAINER_ID>
sudo nsenter -n -t $(sudo docker inspect --format "{{ .State.Pid }}" "$cid") tcpdump -nnAi any not host X.X.X.X and port YYYY

Créer un fichier docker-compose.yml : 

Pour GHOST : 

version: '3'
services:
 mysql:
   image: mysql:latest
   volumes:
     - db_data:/var/lib/mysql
   restart: always
   environment:
     MYSQL_ROOT_PASSWORD: monPassword

 ghost:
   depends_on:
     - mysql
   image: ghost 
   ports:
     - "80:2368"
   restart: always
   environment:
    NODE_ENV: production
    MYSQL_ROOT_PASSWORD: monPassword
    url: http://localhost:80    

volumes:
 db_data: {}

Pour Wordpress :

version: '3'
services:
  db:
    image: mysql:latest
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "80:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  db_data: {}

Lancement du stack : 

docker-compose up -d  // ou docker-compose up 

Résultat :

Si je tente d'accéder à http://localhost:80 : 

Lister la taille de tous les volumes  : 

for i in $(docker volume ls --format '{{.Name}}')
do
echo "==============================================="
echo "[$i]"
data=`docker volume inspect $i | jq -r '.[0].Mountpoint'`
du -sh $data
echo ""
echo "==============================================="
done

Exemples conteneurs : 

Hello-World : 

docker run hello-world

2048 :

docker run -d -p 8080:80 alexwhen/docker-2048

Google cloud SDK

docker run -ti --name gcloud-config google/cloud-sdk gcloud auth login

POWERSHELL :

docker run -it mcr.microsoft.com/powershell

Dockerfile qui créer un Docker serv web qui affiche son nom (utile pour les tests de load balancing par exemple) : 

# Docker Who display him name
#
# Created by : Néhémie Barkia
# Last Update : 26/12/2023
#
# PRÉREQUITS
FROM debian:latest
RUN apt-get update -y 
RUN apt-get install apache2 php php-pdo php-mbstring php-mysql php-json php-common git -y
RUN apt-get clean
# INSTALLATION WEB 
RUN rm /var/www/html/* -r
# Insertion des informations de connexion dans les fichiers de Fix
RUN echo "<?php" >> /var/www/html/index.php
RUN echo "\$h = getenv('HOSTNAME');" >> /var/www/html/index.php
RUN echo "echo \$h" >> /var/www/html/index.php
RUN echo "?>" >> /var/www/html/index.php
#
WORKDIR /app
VOLUME /app/logs
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
docker build  -t web_name .
docker run -d -p 8080:80 --name=srv1 web_name
docker run -d -p 8081:80 --name=srv2 web_name
docker run -d -p 8082:80 --name=srv3 web_name

 

 

Prometheus SRV 

configs:
  prometheus_config:
    file: /etc/XXXXXXXXXXXXXXXXXX/prometheus/prometheus.yml
  prometheus_web_config:
    file: /etc/XXXXXXXXXXXXXXXXXX/prometheus/web.yml

  
services:
  prometheus:
    image: prom/prometheus:v2.53.1
    ports:
      - 9090:9090
    configs:
      - source: prometheus_config
        target: /etc/prometheus/prometheus.yml
      - source: prometheus_web_config
        target: /etc/prometheus/web.yml
    volumes:
      - type: bind
        source: /var/lib/rp-stack/prometheus
        target: /prometheus/data
    command: >
      --config.file=/etc/prometheus/prometheus.yml
      --web.listen-address="0.0.0.0:9090"
      --storage.tsdb.retention.time=30d
      --web.config.file=/etc/prometheus/web.yml

prometheus.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: apache
    static_configs:
      - targets: [ 'httpd:8080' ]
        labels: { stack: rp-stack, service: "httpd" }
  - job_name: haproxy
    static_configs:
      - targets: [ 'haproxy:8404' ]
        labels: { stack: rp-stack, service: "haproxy" }
  - job_name: prometheus-node-exporter
    static_configs:
      - targets: ['100.102.238.131:9100']

web.yml

basic_auth_users:
  user: $2b$12XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXu0C