Docker容器化开发流程(一)介绍

目标

  • 了解容器化开发模式
  • 了解容器化开发流程

参考: Docker技术入门与实战 第二版 书籍

[认识容器](https://snailclimb.gitee.io/javaguide/#/docs/tools/Docker)

Docker 从入门到实践

以下多引用于Docker技术入门与实战 第二版这本书籍

容器化开发模式

  • 传统开发流程

    传统模式中,开发团队在开发环境中完成软件开发,本地完成单元测试,测试通过,则可提交到代码版本管理库;测试团队打包进行进一步测试。运维团队把应用部署到测试环境,开发团队或测试团队再次进行测试,没问题后通知部署人员发布到生产环境。
    
    在上述过程中涉及三个环境:开发、测试和生产,以及三个团队:开
    发、测试、运维。多个环境和多个团队之间的这种交互,很容易出现彼此环境不一致的情况,浪费不必要的人力物力。
    

    在之前的工作流程中,基本可以分为测试环境和线上环境两种。

    开发阶段:一般是本公司的服务器提供测试环境,测试环境提供关系型数据库或者是nosql数据库环境支持,开发人员本地使用本机的jdk和tomcat开发和测试。

    测试阶段:开发人员将项目部署到测试环境下,在测试环境中安装jdk和tomcat部署运行项目,供测试人员测试

    线上阶段:通常要把各种服务(比如nginx,mysql,jdk,tomcat,redis等等),安装到由客户提供的线上环境中,再部署和运行项目。

    出现的问题:测试环境和线上环境会存在差异,本来在测试环境项目好好的,到线上环境后项目就不能正常运行。这是真实存在的,何况在客户提供的服务器,线上可能还运行着很多服务,很多时候不能快速定位项目为什么会运行报错,也不能擅自修改某些服务配置。或者本身的测试环境可能是windows,但是现在换成了linux。

    想要解决的问题:使用容器化的技术,docker来解决环境不一致的情况

  • 容器化开发流程

    在容器化的应用中,项目架构师和开发人员的作用贯穿整个开发、测
    试、生产三个环节。
    项目伊始,架构师根据项目预期创建好需要的基础 base 镜像,nginx、tomcat、mysql镜像或者将 Dockerfile 分发给所有开发人员,所有开发人员根据 Dockerfile 创建的容器或者从内部仓库下载的镜像进行开发,达到开发环境的充分一致。若开发过程中需要添加新的软件,只需要向架构师申请修改基础 base 镜像的 Dockerfile即可。
    开发任务结束后,架构师调整 Dockerfile或者Docker 镜像,然后分发给测试部门,测试部门马上就可以进行测试,消除了部署困难等难缠的问题。
    

在这里插入图片描述

注意事项
首先,在开发和测试环境中,推荐使用- v 共享文件夹来存储开发人员的
程序代码,避免频繁打包操作。
其次,利用基础 base 镜像的继承特性来调整镜像的轻微变更。例如当需
要测试程序对不同版本 JDK 的支持情况时,只需改变 base 镜像的 JDK 设置,然
后其他依赖它的镜像在重新创建的过程中就可以自动完成更新。
最后,测试部门应当注意 Docker 以及镜像的版本,并经常对部署后的应
用程序进行性能上的测试。

生产环境使用docker 的问题

如果Docker 出现不可控的风险,是否考虑了备选的解决方案;
 
是否需要对 Docker 容器做资源限制,以及如何限制,如CPU、内存、网
络、磁盘等;
 
目前,Docker对容器的安全管理做得不够完善,在应用到生产环境之前
可以使用第三方工具来加强容器的安全管理。如使用 apparmor 对容器的能力进行限制、使用更加严格的 iptable 规则、禁止 root 用户登录、限制普通用户权限以及做好系统日志的记录;

容器化流程

基于上面提供的内容,我们来尝试搭建一下这种方案。

每一步会单独写一个文档,来学习和了解这种方式

  • 第一步:指定基础的dockerfile文件,搭建基础镜像。

    目标:
    * 了解dockerfile 的文件指令
    * 了解如果创建镜像
    
    
    假设我们的项目是spring boot 工程,需要连接mysql 和 redis 数据库,假定测试环境是linux 环境,通过 nginx 代理,将请求分发到两个tomcat上,也就是说通过两个tomcat 提供服务,那我们需要创建以下这些镜像文件:
    
    jdk+tomcat   一个镜像
    nginx 一个镜像
    mysql  一个镜像
    redis  一个镜像
    
    
    这里有一个疑问
    为什么不把所有服务,都封装成一个镜像,这跟我们之前安装服务有区别吗?
    将多个应用服务解耦到不同容器中,保证了容器的横向扩展和复用。
    应该保证在一个容器中只运行一个进程。
    尽量让每个镜像的用途都比较集中、单一,避免构造大
    而复杂、多功能的镜像;复杂镜像会让后期的维护和修改难以进行。
    容器应该是短暂的:
    通过 Dockerfile 构建的镜像所启动的容器应该尽可能短暂(生命周期短)。「短暂」意味着可以停止和销毁容器,并且创建一个新容器并部署好所需的设置和配置工作量应该是极小的。如果创建一个包含很多服务的镜像,在容器启动和配置方面是很复杂的。
    使用docker来配置和启动服务会更加方便。
    
    参考:https://yeasy.gitbooks.io/docker_practice/introduction/why.html
    
    
    
  • 第二步:搭建私有docker register (仓库)

    目标:
    * 了解如何搭建私有docker 仓库
    
    通常公司的环境都是内网的,开发人员和测试人员是连接不上docker hub 的,就算制定好了镜像,发布到 docker hub 上也是pull不下来的。更何况有时候并不想将配置好的镜像发布到公网上面。
    所以,需要搭建私有的docker仓库,将基础镜像上传到私有docker仓库供其他人下载使用。
    
    
  • 第三步:在测试环境 pull 镜像,将容器启动起来,开发人员在本地开始开发项目。

    目标:
     * 了解容器间的互联和端口映射
    
    这里会涉及到容器间的互联和宿主机与容器的端口映射
    
  • 第四步:将项目提交至测试环境运行测试,并将测试环境同步到线上环境

    目标:
    * 通过修改基础镜像,将镜像部署到线上环境,运行项目
    

在这里插入图片描述

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优: 方案在设计时考虑了可用资源,以最大其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程最大资源利用和风险管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值