赞
踩
Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/compose 上
我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务
Compose 就是来做这个事情的,它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)
Compose 中有两个重要的概念:
Compose 项目是由Python编写的,实际上就是调用了Docker服务提供的API来对容器进行管理,因此,只要所在的操作系统的平台支持Docker API,就可以在其上利用Compose来进行编排管理.
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
给docker-compose执行权限,运行命令:
chmod +x /usr/local/bin/docker-compose
检查,运行docker-compose --version,如下:
[root@server1 ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01
Compose 大部分命令的对象即可以是项目的本身,也可以是指定为项目中的服务或者容器
执行docker-compose [COMMAND] --help
或者docker-compose help [COMMAND]
可以查看命令的帮助信息
具体的使用格式
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS]
参数 | 含义 |
---|---|
-f,–file | file指定模板文件,默认是docker-compose.yml模板文件,可以多次指定 |
-p,–project-name | name指定项目名称,默认使用所在目录名称作为项目名称 |
–x-networking | 使用Docker的后端可插拔网络特性 |
–x-networking-driver | driver指定网络的后端驱动,默认使用bridge |
–verbose | 输入更多的调试信息 |
-v,–version | 输出版本信息 |
命令 | 含义 |
---|---|
build | Build or rebuild services (构建项目中的服务容器) |
bundle | Generate a Docker bundle from the Compose file (从Compose文件生成分布式应用程序包) |
config | Validate and view the Compose file (验证并查看Compose文件) |
create | Create services (为服务创建容器) |
down | Stop and remove containers, networks, images, and volumes (停止容器并删除由其创建的容器,网络,卷和图像up) |
events | Receive real time events from containers (为项目中的每个容器流式传输容器事件) |
exec | Execute a command in a running container (这相当于docker exec。使用此子命令,您可以在服务中运行任意命令。默认情况下,命令分配TTY,因此您可以使用命令docker-compose exec web sh来获取交互式提示。) |
help | Get help on a command (获得一个命令的帮助) |
images | List images () |
kill | Kill containers (通过发送SIGKILL信号来强制停止服务容器) |
logs | View output from containers (查看服务容器的输出) |
pause | Pause services (暂停一个容器) |
port | Print the public port for a port binding (打印某个容器端口所映射的公共端口) |
ps | List containers (列出项目中目前所有的容器) |
pull | Pull service images (拉取服务依赖镜像) |
push | Push service images (推送服务镜像) |
restart | Restart services (重启项目中的服务) |
rm | Remove stopped containers (删除所有停止状态的服务容器) |
run | Run a one-off command (在指定服务上执行一个命令) |
scale | Set number of containers for a service (设置指定服务执行的容器个数) |
start | Start services (启动已存在的服务容器) |
stop | Stop services (停止已存在的服务容器) |
top | Display the running processes (显示容器正在运行的进程) |
unpause | Unpause services (恢复处于暂停状态的容器) |
up | Create and start containers (自动完成包括构建镜像、创建服务、启动服务并关联服务相关容器的一系列操作) |
version | Show the Docker-Compose version information (输出版本) |
这些命令的使用方法可以使用执行docker-compose [COMMAND] --help
或者docker-compose help [COMMAND]
可以查看命令的帮助信息
1.建立相关文件存放目录
[root@server1 ~]# mkdir compose
[root@server1 ~]# cd compose/
2.建立docker-compose.yml文件:
模板文件是Compose的核心,涉及的指令关键字比较多,但是大部分的指令与docker run相关的参数的含义是类似的
默认的模板名是docker-compose.yml
编写该文件可以参考官方文档:https://docs.docker.com/compose/compose-file/
[root@server1 compose]# vim docker-compose.yml [root@server1 compose]# cat docker-compose.yml version: "3.7" # 指定 compose 文件的版本 services: # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称 web1: image: nginx volumes: - ./web1:/usr/share/nginx/html networks: - haproxy-net web2: image: nginx volumes: - ./web2:/usr/share/nginx/html networks: - haproxy-net haproxy: image: haproxy volumes: - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro ports: - "80:80" networks: - haproxy-net networks: haproxy-net:
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,故将配置文件复制过来:
[root@server1 haproxy]# cp /etc/haproxy/haproxy.cfg . [root@server1 haproxy]# vim haproxy.cfg [root@server1 haproxy]# cat haproxy.cfg #--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 # chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 #user haproxy #group haproxy daemon # turn on stats unix socket # stats socket /var/lib/haproxy/stats #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 stats uri /status #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend main bind *:80 default_backend app backend app balance roundrobin server app1 web2:80 check server app2 web1:80 check
5.启动集群
[root@server1 compose]# docker-compose up
当然启动之前首先保证本地有nginx和haproxy的镜像,没有的拉取即可。
6.测试负载均衡
[root@server1 compose]# curl 172.25.63.1
web2
[root@server1 compose]# curl 172.25.63.1
web1
[root@server1 compose]# curl 172.25.63.1
web2
[root@server1 compose]# curl 172.25.63.1
web1
[root@server1 compose]# curl 172.25.63.1
web2
负载均衡配置成功。
当然以上是为了实验效果应此两个web服务器发布的内容不一样,实际生产环境中内容应该是相同的,需要做如下改变:
[root@server1 compose]# vim docker-compose.yml [root@server1 compose]# cat docker-compose.yml version: "3.7" services: web1: image: nginx volumes: - webdata:/usr/share/nginx/html networks: - haproxy-net web2: image: nginx volumes: - webdata:/usr/share/nginx/html networks: - haproxy-net haproxy: image: haproxy volumes: - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro ports: - "80:80" networks: - haproxy-net networks: haproxy-net: volumes: webdata:
[root@server1 compose]# docker-compose up -d
然后在浏览器测试:
当然我们也可以写一些测试发布文件,使用docker inspect compose_web1_1
查看web1服务器的挂载目录:
打开这个目录写入测试文件:
root@server1 compose]# cd /var/lib/docker/volumes/compose_webdata/_data
[root@server1 _data]# ls
50x.html index.html
[root@server1 _data]# vim test.html
[root@server1 _data]# cat test.html
123456
然后进行测试:
说明配置成功。
也可以查看调度器的状态:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。