之前在博客里面写过dockerfile、镜像的创建。今天写的docker-compose是容器的创建。两者有很类似的地方,也有不同的地方。相同地方都是由文件结构来创建的,都是逐条执行命令,不同地方就是文件内容的组件不同。用户在定义一个*.yml模板来定义一个相关联的容器。利用docker-compose创建镜像可以根据环境的不同来定制不同的容器,接下来以一个负载均衡环境来部署
拓扑环境:一个haproxy负载均衡器,3台web服务器
整体思路:
安装docker-compose、部署好文件环境并构建docker-compose.yml文件、启动docker-compose
一、安装docker-compose
1.先安装pip,类似yum安装,安装Python包非常方便
wget https://bootstrap.pypa.io/get-pip.py //下载pip
python get-pip.py //安装pip
2.安装docker-compose
pip install docker-compose
ln -s /usr/bin/docker-compose /usr/local/bin/ //链接到系统目录下,方便使用
docker-compose -h //如果不会命令查看-h
二、在宿主机上创建好共享给容器的文件,如网页文件、配置文件等
mkdir -p /root/docker-haproxy/{haproxy,web}
cd /root/docker-haproxy/web
vim index.html //给web服务器创建一个网页文件
cd /root/docker-haproxy/haproxy
vim haproxy.cfg //给haproxy创建一个配置文件
以下是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
listen stats //监听状态,给任何地址一个70端口,可以通过70端口对haproxy的情况做检查
bind 0.0.0.0:70
stats enable
stats uri /
frontend balancer //全段均衡器,haproxy绑定端口,客户端可以通过这个端口访问负载均衡器
bind 0.0.0.0:80
mode http
default_backend web_backends
backend web_backends //后端配置项,主要写入与后端容器连接地址
mode http
option forwardfor
balance roundrobin
server weba weba:80 check
server webb webb:80 check
server webc webc:80 check
option httpchk GET /
http-check expect status 200
三、编写docker-compose.yml文件
web1:
image: centos:http
// 用哪个镜像启动容器(可用镜像ID号),可以是本地也可以是HUB仓库里的。如果有dockerfile文件可以用build命令制定dockerfile文件路径,如build:/root/docker
volumes:
- /root/docker-haproxy/web/:/var/www/html/
//与宿主机挂载的位置,格式为 - 宿主机目录:容器路径。当前是把宿主机做好的网页文件映射到容器里的/var/www/html
expose:
- 80
//不向宿主机暴露端口号,而是在内部被发布
web2:
image: centos:http
volumes:
- /root/docker-haproxy/web/:/var/www/html/
expose:
- 80
web3:
image: centos:http
volumes:
- /root/docker-haproxy/web/:/var/www/html/
expose:
- 80
haproxy:
image: 047d39960eb2
volumes:
- /root/docker-haproxy/haproxy/:/etc/haproxy/:ro
//把宿主机/root/docker-haproxy/haproxy/路径映射到容器中/etc/haproxy/,并且文件类型为只读
command: /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
//在容器中运行的命令使用command
links:
- web1
- web2
- web3
//通过容器名连接到其他容器,连接成功会在容器中的/etc/hots文件中添加一条容器本地IP地址与容器名的映射
ports:
- "80:80"
- "70:70"
//把端口号暴露在宿主机中,这里haproxy需要通过客户机的访问做负载均衡,所以要把端口暴露在宿主机中
四、在docker-compose.yml文件的当前路径下运行 docker-compose up -d 启动