如何基于Docker进行开发?

最近尝试使用Docker,但是苦恼于怎么在项目中使用Docker来进行开发。官方文档读了一部分,但还没有找到相关的,恳请熟手指导下。比如我有一个项目,需要依赖mysql, tomcat, 和LLVM(一个第三方函数库), tensorflow(一个关于 ai的库)。 那么我从网上下了4 images, 每个image都是只包含一个依赖的,那么这种情况下我需要如何去开发呢? 感觉应该是我自己新建一个docker, 用来存储我自己的应用,然后使用4个下载下来的docker images…
关注者
275
被浏览
10,013

9 个回答

一般来说Docker的组织方式是一个进程启动一个docker容器,所以如果是进程内调用(调用第三方库)应该在同一个容器中,进程外调用(调用外部服务如mysql)应当分到多个容器中。
进程内调用关键在于定制镜像,也就是使用docker build和dockerfile,它相当于启动一个临时的容器,在里面运行一组脚本,然后保存容器的存储层级为一个新镜像。一般从一个基础镜像开始,用apt-get或者yum或者curl或者maven之类下载安装依赖项,用add命令添加本地文件,用cmd设置启动使用的命令行。
进程外调用关键在于将多个容器启动到同一网络内,一般可以使用docker compose
先简单回答一下
先说docker 解决了什么问题:通常,一个应用会依赖很多环境,这个环境包括硬件,操作系统,函数库,网络结构,其他通过网络的服务。。。由此而来就引起部署上面的问题,每次部署都需要保证环境先准备好。大规模部署的时候重复劳动很严重。当环境变化的时候,迁移很麻烦。如果还有遗留系统,最开始的开发人员都不在了,更麻烦。运维人员面对一堆应用,出了问题,会非常抓狂,因为要了解的细节太多了。
所以,docker就是来解决这些问题。docker把环境有关的依赖,全部放在一个镜像里面,这个镜像不论安装在哪里,都是开箱可用out-of-box,需要配置的通常是网络端口,存储位置等一些简单的配置。
现在说说如何用docker开发
1.因为docker是主要解决部署问题,所以平时开发当中,以前怎么开发,现在还是怎么开发。
2.如果开发之中,需要一些服务,比如redis,那么搞一个虚拟机,装docker,然后docker run redis -p 6379 --always 就可以,很方便。
3.部署的话,需要把你的应用搞出一个镜像,镜像里装好你的代码和静态库,象llvm这些库,还有tomcat,就应该装在镜像里。 如果需要依赖的网络服务,比如mysql,那么就是启动一个容器,docker run mysql.......需要的服务多的话,就一个个创建出容器,并且让应用可以访问到这些容器的服务端口。
4。有些服务对硬件也有要求,比如tensor flow要性能的话,需要gpu资源,那么最好是安装到裸机,把gpu资源也分配个tenserflow的容器。
5.至于docker-composer,你可以用,也可以不用,composer只是把几个服务打包运行起来。