Docker镜像不知道如何实现动态配置?详细教学来了

Docker镜像不知道如何实现动态配置?详细教学来了

Posted by LY on April 8, 2020

欢迎大家关注我的以下主页,尤其是今日头条!!!谢谢🙏🙏🙏

csdn:雷园的csdn博客

个人博客:雷园的个人博客

简书:雷园的简书

今日头条:来自底层程序员的仰望

Docker镜像不知道如何实现动态配置?详细教学来了

开篇说几句

  1. 在前面的章节中,我们从入门安装到使用镜像再到构建镜像我们详细的说过了。
  2. 在上面的两个章节中,我们还分别使用黑箱以及dockerfile构建了镜像并且说明了两者的区别。
  3. 在这一章节中,我们就来说说如何使用容器的环境变量,实现应用服务的动态配置。
  4. 前几日的也是刚刚创建了圈子,非常希望大家能够加入到圈子中,大家可以在这里分享知识、分享生活。

正式开始

为什么使用环境变量来配置服务?

  1. 往往我们针对不同的网络环境、不同的系统以及不同的用途会对中间件、服务、依赖等等进行不同的配置。
  2. 有小伙伴说了,我们可以挂载配置文件到容器中。
  3. 确实这样的方式也没有问题,只是相对麻烦我们要牢记镜像中的配置目录,而且挂载在宿主机中容易误删。
  4. 而且多数时候,我们仅仅希望某些配置项是可以修改的,而有些我们通常要使之使用默认配置项。

Docker命令中如何添加环境变量?

  1. 其实我们前面的章节中也有提到,我们使用-e参数即可指定启动后容器中的环境变量值。
  2. 例如:docker run -d -e TOMCAT_PORT=8080 --name tomcat tomcat,意为启动tomcat镜像指定保持后台运行,环境变量TOMCAT_PORT=8080,容器名称tomcat

dockerfile中如何添加环境变量?

  1. 一般来说我们会在dockerfile中添加默认的环境变量值,避免因为启动时没有指定而导致运行错误。
  2. dockerfile中我们使用ENV指定环境变量。
  3. 例如:ENV TOMCAT_PORT=8080

说了这么多到底怎么把环境变量使用在自己的Docker镜像中呢?

  1. 首先呢,我先说一下哈,其实吧我没有搞明白官方以及大佬们的镜像是怎么使用环境变量的!!!
  2. 这里呢我只是说一下我是怎么用的(PS:其实我个人觉得我用的就没毛病,哈哈哈!!!)
  3. 第一步呢,我会在构建镜像的时候,将需要动态配置的地方使用特殊的字符去替换掉,就比如在tomcat的server.xml中默认的端口是8080。那我会把配置端口的地方修改为TOMCAT_PORT
  4. 第二步呢,我会在dockerfile中添加默认的环境变量值TOMCAT_PORT=8080
  5. 第三步呢,我会编写一个shell脚本,这个脚本的第一个内容呢,就是替换server.xml中的TOMCAT_PORT字符为环境变量TOMCAT_PORT的值,那默认的就是8080。这个脚本的第二个内容就是启动tomcat并tail -f catalina.out以此保持容器的运行状态。最后就是将shell脚本ADD活COPY至镜像中。
  6. 如果我们在运行镜像的时候指定TOMCAT_PORT环境变量为8090,那么脚本就会将运行端口进行替换。

上述所说的tomcat配置文件、dockerfile、shell脚本的详细内容哦,不要错过!!!

server.xml

ENV TOMCAT_PORT=8080
COPY ./start.sh /root/
CMD ["bash", "/root/start.sh"]
#!/bin/bash
# 修改tomcat端口
sed -i 's/TOMCAT_PORT/'$TOMCAT_PORT'/g' /root/tomcat/conf/server.xml
bash /root/tomcat/bin/startup.sh
tail -f /root/tomcat/logs/catalina.out

最后再说几句

  1. 致辞我们算是把简单的单个镜像的运用全部的说完啦,非常希望大家能够有所收获。
  2. 有任何的问题大家都可以提出来哦,大家一起沟通共同进步。
  3. 后面的章节我们就开始说到编排工具啦比如:docker-compose还有docker swarm。
  4. 其中呢docker swarm用于集群的编排,个人认为呢非常的好用,可以自动实现负载均衡等等,后面我们呢都会有说到哦。
  5. 最后呢希望大家多多关注,多多支持!!!