一个项目可以由多个服务(容器)关联而成,Compose面向项目进行管理。
同时启动多容器环境并且解决容器之间依赖关系
一、docker-compose安装部署
GitHub_docker-compose版本
docker-compose官方指导
环境:docker已安装,epel源已经存在
Github docker-compose最新版本:2.6.11. 安装docker-compose三种途径:1) pip3安装:pip3 install docker-compose2) 二进制安装,GitHub下载对应安装包,添加执行权限mv docker-compose-linux-x86_64 /usr/bin/docker-composechmod a+x docker-compose && docker-compose version3) yum install -y doccker-compose(版本较低,默认Version: 1.18.0)
二、docker-compose命令
常用命令:down、up -d、build
1. build 构建(重新构建)项目中的服务容器
2. config 检测compose文件的错误
3. up # 创建并启动服务
4. down # 停止和删除所有容器、网络、镜像和卷
5. images 列出项目中所包含的镜像
6. logs 查看服务容器的日志
7. kill 发送 SIGKILL 信号来强制停止服务容器
8. port 查看某个容器端口所映射的公共端口
9. ps 列出项目中目前的所有容器
10. restart 重启项目中的服务
11. rm # 删除所有停止状态的服务容器
12. run # 一次性运行容器,等于 docker run --rm
13. scale 设置指定服务运行的容器个数,横向扩容docker-compose scale nginx=2 # 需要关闭yaml指定的端口映射,不然会冲突
14. stop 停止处于运行状态的容器
15. start 启动被stop的服务容器
16. top 查看各个服务容器内运行的进程
17. pause 暂停一个服务容器
18. unpause 恢复处于暂停状态中的服
命令详解可参考链接
三、docker-compose
1. docker-compose 将所管理的容器分为三层,分别是工程(project), 服务(service)以及容器(container)
2. 不支持跨主机进行容器调度的功能
3. docker只是通过server_name找到对应的容器k8s 的server_name有自己的网络及端口
4. 发现本地镜像和haproxy值不一样,通过docker-compose pull 拉取最新的镜像
查看指定端口号是否映射
[root@szx docker-compose]# docker-compose port nginx 443
0.0.0.0:443
[root@szx docker-compose]# docker-compose port nginx 80
0.0.0.0:80
参数 | 解析 |
---|---|
-f | 指定docker-compose.yml/yaml配置文件路径 |
config -q | 查看当前配置,没有错误不输出任何信息 |
四、docker-compose示例
1、nginx服务测试
1) docker-compose.yaml文档
mkdir docker-compose
cd docker-compose/[root@szx docker-compose]# vim docker-compose.yaml
version: '3'
services:nginx:image: nginx:1.22.0container_name: nginx-web1expose:- 80- 443ports:- "80:80"- "443:443"
2) 验证并启动
1. 检查配置文件是否有问题
[root@szx docker-compose]# docker-compose config -q # 无错误不输出
2. 构建
[root@szx docker-compose]# docker-compose up -d # 创建并启动服务,后台启动up Create and start containers
默认寻找当前目录下的docker-compose.yaml文件
2、redis服务
[root@szx docker-compose]# vim docker-compose.yaml
services:redis:image: redis:latestcontainer_name: redis-web1expose:- 6379ports:- "6379:6379"
docker-compose up -d # 启动
docker ps # 查看启动的容器
3、haproxy–>nginx–>tomcat服务测试
version: '3'
services:haproxy:image: haproxy:2.6.1container_name: haproxy-web1expose:- 80- 9000ports:- "80:80"- "9000:9000"links:- nginxnginx:image: nginx_compile:v1container_name: nginx-web1expose:- 80- 443links:- tomcat01- tomcat02tomcat01:image: tomcat-web:app1container_name: tomcat-app1expose:- 8080volumes:- /data/Dockerfile/web/tomcat/tomcat01/myapp:/apps/tomcat/webapps/myapptomcat02:image: tomcat-web:app2container_name: tomcat-app2volumes:- /data/Dockerfile/web/tomcat/tomcat02/myapp:/apps/tomcat/webapps/myappexpose:- 8080
配置:
1.镜像:haproxy:2.6.1、nginx_compile:v1、tomcat-web:app1、tomcat-web:app2(由本地dockerfile文件创建的)
可以从harbor或者远程服务器直接pull下来
2.haproxy:
server web1 nginx:80 check inter 3000 fall 2 rise 5
3.nginx
vim nginx.conf # 进行转发给tomcatupstream tomcat{server tomcat01:8080;server tomcat02:8080;}location /linux {proxy_pass http://tomcat/;}
启动报错分析
1.
[root@localcentos ~]# telnet 124.222.155.194 6379
telnet: connect to address 124.222.155.194: Connection refused解决:docker-compose.yml文件的映射端口写错了2.docker-compose up -d 报错
1)(root) Additional property services_nginx is not allowed
解决:docker-compose.yaml的首部定义services字段2)Error response from daemon: Conflict. The container name "/nginx-web1" is already in use by
container "a1a1b0580065b464ec3115fc2ff794c0f9ea01d341029a5f279feff8383a6ee5".
You have to remove (or rename) that container to be able to reuse that name.
解决:yaml文件里面有重名服务,删了或改server名