Configs

https://docs.docker.com/compose/compose-file/compose-file-v3/

Configs 允许存储一些非敏感信息,比如在容器运行之外的一些配置文件。这种方式可以保证docker镜像更加通用,而不需要将配置文件或者是环境变量绑定到容器。对于敏感信息,比如数据库账号之类的,建议使用secrets
与secrets不同之处在于,configs并没有对数据进行加密,而是直接把配置文件挂载到容器的文件系统中。同时允许任何时刻删除或者添加configs,也可以共享configs;为了支持更高灵活性,
configs内容可以是普通的字符串或者是二进制内容,当然二进制要保证大小在512kb之内

#创建
docker config create new_config ./config.yaml
docker config ls
docker config inspect conf
对conf进行base64解码
docker config inspect -f '{{json .Spec.Data}}' conf 
删除secret
docker config rm conf2

#update 删除旧的,添加新的configs
docker service update --force --config-rm old_config \
 --config-add source=new_config,target=/bootstrap.yaml

使用
docker run  --config source=conf,target=/etc/nginx/conf.d/default.conf

动态docker config name

services:
  nginx:
    configs:
      - source: nginx.conf
        target: /etc/nginx/nginx.conf
        uid: '103'
        gid: '103'
        mode: 0440
      - my_other_config
configs:
  nginx.conf:
    file: /etc/nginx/nginx.conf
  my_other_config:
    external: true
  • 参数说明:
    source: configs中定义的配置标识符
    target :要挂载在服务任务容器中的文件的路径和名称。如果未指定,默认为/
    uid和gid: 在服务的任务容器中拥有挂载的配置文件的数字uid或gid。如果未指定,两者在Linux上默认为0。Windows上不支持。
    mode: 在服务的任务容器中挂载的文件的权限,以八进制表示。例如,0444表示可读。默认值为0444。配置是不可写的,因为它们挂载在一个临时文件系统中,所以如果您设置了可写位,它将被忽略。可执行位可以设置。如果您不熟悉UNIX文件权限模式,您使用权限计算器。
  • 重复执行docker stack deploy可能会报错
services:
  nginx:
    configs:
      - source: nginx.conf-${env.CONFIG_VERSION}
        target: /etc/nginx/nginx.conf
configs:
  nginx.conf-${env.CONFIG_VERSION}:
    file: /etc/nginx/nginx.conf

CONFIG_VERSION=$(date +%s) docker stack deploy --compose-file docker-stack.yml stackname

secrets



docker传参的方法

environment:
    - "A=a"
    - "B=b"
env_file:
   - ./env_files/configs.env