Mac上使用docker环境进行C++开发的实践

背景

最近换上了mbp作为开发工具,在mbp上默认的c++环境是clang+LLVM那一套工具链,虽然说是相比gnu更加先进,但是因为我的代码经常需要在linux服务器和本机上跑,而clang和gnu的编译器在编译器参数,api支持等方面还是存在一定差异,最简单的libc++和libstdc++的标准库的不同就能浪费大量的时间在上面做兼容。我想了如下几个方案,并最终采用了docker的方案。

  • 把整个mac的编译环境改成gnu那一套,问题:可能导致mac上一些需要编译的工具出现潜在问题
  • 写代码的时候就考虑clang和gnu环境的兼容性,问题:对不同标准库的api不够熟悉,了解的性价比不高
  • 抛弃本地环境,完全在服务器开发,问题:受到网络环境的影响大,调试不够方便
  • 起一个linux的本地docker作为开发环境(完美)

确定使用docker环境开发后,第二个问题是用什么工具开发,如果你只使用vscode,那么你可以先跳过docker镜像制作的部分,vscode已经提供了c++镜像,只需要安装remote插件,就可以达到几乎开箱即用的效果。但是你如果像我一样调试的时候还是喜欢clion的强大功能,那么你可以先从docker镜像制作看起。

docker镜像制作

在我的docker环境中,我采用了比较新自己也比较熟悉的ubuntu作为基础环境,增加了一些常用工具和方便的连接docker所需要的一些工具。完整的docker环境可以在我的github查看docker-cpp-dev-environment

step0: 在mac上安装docker,直接在官网下载一个dmg,安装好,就能在顶栏看到一个小鲸鱼的标志,运行命令行,docker image ls不会报错,说明安装成功

step1: 首先是dockerfile的编写:

# 基础镜像
FROM ubuntu:20.04
# 作者信息版本信息
LABEL version="v2" \
      maintainer="Sunchao <[email protected]>"

# 可用命令行参数配置的boost版本信息
ARG BOOST_VERSION=1.73.0
ARG BOOST_VERSION_=1_73_0
ENV BOOST_VERSION=${BOOST_VERSION}
ENV BOOST_VERSION_=${BOOST_VERSION_}
ENV BOOST_ROOT=/usr/include/boost
# tzdata直接安装时可能需要手动选择时区,添加该环境变量让其不要通过交互,自动选择
ENV DEBIAN_FRONTEND=noninteractive
# apt换源,加快构建速度
COPY sources.list /etc/apt/sources.list

RUN apt-get update
# 安装openssh 和 rsync是用于clion的远程部署和连接docker开发
RUN apt install -y --no-install-recommends tzdata build-essential cmake gdb openssh-server rsync vim git wget

# 配置 sshd和rsnyc, 允许root登陆 关闭usePAM 允许rsnc
RUN mkdir /var/run/sshd
RUN sed -ri 's/^#PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config &&  sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config && sed -ri 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync

# config rsync service
COPY rsync.conf /etc
# 设置root的密码
RUN echo 'root:000000' |chpasswd
RUN mkdir /root/sync
# install boost
RUN wget --max-redirect 3 --no-check-certificate https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_}.tar.gz
RUN mkdir -p /usr/include/boost && tar zxf boost_${BOOST_VERSION_}.tar.gz -C /usr/include/boost --strip-components=1 && rm *.tar.gz
# 在docker-compose的启动方式中,最后这一步将会启动ssh和rsync服务
COPY entrypoint.sh /sbin
RUN chmod +x /sbin/entrypoint.sh
ENTRYPOINT [ "/sbin/entrypoint.sh&#
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个开源的容器化平台,可以帮助开发人员在不同的环境中快速构建、部署和运行应用程序。使用Docker可以将应用程序及其所有依赖项打包成一个独立的容器,从而实现环境的一致性和可移植性。 要搭建Docker开发环境,你需要以下步骤: 1. 安装Docker:根据你的操作系统,下载并安装适合的Docker版本。Docker官方网站提供了Windows、Mac和Linux的安装包。 2. 配置Docker:安装完毕后,启动Docker,并进行基本的配置。你可以设置镜像加速器、网络代理等。 3. 创建Docker镜像:创建一个Dockerfile文件,定义你的应用程序所需的环境和依赖项。然后使用命令`docker build`来构建镜像。 4. 运行Docker容器:通过运行镜像创建一个容器,并将应用程序部署在其中。使用`docker run`命令来启动容器,并指定端口映射、环境变量等配置。 5. 开发应用程序:在Docker容器中进行应用程序的开发。你可以使用常用的开发工具、编辑器和调试器。 6. 调试和测试:在Docker容器中进行应用程序的调试和测试。你可以使用容器内的调试工具,或者通过与主机机器进行远程调试。 7. 部署应用程序:当应用程序开发完成后,你可以将Docker镜像部署到生产环境中。可以使用容器编排工具,如Docker Compose或Kubernetes来管理多个容器的部署和扩展。 这是一个简单的搭建Docker开发环境的步骤,具体的操作可能会根据你的实际需求和项目而有所不同。希望对你有所帮助!如果你还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值