Docker Compose
程序员文章站
2022-06-03 23:46:20
...
Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器
(contaienr)。Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文
件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当
中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包
括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实
现服务发现及负载均衡。
Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写
Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容
器。
Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个
包含多个相互关联容器的应用。
实验:
注:rhel:v1为前一篇博客Dockerfile创建的Web服务应用镜像
1、编写 docker-compose.yml 文件
建立目录
[aaa@qq.com ~]# cd /tmp/docker/
[aaa@qq.com docker]# mkdir compose
[aaa@qq.com docker]# cd compose/
这个是 Compose 使用的主模板文件。指定 2个 web 容器,以及 1 个 haproxy 容器。
[aaa@qq.com compose]# vim docker-compose.yml
apache:
image: rhel7:v1
expose: ##暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数
- 80
volumes: ##卷挂载路径设置。可以设置宿主机路径
- ./web:/var/www/html
nginx:
image: nginx
expose:
- 80
haproxy:
image: haproxy
volumes:
- ./haproxy:/usr/local/etc/haproxy
links: ## 链接到其它服务中的容器
- apache
- nginx
ports: ## 暴露端口信息
- "8080:80"
expose:
- 80
2、编辑haproxy.cfg 文件
[root@foundation10 compose]# cd ..
复制web目录到compose目录,web目录有默认发布内容index.html
[root@foundation10 docker]# cp -r web/ compose/
[root@foundation10 docker]# cd compose/
compose目录下新建haproxy目录
[root@foundation10 compose]# mkdir haproxy
[root@foundation10 compose]# cd haproxy/
在其中生成一个 haproxy.cfg 文件,内容为
[root@foundation10 haproxy]# vim haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
stats uri /status
frontend balancer
bind 0.0.0.0:80
default_backend web_backends
backend web_backends
balance roundrobin ##轮循机制:让web1和web2实现负载均衡
server web1 apache:80 check
server web2 nginx:80 check
3、使用docker-compose
在系统目录下
[root@foundation10 haproxy]# cd /usr/local/bin/
get docker-compose-Linux-x86_64-1.22.0
给予可写权限
[root@foundation10 bin]# chmod +x docker-compose-Linux-x86_64-1.22.0
做软连接
[root@foundation10 bin]# ln -s docker-compose-Linux-x86_64-1.22.0 docker-compose
查看软链接
[root@foundation10 bin]# ll
[root@foundation10 bin]# cd /tmp/docker/compose/
[root@foundation10 compose]# ls
docker-compose.yml haproxy web
在该目录下执行 docker-compose up 命令,会整合输出所有容器的输出。并且退出时,所有容器将会停
止。
创建并启动容器
[root@foundation10 compose]# docker-compose up
此时访问对外暴露的8080 端口,会经过 haproxy 自动转发到后端的某个 web 容器上,刷新页
面,可以观察到访问的容器地址的变化。
浏览器访问172.25.254.10:8080 轮循
浏览器访问172.25.254.10:8080/status
访问/status 可以查看到 haproxy 的统计信息。
ctrl+c结束
结束之后可在后台查看有3个进程
[root@foundation10 compose]# docker ps
[root@foundation10 compose]# docker ps -a
再次打开便可以看到容器恢复
[root@foundation10 compose]# docker-compose start
[root@foundation10 compose]# docker ps
检测:
停止一个进程,浏览器查看
[root@foundation10 compose]# docker stop compose_apache_1
查看进程
[root@foundation10 compose]# docker ps
此时浏览器访问172.25.254.10:8080 不发生轮循,只有Nginx的默认访问页面
再重新开启
[root@foundation10 compose]# docker start compose_apache_1
查看进程恢复
[root@foundation10 compose]# docker ps
浏览器访问172.25.254.10:8080 恢复轮循
下一篇: centos7下安装mysql(yum)