当前位置:   article > 正文

Docker(十四)---Docker三剑客之Docker Compose_docker compose sysptcl

docker compose sysptcl

一、什么是Docker Compose

Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/compose

我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务

Compose 就是来做这个事情的,它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)

Compose 中有两个重要的概念:

  • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例

  • 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义

二、基本原理

Compose 项目是由Python编写的,实际上就是调用了Docker服务提供的API来对容器进行管理,因此,只要所在的操作系统的平台支持Docker API,就可以在其上利用Compose来进行编排管理.

三、rhel7下Docker 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
  • 1

给docker-compose执行权限,运行命令:

chmod +x /usr/local/bin/docker-compose
  • 1

检查,运行docker-compose --version,如下:

[root@server1 ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01
  • 1
  • 2

四、docker compose命令

命令

Compose 大部分命令的对象即可以是项目的本身,也可以是指定为项目中的服务或者容器
执行docker-compose [COMMAND] --help 或者docker-compose help [COMMAND]可以查看命令的帮助信息
具体的使用格式

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS]
  • 1

参数选项

参数含义
-f,–filefile指定模板文件,默认是docker-compose.yml模板文件,可以多次指定
-p,–project-namename指定项目名称,默认使用所在目录名称作为项目名称
–x-networking使用Docker的后端可插拔网络特性
–x-networking-driverdriver指定网络的后端驱动,默认使用bridge
–verbose输入更多的调试信息
-v,–version输出版本信息

Compose所支持的命令

命令含义
buildBuild or rebuild services (构建项目中的服务容器)
bundleGenerate a Docker bundle from the Compose file (从Compose文件生成分布式应用程序包)
configValidate and view the Compose file (验证并查看Compose文件)
createCreate services (为服务创建容器)
downStop and remove containers, networks, images, and volumes (停止容器并删除由其创建的容器,网络,卷和图像up)
eventsReceive real time events from containers (为项目中的每个容器流式传输容器事件)
execExecute a command in a running container (这相当于docker exec。使用此子命令,您可以在服务中运行任意命令。默认情况下,命令分配TTY,因此您可以使用命令docker-compose exec web sh来获取交互式提示。)
helpGet help on a command (获得一个命令的帮助)
imagesList images ()
killKill containers (通过发送SIGKILL信号来强制停止服务容器)
logsView output from containers (查看服务容器的输出)
pausePause services (暂停一个容器)
portPrint the public port for a port binding (打印某个容器端口所映射的公共端口)
psList containers (列出项目中目前所有的容器)
pullPull service images (拉取服务依赖镜像)
pushPush service images (推送服务镜像)
restartRestart services (重启项目中的服务)
rmRemove stopped containers (删除所有停止状态的服务容器)
runRun a one-off command (在指定服务上执行一个命令)
scaleSet number of containers for a service (设置指定服务执行的容器个数)
startStart services (启动已存在的服务容器)
stopStop services (停止已存在的服务容器)
topDisplay the running processes (显示容器正在运行的进程)
unpauseUnpause services (恢复处于暂停状态的容器)
upCreate and start containers (自动完成包括构建镜像、创建服务、启动服务并关联服务相关容器的一系列操作)
versionShow the Docker-Compose version information (输出版本)

这些命令的使用方法可以使用执行docker-compose [COMMAND] --help 或者docker-compose help [COMMAND]可以查看命令的帮助信息

五、Docker Compose单机搭建负载均衡集群

1.建立相关文件存放目录

[root@server1 ~]# mkdir compose
[root@server1 ~]# cd compose/
  • 1
  • 2

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:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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
  • 1
  • 2
  • 3
  • 4

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

5.启动集群

[root@server1 compose]# docker-compose up
  • 1

当然启动之前首先保证本地有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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

负载均衡配置成功。

当然以上是为了实验效果应此两个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:  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
[root@server1 compose]# docker-compose up -d
  • 1

在这里插入图片描述
然后在浏览器测试:
在这里插入图片描述
当然我们也可以写一些测试发布文件,使用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后进行测试:
在这里插入图片描述说明配置成功。

也可以查看调度器的状态:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/180679
推荐阅读
相关标签
  

闽ICP备14008679号