ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker-compose的一些占位符运用

2021-04-08 19:02:29  阅读:482  来源: 互联网

标签:compose default 环境变量 jar 占位 XX docker networks applymgr


这是一个普通的docker-compose文件

version: '3'
services:
  applymgr:
    image: harbor.cloud.test/online/applymgr:b88b2301
    networks:
      - default
    dns:
      - 10.99.165.22
    extra_hosts:
      - "zk_hadoop_hbase_kafka:10.109.95.32"
    environment:
      CONFIG_SERVER_URI: http://10.09.65.43:8002
      DEUREKA_URL: http://user:123@10.19.25.53:8001
      JAVA_OPTS: -Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
    command: java -jar -Dspring.profiles.active=test3 manager.jar
    ports:
      - "18001:8080"
networks:
  default:
    driver: bridge

这里 environment 表示环境变量。我们这里设置了一些环境变量。数量不多,但是显得很繁琐。

command 表示我们使用什么命令启动镜像中的jar 文件,它会覆盖Dockerfile中的CMD指令。

这里我们看到配置都是写死的,怎么才能配置化呢?

docker-compose 其实支持文件环境变量

 

version: '3'
services:
  applymgr:
    image: harbor.cloud.test/online/applymgr:b88b2301
    networks:
      - default
    dns:
      - 10.99.165.22
    extra_hosts:
      - "zk_hadoop_hbase_kafka:10.109.95.32"
    env_file:
      - ./common.env
    command: java -jar ${RUN_PROFILE} manager.jar
    ports:
      - "18001:8080"
networks:
  default:
    driver: bridge

这里可以看到我们把具体的环境变量换成了引用 当前目录下的 common.env文件。同时command 指令也使用了占位符来获取环境变量的值。看下环境变量文件中的内容:

CONFIG_SERVER_URI=http://10.88.75.83:8002
EUREKA_URL=http://user:123@10.88.75.83:8001
JAVA_OPTS=-Xms512m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
RUN_PROFILE=-Dspring.profiles.active=test3

 

之后怎么验证呢,其实我们可以使用命令查看docker-compose.yml效果

docker-compose config

执行该命令,得到结果:

 

networks:
  default:
    driver: bridge
services:
  applymgr:
    command: java -jar  manager.jar
    dns:
    - 10.99.165.22
    environment:
      CONFIG_SERVER_URI: http://10.88.75.83:8002
      EUREKA_URL: http://user:123@10.88.75.83:8001
      JAVA_OPTS: -Xms512m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m
        -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
        -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
      RUN_PROFILE: -Dspring.profiles.active=test3
    extra_hosts:
    - zk_hadoop_hbase_kafka:10.109.95.32
    image: harbor.cloud.test/online/applymgr:b88b2301
    networks:
      default: null
    ports:
    - 18001:8080/tcp
version: '3.0'

发现环境变量都设置进去了,但是我们再commond 那里设置的占位符 却变成了空格。那说名占位符并没有取到环境变量的值。

那么这是什么原因了。如果我们把 common.env 重命名为  .env 。同时更改docker-compose.yml文件 env_file 中的文件名。此时可以看到

version: '3'
services:
  applymgr:
    image: harbor.cloud.test/online/applymgr:b88b2301
    networks:
      - default
    dns:
      - 10.99.165.22
    extra_hosts:
      - "zk_hadoop_hbase_kafka:10.109.95.32"
    env_file:
      - ./.env
    command: java -jar ${RUN_PROFILE} manager.jar
    ports:
      - "18001:8080"
networks:
  default:
    driver: bridge

结果:

networks:
  default:
    driver: bridge
services:
  applymgr:
    command: java -jar -Dspring.profiles.active=test3 manager.jar
    dns:
    - 10.99.165.22
    environment:
      CONFIG_SERVER_URI: http://10.88.75.83:8002
      EUREKA_URL: http://user:123@10.88.75.83:8001
      JAVA_OPTS: -Xms512m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m
        -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
        -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
      RUN_PROFILE: -Dspring.profiles.active=test3
    extra_hosts:
    - zk_hadoop_hbase_kafka:10.109.95.32
    image: harbor.cloud.test/online/applymgr:b88b2301
    networks:
      default: null
    ports:
    - 18001:8080/tcp
version: '3.0'

可以看到command 获取环境变量成功了。因为如果我们使用文件设置环境变量。那么文件名 尽量设置为 .env。

同时获取 环境变量 可以使用 ${} 也可以直接使用 $

 

标签:compose,default,环境变量,jar,占位,XX,docker,networks,applymgr
来源: https://www.cnblogs.com/kanyun/p/14633873.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有