Table des matières
1. Installation de l'environnement Docker Compose
2.Format de fichier YAML et considérations d'écriture
3.Docker Compose configure les champs communs
4.Docker Compose des commandes courantes
5. Configurer les fichiers de dépendance du cluster lnmp
6. Modifiez le fichier docker-compose.yml
7. Créez un conteneur lnmp basé sur le fichier yml
I. Aperçu
- Le projet Docker compose est le projet open source officiel de docker. Il est responsable de l'implémentation du projet docker compose. Il est écrit en Python et appelle l'API fournie par le service docker pour gérer le conteneur. Par conséquent, tant que la plate-forme sur laquelle vous travaillez prend en charge l'API Docker, vous pouvez utiliser composer pour la gestion de l'orchestration.
- Docker compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Il permet aux utilisateurs d'utiliser des fichiers YAML pour définir la configuration d'une application, y compris le nombre de conteneurs, les dépendances entre les conteneurs, les variables d'environnement, les mappages de ports et d'autres paramètres. Les utilisateurs peuvent ensuite utiliser la commande docker-compose pour démarrer et gérer ces conteneurs.
- Vous pouvez utiliser Docker compose pour gérer facilement plusieurs conteneurs. Par exemple, vous pouvez démarrer un conteneur de serveur Web et un conteneur de base de données en même temps, et établir une connexion réseau entre eux. Docker compose prend également en charge les réseaux personnalisés, permettant aux conteneurs de communiquer sur différents réseaux.
- Les fichiers de composition Docker contiennent généralement un ou plusieurs services, chacun étant composé d'un ou plusieurs conteneurs. Les services définissent les tâches que les conteneurs doivent effectuer, ainsi que les dépendances entre les conteneurs. Par exemple : un service de serveur Web peut contenir un ou plusieurs conteneurs de serveur Web, et ces conteneurs dépendent d'un conteneur de base de données.
- Docker compose divise les conteneurs gérés en trois couches, à savoir le projet, le service et le conteneur. Tous les fichiers du répertoire d'exécution docker-compose forment un projet. S'il n'y a pas de nom de projet spécial, il s'agit du nom du répertoire actuel. Un projet peut contenir plusieurs services et chaque service contient un nom, une image, un mappage de port, des variables d'environnement, un point de montage et d'autres informations.
- Le fichier de configuration de projet par défaut de Docker-compose est docker-compose.yml. Le fichier de configuration peut être personnalisé via la variable d'environnement COMPOSE_FILE ou le paramètre -f, qui définit plusieurs services dépendants et les conteneurs dans lesquels chaque service s'exécute.
- Compose permet aux utilisateurs de définir un ensemble de conteneurs d'applications associés en tant que projet via un fichier modèle docker-compose.yml distinct (format YAML).
Résumé : docker compose utilise un fichier modèle pour définir les paramètres de démarrage et les dépendances de plusieurs conteneurs d'application, et utilise docker compose pour démarrer les conteneurs en fonction de la configuration du fichier modèle.
2. Composer déployer lnmp
1. Installation de l'environnement Docker Compose
Docker Compose est un produit indépendant de Docker, vous devez donc installer Docker, puis installer Docker Compose séparément.
#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安装
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version
2.Format de fichier YAML et considérations d'écriture
YAML est un langage de balisage capable d'afficher le format de sérialisation des données de manière très intuitive et hautement lisible. Semblable au langage de description de données JSON, la syntaxe est beaucoup plus simple que JSON. Les structures de données YAML sont représentées par une indentation, les éléments consécutifs sont représentés par des signes moins, les paires clé-valeur sont séparées par des deux-points, les tableaux sont placés entre crochets [] et les hachages sont placés entre accolades {}.
Vous devez faire attention aux éléments suivants lorsque vous utilisez YAML :
- Sensible aux majuscules et minuscules
- Représenter les relations hiérarchiques par indentation
- L'indentation des touches de tabulation n'est pas prise en charge, seuls les espaces peuvent être utilisés pour l'indentation
- Le nombre d'espaces en retrait n'a pas d'importance, tant que le même niveau est aligné à gauche, généralement 2 espaces sont en retrait au début.
- Commentez avec le signe #
- Indentez 1 espace après le caractère du symbole, tel que deux-points : , virgule, , barre horizontale-
- S'il contient des caractères spéciaux entourés de guillemets simples (''), il sera traité comme une chaîne ordinaire. Guillemets doubles ("") : les caractères spéciaux sont utilisés selon le sens qu'ils veulent exprimer.
3.Docker Compose configure les champs communs
字段 描述
build 指定 Dockerfile 文件名,
要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定
dockerfile 构建镜像上下文路径
context 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址
image 指定镜像
command 执行命令,覆盖容器启动后默认执行的命令
container_name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
deploy 指定部署和运行服务相关配置,只能在 Swarm 模式使用
environment 添加环境变量
networks 加入网络,引用顶级networks下条目
network_mode 设置容器的网络模式,如 host,bridge,...
ports 暴露容器端口,与 -p 相同,但端口不能低于 60
volumes 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称
volumes_from 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 '2' 支持
hostname 容器主机名
sysctls 在容器内设置内核参数
links 连接到另外一个容器,- 服务名称[:服务别名]
privileged 用来给容器root权限,注意是不安全的,true | false
restart 设置重启策略,no,always,no-failure,unless-stopped
重启策略:
no,默认策略,在容器退出时不重启容器。
on-failure,在容器非正常退出时(退出状态非0),才会重启容器。
on-failure:3,在容器非正常退出时重启容器,最多重启3次。
always,在容器退出时总是重启容器。
unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
4.Docker Compose des commandes courantes
字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启服务
5. Configurer les fichiers de dépendance du cluster lnmp
mkdir -p /opt/lnmp/{nginx,mysql,php}
ls /opt/lnmp/nginx
Dockerfile nginx-1.24.0.tar.gz nginx.conf www
ls /opt/lnmp/mysql
Dockerfile my.cnf mysql-boost-5.7.20.tar.gz
ls /opt/lnmp/php
Dockerfile php-fpm.conf www.conf
php-7.1.10.tar.bz2 php.ini
6. Modifiez le fichier docker-compose.yml
version: '3'
services:
nginx: #指定服务名称
build: #创建容器
context: ./nginx #指定dockerfile文件路径:在当前目录下的nginx目录中
dockerfile: Dockerfile #文件名为dockerfile
container_name: nginx #指定容器名称
ports: #建立端口映射
- 80:80
volumes: #指定挂载目录
- ./nginx/www:/usr/local/nginx/html #宿主机目录共享给容器内目录
networks: #指定容器中的网络模式
lnmp: #指定网络模式为lnmp
ipv4_address: 172.18.0.10 #指定容器的ip地址
mysql:
build:
context: ./mysql
dockerfile: Dockerfile
ports:
- 3306:3306
volumes:
- db-data:/usr/local/mysql #共享数据卷,数据卷名为db-data
privileged: true #赋予容器root权限
networks:
lnmp:
ipv4_address: 172.18.0.20
php:
build:
context: ./php
dockerfile: Dockerfile
container_name: php
ports:
- 9000:9000
volumes:
- db-data:/usr/local/mysql #挂载mysql容器中的数据卷
- ./nginx/www:/usr/local/nginx/html
depends_on: #连接nginx,mysql容器
- nginx
- mysql
networks:
lnmp:
ipv4_address: 172.18.0.30
networks: #顶级networks
lnmp: #自定义网络模式名为lnmp
driver: bridge #网桥模式
ipam:
config:
- subnet: 172.18.0.0/16 #自定义网络的ip地址
volumes: #顶级volumes
db-data: #指定容器中共享数据卷名称
7. Créez un conteneur lnmp basé sur le fichier yml
cd /opt/lnmp
docker-compose -f docker-compose.yml up -d
-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行
#必须在docker-compose.yml文件目录下执行
docker-compose down #删除容器、网络、数据卷和镜像
docker-composw up -d #启动容器
docker-compose ps #列出容器