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 .
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
Installer un packet dans un conteneur debian bizzare :
apk add curl
apk add jq
