使用Docker做开发的建议团队工作流

简介:

意义

自从Docker进入到我们的工作流程之后给环境配置框架搭建,持续集成,持续交付方面带来了很多好处,首先相对于虚拟机来说,最直接的好处是带来了更小的镜像,同时程序以容器的方式运行不但启动速度快而且性能也好过虚拟机,同时它的配置可以非常快速的调整。其次对于开发来说,我们整个团队都使用的是Sublime+git的方式进行开发,使用Docker之后无论是什么平台只要有Shell都可以很方便的统一测试&开发环境。

Docker特性的使用

  1. 磁盘挂载(-v)
    一直以来我们在使用Docker过程中都遵循着一个道理Docker只是一个环境他只是运行程序的一种手段。我们不能在docker中持久化数据,无论是文件还是数据库都是不允许的,因为很有可能测试结束之后会丢失数据。用于开发的Docker Image我们需要针对数据持久化新开方便调试使用的数据库,我们需要挂载针对应用的数据库持久化文件夹,当然我们还需要针对脚本进行目录挂载,如果是golang的话运行之前可能要自动化构建golang程序。
  2. 端口映射
    虽然docker给我们提供了link的方法来实现容器之间的链接,但是我们依赖还是使用了最传统的端口映射的方式来进行服务的对外发布。因为我们觉得关系越简单,整个平台的服务就越稳定,虽然链接的这种方式并没有什么不好之处。

工作流程

定制容器准备开发&&运行环境

从Dockerfile开始部署环境,有两个方向上的选择,一种是自己定制操作系统,另外一种是依赖其他人做好的。

先说第一种方法:在我之前的blog中已经有提到,可以大概参考一下。

这种方法缺点主要在于,需要非常了解Linux或者至少做过LFS才能方便自己定制操作系统,要对业务底层依赖有一定了解。因为此方法需要精简image所以需要手动解决依赖问题。对于依赖比较多的情况不适用。

第二种方法,在之前的blog中也有提到过,有详细的过程以及Dockerfile参考。

这种方法构建的image大概100MB+虽然比虚拟机(按G来算)小了很多,但是在迁移分发Image的时候还是要注意(如果你没有自己的Docker Hub)。如果使用文件迁移请用save的方式来分发image,在上面链接的blog中有提到备份迁移的问题。

另外一个注意的地方,如果是用别人的image要注意安全,会不会里面挂了后门之类的,然后要摸清系统配置,准备好代码或可执行二进制文件的挂载位置,数据库持久化文件存放的位置等等都要摸清。最后在运行的时候都要给出挂载方案。

发布之后要做的事

因为Docker只是一个容器而不是项目中的一部分,所以只是项目实现的一种手段,具体应该如何使用它,需要一定的文档支撑,也就是开发业务流程文档。

文档中要详细的提出所有依赖的Service配置文件的位置,配置的状态,持久化目录位置,输出的端口,开发完成之后业务部署的位置这些关于项目的尽量能想到的信息,因为这套容器会跟着项目整个周期中作为基础设施的一部分在运行。

除了配置方面,第二部分是建议的使用方法流程,比如:要说清楚代码是在容器内部编译还是在其他容器中有做好的辅助工具编译,还是有一个独立的服务器(项目比较大的时候需要一个独立的构建服务器,甚至需要一个专门管理构建&&版本的同事),如果是脚本语言写的就不需要这么麻烦了。

项目发布

项目进行到一个阶段之后需要发布,把代码或可执行二进制文件直接构建到image里面就行了。注意先要判断项目是否要使用Docker。

好处总结

在文件持久化方面我们挂载的目录实现了统一,配置文件也实现了统一。

在PHP开发中再也不用担心目录大小写敏感,文件大小写敏感,目录长度限制等因为操作系统不统一的问题。

由于不同项目有不同的限制因素,因此在这里介绍总体的工作流程,项目中涉及到不同的应用服务只需要比较小的调整。


原文发布时间为:2015-06-09

本文来自云栖社区合作伙伴“Linux中国”

目录
相关文章
|
8月前
|
资源调度 前端开发 Shell
[docker] DevContainer高效开发(第二篇):前端开发体验
上面的配置只是最基本的配置,大部分情况我们是需要自定义配置,让容器更符合我们的需求。自定义配置就需要用到 Dockerfile,这个文件是 docker 的配置文件,可以在里面安装软件,配置环境等等。Dockerfile 的语法可以参考 官方文档。然后根据自己的需求编写 Dockerfile# 设置变量,由 .devcontainer.json 中的 args 传入# 指定 node 版本# 设置编码# 设置工作目录# 挂载 volume# 设置 bash 为默认 shell。
208 0
|
2月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
2月前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
3月前
|
存储 持续交付 开发者
掌握Docker容器化:提升开发效率与应用部署
【10月更文挑战第4天】在现代软件开发中,Docker容器化技术因其轻量级、可移植和快速部署的特点,成为提升开发效率和简化部署流程的关键工具。本文介绍了Docker的基本概念、核心组件及其优势,并探讨了如何在开发环境中搭建、微服务架构及CI/CD流程中有效利用Docker,助力软件开发更加高效便捷。
|
4月前
|
持续交付 开发者 Docker
掌握 Docker:容器化技术在现代开发中的应用
Docker 是一个开源容器化平台,使开发者能够将应用程序及其依赖项封装在轻量级容器中,确保跨平台的一致性。本文介绍了 Docker 的基本概念、核心组件及优势,并展示了其在快速部署、一致性、可移植性和微服务架构中的应用。通过示例说明了 Docker 在本地开发环境搭建、服务依赖管理和 CI/CD 流程中的作用,以及多阶段构建、资源限制和网络模式等高级特性。掌握 Docker 可大幅提升开发效率和应用管理能力。
|
5月前
|
容器 C# Docker
WPF与容器技术的碰撞:手把手教你Docker化WPF应用,实现跨环境一致性的开发与部署
【8月更文挑战第31天】容器技术简化了软件开发、测试和部署流程,尤其对Windows Presentation Foundation(WPF)应用程序而言,利用Docker能显著提升其可移植性和可维护性。本文通过具体示例代码,详细介绍了如何将WPF应用Docker化的过程,包括创建Dockerfile及构建和运行Docker镜像的步骤。借助容器技术,WPF应用能在任何支持Docker的环境下一致运行,极大地提升了开发效率和部署灵活性。
167 1
|
5月前
|
机器学习/深度学习 Kubernetes Docker
机器学习开发的灵药:Docker容器
机器学习开发的灵药:Docker容器
|
5月前
|
jenkins 持续交付 开发工具
自动化开发之旅:Docker携手Jenkins,与Git和Tomcat共舞持续集成
【8月更文挑战第13天】在软件开发中,持续集成(CI)通过自动化构建、测试与部署提升效率与稳定性。Docker、Jenkins、Git和Tomcat构成CI的黄金组合:`git push`触发Jenkins作业,利用Docker确保环境一致性,最终将应用部署至Tomcat。首先配置Git Webhooks以触发Jenkins;接着在Jenkins中创建作业并使用Docker插件模拟真实环境;通过Maven构建项目;最后部署至Tomcat。这套流程减少人为错误,提高开发效率,展示了技术的力量与流程的革新。
100 0
|
5月前
|
人工智能 Kubernetes Cloud Native
AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效
AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效
60 0
|
6月前
|
Ubuntu Linux Docker
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决

热门文章

最新文章