Docker 镜像的优点
过去我们开发应用都是在本地搭建各种环境,然后进行开发,最后部署到到服务器上,但是因为环境的不同,往往导致出现各种问题,并且调试起来也是相当的麻烦。
现在我们可以通过创建一个带有预安装依赖项和工具(如编译器、调试器等)的 docker 镜像,然后在镜像容器中进行开发调试,最后直接部署构建容器即可。
这个镜像将成为开发人员本地的服务器和 CI/CD 服务器,也就是说,将不会出现“它在我的机器上工作,但在 CI 上失败!”的问题。
由于构建在容器内运行,它不受任何单个开发人员本地环境的环境变量、工具或设置的影响,这意味着环境变得孤立。任何开发人员使用的环境都是一样的。
理想情况下,Docker 镜像会被正确地标记一些有意义的版本名称;它允许用户通过从注册表中提取正确的映像来在环境之间跳转。即使镜像已经从注册中心移除,但是因为 docker 镜像是从 Dockerfiles 建立的,因此,我们总是可以从旧的 Dockerfile 重新构建映像。此外,因为我们随时通过 git 进行版本管理 Dockerfile,所以对于环境的构建永远都会非常的轻松。
Dockerfile 文件
c/c++的镜像配置非常简单,我们只需要从基础镜像 ubuntu 来进行配置即可,通过 apt-get install 安装 c 开发环境即可。如果需要一些数据库文件,我们可以添加到 dockerfile 文件中,当然,我们也可以通过 docker-compose 进行编排,添加一个 redis 的容器,然后网络关联彼此。
此外,我们还可以通过 gcc 这个镜像直接进行构建,可以不需要在安装 c 的开发环境。
当然,我们可以将编译构建命令写入到 Dockerfile 文件中,这样我们直接运行容器就可以编译生成可执行文件。
下面是具体的 Dockerfile 文件内容。
安装调试工具
目前的镜像只是包含编译工具,但是并没有调试工具,我们需要安装 gdb 工具来进行代码的调试,因此我们需要修改 Dockerfile 来引入 gdb 工具。
总结
因为容器的出现,让我们的环境搭建变得非常容易,而且我们再也不用担心因为某种原因导致环境破坏了,如果容器受损了,我们只需要重新启动一个新的容器即可。
通过文件的映射,我们可以在本地编辑直接编辑文件,然后映射到容器中,当然我们也可以直接在容器中修改,但是最好添加一个映射,这样,当我们的容器销毁的时候,我们的代码源文件还在本地保存。
镜像文件除了可以从官网进行下载,也可以自己去定义,特别是当你需要一个特有的环境的时候,你就可以选择构建自己的本地镜像。
此外,我们在 Dockerfile 中是可以执行命令的,比如一些依赖的安装,都可以在 Dockerfile 中指定运行安装。
另外,构建镜像只需要第一次从网络下载,之后就会运行本地缓存,并且容器运行起来非常的快,只需要几秒钟即可。