一、Docker-Compose 简介
1、Docker-Compose 项目是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。
2、Docker-Compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。
Docker-Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Docker-Compose 项目由 Python 编写,调用 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
Docker-Compose 安装
方法有多种这里我们使用官方推荐的
[root@docker01 ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#安装Docker-Compose:
[root@docker01 ~]# chmod +x /usr/local/bin/docker-compose
#查看版本 :
[root@docker01 ~]# docker-compose version
三、Docker-Compose 常用命令
显示正在运行的进程:docker-compose top
后台运行:docker-compose up -d
停止并清除:docker-compose down 停止和删除容器、网络、卷、镜像。
重起项目中的服务:docker-compose restart
启动已存在的服务容器:docker-compose start
四、Docker-Compose 编排文件详解
#创建编写文件
[root@server4 haproxy]# cat docker-compose.yaml
version: "3"#Compose的版本,通常我们使用3
services: #服务
web:
image: nginx#指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
ports:#映射端口
- "80:80"
volumes:#挂载
- ./web:/usr/local/nginx/htdocs#web界面
- ./project:/var/www/html/project##把PHP文件挂载到本地
- ./default.conf:/etc/nginx/conf.d/default.conf#nginx配置文件
- ./log/nginx:/var/log/nginx#nginx日志
networks:#关键字指定自定义网络
- webnet
php:
image: lince/php:5.6-fpm#这个镜像是我们自己定义的在当前目录下Dockerfile
volumes:挂载到宿主机(前面是宿主机)
- ./project:/var/www/html/project#把PHP挂载到本地
networks:
- webnet
mysql: # 添加 mysql 服务
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- ./mysql:/var/lib/mysql#数据挂载到本地
- ./my.cnf:/etc/mysql/my.cnf#配置文件挂载道本地
restart: always
environment:
- TZ=Asia/Shanghai # 设置时区
- MYSQL_ROOT_PASSWORD=zxcvbnm # 设置 root 用户密码
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 设置编码
networks:
- webnet
networks:
webnet:
#创建default.conf
[root@server4 haproxy]# cat default.conf
server {
listen 80;
index index.php index.html;
server_name _;
root /var/www/html/project;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
root /usr/local/nginx/htdocs;
index index.html index.htm;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
#PHP镜像
[root@server4 haproxy]# ls
default.conf docker-compose.yaml Dockerfile log mysql project web
[root@server4 haproxy]# cat Dockerfile
FROM php:5.6-fpm
RUN apt-get update \
&& docker-php-ext-install pdo pdo_mysql
#并执行Dockerfile创建镜像
[root@server4 haproxy]# docker build -t php:v1 .
#创建project并在里面创建cnnect_mysql.php和phpinfo.php文件
[root@server4 haproxy]# ls project/
cnnect_mysql.php phpinfo.php
[root@server4 haproxy]# cat project/cnnect_mysql.php
<?php
try{
$conn = new PDO("mysql:host=mysql:3306;dbname=school", "root", "zxcvbnm");
echo "连接成功\n";
$stmt = $conn->prepare("SELECT * FROM school.student");
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach ($stmt->fetchAll() as $key => $value) {
echo $value["name"] . "\n";
}
}catch(PDOException $e){
echo $e->getMessage();
}
?>
[root@server4 haproxy]# cat project/phpinfo.php
<?php phpinfo();
ls
#创建日志
[root@server4 haproxy]# mkdir -p log/nginx/
#创建mysql来收集数据
[root@server4 haproxy]# mkdir mysql
#创建web静态界面
[root@server4 haproxy]# mkdir web
#挂载数据库的配置文件(事先拷贝一份否则启动容器后my.cnf会是个空文件)
[root@server4 haproxy]# touch web/index.html