解决Docker环境变量的配置的通用方法

我们部署的很多服务都是以Docker容器的形式存在的。

在运行Docker容器前,除了设置网络、数据卷之外,还需要设置各种各样的环境变量。

有时候,由于容器版本的问题,一些文档没有及时更新,可能同时存在多个新旧版本的环境变量设置,让人感到迷惑。当然,这个时候,查看官方在DockerHub上编写的环境变量,通常来说是一个比较不错的解法。但有时候,官方文档上也没有涵盖我们所有想要设置的环境变量,这个时候,换一种更加高级、更加有效的方案------查看启动的启动脚本文件。

这里以ShardingSphere-Proxy容器为例,具体步骤如下:

官方镜像地址:apache/sharidngsphere-proxy:5.5.1

1.查看容器的Image Layers

登录DockerHup进入所使用镜像版本的详情页面,看容器的构建命令,**重点关注CMD和ENTRYPOINT。**在Sharding的镜像构建中,使用了ENTRYPOINT 命令启动了一个脚本,我们想要的查看的内容都在这一个脚本中。

2.寻找对应的启动脚本或文件

知道容器是通过什么启动起来之后,我们去寻找对应的二进制发布包。通常对应的文件会在官方教程中会给出现地址。注意,这里的二进制发布包不一定是源代码,要找同Docker对应的二进制发布包部署方式。

3.下载二进制发布包,查看、确定对应的环境变量

在我们下载的二进制发布包中,寻找对应的启动脚本,然后使用本地的IDE查看脚本中的内容。这里推荐一个方法:直接把脚本内容丢给AI,让AI总结脚本的大致功能。根据自己的需求看对应的代码,这是AI比较擅长的。比如:我需要控制ShardingSphere-Proxy运行时候占用的内存大小,也就是设置-xmx,防止在运行的过程中出现OOM。

寻找代码的位置,直接Ctrl+F

主要就是画框的这两处逻辑

在容器环境下,如果我们想要控制JVM的运行时占用的内存大小,就需要CGROUP_MEM_OPTS的值。

这里可能会有朋友感到疑问,IS_DOCKER的值不需要设置吗?

不需要设置,因为IS_DOCKER通常用来表示是否是docker环境,而改值已经在Dockerfile中设置了,具体下下方图片。

4.在脚本中echo并进行测试

确定环境变量之后,我们进行测试,看看是否向我们预期的一样。

  1. 我们需要在脚本对应的位置加上echo,输出对应的参数。
  2. 如果使用Windows的同学,需要shell脚本上传到Linux虚拟机中,Mac的朋友则不需要上传。
  3. 设置环境变量,格式export key=value,等号左右不要有空格
  4. 运行shell脚本。

5.投入正式的环境,查看是否同预期一致

有些容器的启动脚本,可能并没有我们想要观察的数据,这时候,我们可以将容器的启动脚本进行替换。替换方式有多种,这里推荐使用Dockerfile的方式进行替换。

我们编写新的Dockerfile文件,基础镜像直接选择我们所使用的测试镜像,然后向对应的启动脚本替换即可。具体路径在DockerHub的Image Layers进行查看。

执行docker build的时候,注意镜像构建的上下文。

对镜像构建上下文不太明白的同学可以看这篇博客,gitbook:Docker从入门到实践

复制代码
FROM apache/shardingsphere-proxy:5.5.1
COPY ./start.sh /opt/shardingsphere-proxy/bin/start.sh
RUN chmod +x /opt/shardingsphere-proxy/bin/

ok,环境变量的参数生效了。

在网上搜不到的答案,要学会换一换方法,仔细想一想文档编写的依据是什么?环境变量设置的依据是什么?从底层出发来解决问题。

相关推荐
冰块的旅行39 分钟前
magic-api使用
后端
用户895356032822041 分钟前
Goroutine + Channel 高效在哪?一文吃透 Go 并发底层 G-M-P 调度与实现
后端·go
鸽芷咕43 分钟前
静态住宅 IP 实战测评:手把手教你高效获取全球前沿资讯
后端
西召1 小时前
Spring Kafka 动态消费实现案例
java·后端·kafka
lomocode1 小时前
前端传了个 null,后端直接炸了——防御性编程原来这么重要!
后端·ai编程
镜花水月linyi1 小时前
ThreadLocal 深度解析(上)
java·后端
镜花水月linyi1 小时前
ThreadLocal 深度解析(下)
java·后端
JavaEdge.1 小时前
Spring数据源配置
java·后端·spring
铭毅天下1 小时前
Spring Boot + Easy-ES 3.0 + Easyearch 实战:从 CRUD 到“避坑”指南
java·spring boot·后端·spring·elasticsearch
李慕婉学姐1 小时前
【开题答辩过程】以《基于Springboot的惠美乡村助农系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端