前言
Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)。
Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。
Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个包含多个相互关联容器的应用。Compose 项目使用 python 编写,基于后面的实验中我们将学习的 Docker API 实现。
实验目的:
使用docker compose管理nginx、haproxy镜像,实现nginx网页的高可用
一、自己下载docker compose的二进制文件移到 /usr/local/bin/,赋予执行权限[root@server1 ~]# ls
certs docker-compose-Linux-x86_64-1.24.1 game2048.tar rhel7.tar ubuntu.tar
[root@server1 ~]# mv docker-compose-Linux-x86_64-1.24.1 /usr/local/bin/
[root@server1 bin]# mv docker-compose-Linux-x86_64-1.24.1 docker-compose
[root@server1 bin]# chmod +x docker-compose
2.编写docker-compose.yml
[root@server1 compose]# vim 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
volumes:
- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
links:
- web1
- web2
ports:
- "80:80"
expose:
- "80"
3.导入Nginx与Haproxy镜像
[root@server1 ~]# docker load -i haproxy.tar
917c0fc99b35: Loading layer 130.9MB/130.9MB
5f70bf18a086: Loading layer 1.024kB/1.024kB
c205bb11f213: Loading layer 4.684MB/4.684MB
ffef890bdf7b: Loading layer 9.549MB/9.549MB
3ec368642ee3: Loading layer 2.048kB/2.048kB
Loaded image: haproxy:latest
[root@server1 ~]# docker load -i nginx.tar
cf5b3c6798f7: Loading layer 58.45MB/58.45MB
da9fed87e1d3: Loading layer 54.59MB/54.59MB
0d1174230cc6: Loading layer 3.584kB/3.584kB
Loaded image: nginx:1.16
因为配置文件里镜像直接写的是nginx,所以要把它的标签改为nginx:latest
[root@server1 compose]# docker tag nginx:1.16 nginx:latest
3.编写测试用的测试页面
[root@server1 compose]# mkdir web1
[root@server1 compose]# mkdir web2
[root@server1 compose]# echo web1 > web1/index.html
[root@server1 compose]# echo web2 > web2/index.html
4.配置haproxy负载均衡
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
server server1 web1:80 check
server server2 web2:80 check
~
5.开启docker-compose(值的注意的是:执行docker-compose命令时,所在目录下,必须有docker-compose.yml文件)
[root@server1 compose]# docker-compose up -d
Creating compose_web1_1 … done
Creating compose_web2_1 … done
Creating compose_haproxy_1 … done
[root@server1 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
测试: