上一节在我们安装完成Harbor之后,在harbor的安装目录会生成一个docker-compose.yml文件。这个文件是harbor官方替我们写好的,在harbor的安装目录我们可以用这个文件启动、停止、删除harbor的容器等操作。harbor通过docker compose一共启动了9个容器,所以说能够把harbor的docker-compose.yml理解清楚,以后我们自己写docker-compose.yml文件也就游刃有余了。
完整的harbor的docker-compose.yml我已经上传到这里,大家点击查看。一定先把这个文件全局都看一遍形成一个印象,下面我们再来一一局部解析一下这个docker-compose.yml文件中定义的配置语法,常用的配置也就这些,遇到新的不会的配置再补充查一下就可以了。

文章目录

    • version
    • image、container_name、restart
    • cap_add、 cap_drop
    • volumes
    • ports
    • networks
    • depends_on
    • logging
    • env_file、environment
    • shm_size
    • v3和v2版本的区别总结

version

version用来表示Compose配置文件语法版本,目前的语法有3个版本,分别为1, 2.x 和 3.x。目前主流的为 3.x版本, 其与docker 1.13.0 及其以上的版本兼容。docker2.x版本的语法仍然在使用中,其与3.x语法并无太大的差异,后面介绍的过程中有差异的部分会重点说明。

version: '2.3'

image、container_name、restart

services:log:image: goharbor/harbor-log:v2.5.0container_name: harbor-logrestart: always
  • service.logyaml结构定义了一个服务名称叫log,services下可以定义多个服务
  • image:log服务使用的docker镜像是goharbor/harbor-log:v2.5.0
  • container_name:log服务对应的容器名称设置为harbor-log
  • restart:log服务的重启策略是always,参考前面章节《容器自启动与保活》

cap_add、 cap_drop

cap_drop:- ALLcap_add:- CHOWN- DAC_OVERRIDE- SETGID- SETUID
  • cap_drop ALL用于去掉容器操作linux内核的能力,因为ALL能力权限过大,出于安全性考虑把它去掉
  • cap_add 用于为容器添加若干能力,CHOWN修改文件属主的能力;SETGID(SETUID)设置用户组ID、用户ID的能力;DAC_OVERRIDE权限更大,包含用户、用户组、ACL操作权限。

这部分用于调整容器操作内核权限、能力的配置。在v3版本中有一点点变化,就是在docker Swarm 模式中,Compose 会忽略这部分参数的值。

volumes

volumes用于定义数据卷,相信学习过《docker数据管理》内容的朋友看下面的配置都不会有任何的问题。如果有问题回去再复习一遍。

volumes:- /var/log/harbor/:/var/log/docker/:z- type: bindsource: ./common/config/log/logrotate.conftarget: /etc/logrotate.d/logrotate.conf- type: bindsource: ./common/config/log/rsyslog_docker.conftarget: /etc/rsyslog.d/rsyslog_docker.conf

需要特殊说明的是:z(小z)表示数据卷的内容可以在容器之间共享,如果是:Z(大Z)表示数据卷是该容器私有的。

ports

ports完成容器与宿主机之间的端口映射,冒号前面是宿主机端口,冒号后面是容器端口(暴露给宿主机上的其他进程或容器)。

ports:- 80:8080- 443:8443

如果宿主机有多网卡多IP、可以指定映射的ip。映射到127.0.0.1可以避免暴露到外网,在宿主机范围内暴露端口。下面的配置节选自log服务,通过1514端口收集各个服务的日志。

services:log:ports:- 127.0.0.1:1514:10514

networks

与services同级的networks用于定义网络,sevices下的networks表明该服务所在的容器使用哪个网络。

services:log:networks:- harbornetworks:harbor:external: false

如上所示定义一个新的网络名称是harbor,external: false是否使用外部网络, 表示使用harbor这个网络,如果harbor这个网络不存在则新建该网络。external: truedocker-compose up不会尝试新建网络,而是使用已经存在的网络(需要自己事先将网络创建好),网络不存在就报错。

depends_on

下文示例的depends_on表示registry容器需要在log服务对应的容器启动之后才能启动,用于控制服务之间依赖关系及容器启动顺序。

registry:depends_on:- log

logging

配置日志选项,registry服务将自己的syslog日志发送到tcp://localhost:1514(上文中的log服务容器),并为日志打上标签registry。

registry:logging:driver: "syslog"options:syslog-address: "tcp://localhost:1514"tag: "registry"

目前支持三种日志驱动类型,在linux操作系统/var/log下面的那些日志文件,基本都属于syslog。

driver: "json-file"driver: "syslog"driver: "none"

env_file、environment

下文中的env_file表示在docker-compose.yml同级目录下的common/config/registryctl有一个文件叫做env

registryctl:env_file:- ./common/config/registryctl/env

我们来看一下这个env文件的内容,定义了2个环境变量

CORE_SECRET=B4lHZYehQTkjRMF6JOBSERVICE_SECRET=lplIX7YkWJayvNkW

这个env_file相当于如下的environment环境变量定义,环境变量通常是给容器使用的(在构建及启动脚本中也可以使用)。相当于修改/etc/profileexport环境变量的操作。

registryctl: environment:CORE_SECRET=B4lHZYehQTkjRMF6JOBSERVICE_SECRET=lplIX7YkWJayvNkW

shm_size

shm_size创建容器时候指定最小共享内存,对于内存有要求的容器服务要修改这个值。

postgresql:shm_size: '1gb'

v3和v2版本的区别总结

  • 由于 Swarm mode 中网络的特殊性,Compose v3版本配置文件中一些声明比如exposelinks会被忽略。注意:不能再使用 link 定义的网络别名来进行容器互联,可以使用服务名连接。
  • Compose v3版本配置文件中volumes_from不再支持,只能使用命名数据卷来实现容器数据的持久化和共享。
  • Compose v3版本配置文件中引入了deploy指令,可对Swarm mode中服务部署的进行细粒度控制,包括
    • resources:定义cpu_shares,cpu_quota,cpuset,mem_limit,memswap_limit等容器资源限制指令。(v1/v2中相应指令在v3版本的配置文件中不再被支持)
    • restart_policy:定义服务的重启条件 (v1/v2中restart指令在v3版本的配置文件中不再被支持)