(1) 微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。
(2) Docker Compose是一种编排服务,基于pyhton语言实现,是一个用于在 Docker
上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。
(3) 用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。
(4) 解决了容器与容器之间如何管理编排的问题。
Docker Compose 中有两个重要的概念:
服务 (service) : 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project) : 由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
1.docker compose安装
方式1:(官方推荐,但是慢)
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
官网下载地址:https://docs.docker.com/compose/install/
方式二:
https://mirrors.aliyun.com/docker-toolbox/linux/compose/
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
注:安装好docker-compose重启docker,否则docker-compose不生效
2.编辑docker-compose
(1)创建docker-compose.yml文件
[root@server4 ~]cd /root/compose
[root@server4 ~/compose]#vim docker-compose.yml
[root@server4 ~/compose]#cat docker-compose.yml
web1:
image: nginx
expose:
- 80
volumes:
- ./web1:/usr/share/nginx/html
web2:
image: nginx
expose:
- 80
volumes:
- ./web2:/usr/share/nginx/html
haproxy:
image: haproxy:latest
volumes:
- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
links:
- web1
- web2
ports:
- "80:80"
expose:
- "80"
[root@server4 ~/compose]#mkdir web1
[root@server4 ~/compose]#mkdir web2
[root@server4 ~/compose]#cd web1
[root@server4 ~/compose/web1]#vim index.html
[root@server4 ~/compose/web1]#cd ../web2
[root@server4 ~/compose/web2]#vim index.html
Image: 指定为镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
Build: 指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
Command: 覆盖容器启动后默认执行的命令。
Links: 链接到其它服务中的容器。
Ports: 端口映射。
Expose: 暴露端口信息
Volumes: 卷挂载路径设置
(2)编辑haproxy配置文件
[root@server4 ~/compose]#mkdir haproxy
[root@server4 ~/compose]#cd haproxy/
[root@server4 ~/compose/haproxy]#ls
[root@server4 ~/compose/haproxy]#vim haproxy.cfg
[root@server4 ~/compose/haproxy]#cat 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 balanceer
bind 0.0.0.0:80
default_backend web_backends
backend web_backends
balance roundrobin
server server1 web1:80 check
server server2 web2:80 check
(3)在配置主机上需要有nginx与haproxy镜像
[root@server4 ~]#docker images haproxy
REPOSITORY TAG IMAGE ID CREATED SIZE
haproxy latest fbd1f55f79b3 3 years ago 139MB
[root@server4 ~]#docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ac44715da54a 8 weeks ago 109MB
3.运行docker-compose
(1)docker-compose命令必须在项目下运行,以下是项目目录结构:
(2)docker-compose up 创建并启动容器
[root@server4 ~/compose]#docker-compose up -d
Creating compose_web1_1 ... done
Creating compose_web2_1 ... done
Creating compose_haproxy_1 ... done
(3)列出所有容器
[root@server4 ~/compose]#docker-compose ps
Name Command State Ports
compose_haproxy_1 /docker-entrypoint.sh hapr ... Exit 0
compose_web1_1 nginx -g daemon off; Up 80/tcp
compose_web2_1 nginx -g daemon off; Up 80/tcp