深圳幻海软件技术有限公司 欢迎您!

使用容器快速配置C/C++开发调试环境

2023-02-28

对于很多新人来说,学习一门编程语言最难的部分可能就是环境的搭建,因为不同操作系统还有网络的原因,很多时候一个环境搭建就劝退了很多新人,但是随着容器化的出现,现在这种问题完全不存在了,因为环境的搭建可以通过容器分分钟完成,我们需要做的就是把配置文件复制过来,然后运行docker容器即可。Docker镜

对于很多新人来说,学习一门编程语言最难的部分可能就是环境的搭建,因为不同操作系统还有网络的原因,很多时候一个环境搭建就劝退了很多新人,但是随着容器化的出现,现在这种问题完全不存在了,因为环境的搭建可以通过容器分分钟完成,我们需要做的就是把配置文件复制过来,然后运行 docker 容器即可。

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 文件内容。

# Get the base Ubuntu image from Docker Hub
FROM ubuntu:latest
# Update apps on the base image
RUN apt-get -y update && apt-get install -y
# Install the Clang compiler
RUN apt-get -y install clang vim
# Specify the working directory
WORKDIR /usr/src/dockertest1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
# Get the GCC preinstalled image from Docker Hub
FROM gcc:4.9
# Specify the working directory
WORKDIR /usr/src/dockertest1
  • 1.
  • 2.
  • 3.
  • 4.
docker build -t mygcc:local .
  • 1.
docker run -it -d -v /home/user/project:/usr/src/dockertest1 mygcc:local
/bin/bash
  • 1.
  • 2.

安装调试工具

目前的镜像只是包含编译工具,但是并没有调试工具,我们需要安装 gdb 工具来进行代码的调试,因此我们需要修改 Dockerfile 来引入 gdb 工具。

# Get the base Ubuntu image from Docker Hub
FROM ubuntu:latest
# Update apps on the base image
RUN apt-get -y update && apt-get install -y
# Install the Clang compiler
RUN apt-get -y install clang vim gdb
# Specify the working directory
WORKDIR /usr/src/dockertest1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

总结

因为容器的出现,让我们的环境搭建变得非常容易,而且我们再也不用担心因为某种原因导致环境破坏了,如果容器受损了,我们只需要重新启动一个新的容器即可。

通过文件的映射,我们可以在本地编辑直接编辑文件,然后映射到容器中,当然我们也可以直接在容器中修改,但是最好添加一个映射,这样,当我们的容器销毁的时候,我们的代码源文件还在本地保存。

镜像文件除了可以从官网进行下载,也可以自己去定义,特别是当你需要一个特有的环境的时候,你就可以选择构建自己的本地镜像。

此外,我们在 Dockerfile 中是可以执行命令的,比如一些依赖的安装,都可以在 Dockerfile 中指定运行安装。

另外,构建镜像只需要第一次从网络下载,之后就会运行本地缓存,并且容器运行起来非常的快,只需要几秒钟即可。