一个项目可以由多个服务(容器)关联而成,Compose面向项目进行管理。
同时启动多容器环境并且解决容器之间依赖关系
一、docker-compose安装部署
GitHub_docker-compose版本
docker-compose官方指导
环境:docker已安装,epel源已经存在
Github docker-compose最新版本:2.6.1
1. 安装docker-compose三种途径:
1) pip3安装:pip3 install docker-compose
2) 二进制安装,GitHub下载对应安装包,添加执行权限
mv docker-compose-linux-x86_64 /usr/bin/docker-compose
chmod a+x docker-compose && docker-compose version
3) 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.0
container_name: nginx-web1
expose:
- 80
- 443
ports:
- "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:latest
container_name: redis-web1
expose:
- 6379
ports:
- "6379:6379"
docker-compose up -d # 启动
docker ps # 查看启动的容器
3、haproxy–>nginx–>tomcat服务测试
version: '3'
services:
haproxy:
image: haproxy:2.6.1
container_name: haproxy-web1
expose:
- 80
- 9000
ports:
- "80:80"
- "9000:9000"
links:
- nginx
nginx:
image: nginx_compile:v1
container_name: nginx-web1
expose:
- 80
- 443
links:
- tomcat01
- tomcat02
tomcat01:
image: tomcat-web:app1
container_name: tomcat-app1
expose:
- 8080
volumes:
- /data/Dockerfile/web/tomcat/tomcat01/myapp:/apps/tomcat/webapps/myapp
tomcat02:
image: tomcat-web:app2
container_name: tomcat-app2
volumes:
- /data/Dockerfile/web/tomcat/tomcat02/myapp:/apps/tomcat/webapps/myapp
expose:
- 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 # 进行转发给tomcat
upstream 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名