欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker Compose

程序员文章站 2022-06-03 23:46:20
...

Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器
(contaienr)。Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文
件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当
中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包
括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实
现服务发现及负载均衡。
Docker Compose
Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写
Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容
器。
Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个
包含多个相互关联容器的应用。

实验:

注:rhel:v1为前一篇博客Dockerfile创建的Web服务应用镜像

1、编写 docker-compose.yml 文件

建立目录
[aaa@qq.com ~]# cd /tmp/docker/
[aaa@qq.com docker]# mkdir compose
[aaa@qq.com docker]# cd compose/
这个是 Compose 使用的主模板文件。指定 2个 web 容器,以及 1 个 haproxy 容器。
[aaa@qq.com compose]# vim docker-compose.yml
apache:
    image: rhel7:v1
    expose:         ##暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数
        - 80
    volumes:        ##卷挂载路径设置。可以设置宿主机路径
        - ./web:/var/www/html

nginx:
    image: nginx
    expose:
        - 80

haproxy:
    image: haproxy
    volumes:
        - ./haproxy:/usr/local/etc/haproxy
    links:            ## 链接到其它服务中的容器
        - apache
        - nginx
    ports:            ## 暴露端口信息
        - "8080:80"
    expose:
        - 80

2、编辑haproxy.cfg 文件

[root@foundation10 compose]# cd ..
复制web目录到compose目录,web目录有默认发布内容index.html
[root@foundation10 docker]# cp -r web/ compose/ 
[root@foundation10 docker]# cd compose/
compose目录下新建haproxy目录
[root@foundation10 compose]# mkdir haproxy
[root@foundation10 compose]# cd haproxy/
在其中生成一个 haproxy.cfg 文件,内容为
[root@foundation10 haproxy]# vim 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 balancer
    bind 0.0.0.0:80
    default_backend web_backends
backend web_backends
    balance roundrobin          ##轮循机制:让web1和web2实现负载均衡
    server web1 apache:80 check
    server web2 nginx:80 check

Docker Compose
3、使用docker-compose

在系统目录下
[root@foundation10 haproxy]# cd /usr/local/bin/
get docker-compose-Linux-x86_64-1.22.0
给予可写权限 
[root@foundation10 bin]# chmod +x docker-compose-Linux-x86_64-1.22.0 
做软连接
[root@foundation10 bin]# ln -s docker-compose-Linux-x86_64-1.22.0 docker-compose
查看软链接
[root@foundation10 bin]# ll

Docker Compose

[root@foundation10 bin]# cd /tmp/docker/compose/
[root@foundation10 compose]# ls
docker-compose.yml  haproxy  web
在该目录下执行 docker-compose up 命令,会整合输出所有容器的输出。并且退出时,所有容器将会停
止。
创建并启动容器
[root@foundation10 compose]# docker-compose up

Docker Compose
此时访问对外暴露的8080 端口,会经过 haproxy 自动转发到后端的某个 web 容器上,刷新页
面,可以观察到访问的容器地址的变化。
浏览器访问172.25.254.10:8080 轮循
浏览器访问172.25.254.10:8080/status
Docker Compose
Docker Compose
访问/status 可以查看到 haproxy 的统计信息。
Docker Compose

ctrl+c结束
结束之后可在后台查看有3个进程
[root@foundation10 compose]# docker ps
[root@foundation10 compose]# docker ps -a

Docker Compose

再次打开便可以看到容器恢复
[root@foundation10 compose]# docker-compose start
[root@foundation10 compose]# docker ps

检测:

停止一个进程,浏览器查看
[root@foundation10 compose]# docker stop compose_apache_1 
查看进程
[root@foundation10 compose]# docker ps
此时浏览器访问172.25.254.10:8080 不发生轮循,只有Nginx的默认访问页面
再重新开启
[root@foundation10 compose]# docker start compose_apache_1 
查看进程恢复
[root@foundation10 compose]# docker ps
浏览器访问172.25.254.10:8080 恢复轮循

Docker Compose