解决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,环境变量的参数生效了。

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

相关推荐
tan180°2 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
代码老y2 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
DuelCode3 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社23 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术3 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理3 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
ai小鬼头4 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
简佐义的博客4 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
Code blocks5 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins