Docker搭建C/C++开发环境
构建镜像
编写Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33# 1. 基础系统
FROM ubuntu:22.04
# 2. 换国内源 + 装依赖(如果公司内网有 apt 代理,把 sed 行删掉即可)
RUN sed -i 's@http://.*.ubuntu.com@http://mirrors.aliyun.com@g' /etc/apt/sources.list && \
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
# 编译工具链
gcc g++ clang make cmake ninja-build gdb \
# 常用库
libboost-all-dev libssl-dev libcurl4-openssl-dev \
# SSH 服务
openssh-server \
# 其他小工具
git vim rsync \
&& rm -rf /var/lib/apt/lists/*
# 3. 配置 SSH:root 密码 123456,允许 root 登录,加快连接
RUN echo 'root:123456' | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's@#PasswordAuthentication yes@PasswordAuthentication yes@' /etc/ssh/sshd_config
# 4. 让 bash 自动补全忽略大小写(仅 root 用户)
RUN echo 'set completion-ignore-case on' >> /root/.inputrc
# 5. 工作目录
WORKDIR /workspace
RUN chmod 777 /workspace
# 6. 暴露端口 & 启动脚本
EXPOSE 22
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD ["/entrypoint.sh"]编写一个sh脚本,命名为entrypoint.sh
1
2
3
4
5
# 首次启动生成 host key,避免 ssh 客户端报警
ssh-keygen -A
# 前台跑 sshd,容器才不会退出
exec /usr/sbin/sshd -D构建镜像
1
2# 使用当前目录下的Dockerfile构建镜像,命名为cpp-dev-ubuntu:latest
docker build -t cpp-linux-amd64 .
启动容器
启动容器
1
docker run -it -p 2222:22 -v C:\Users\RedTeamer\docker-volu\cpp-dev-ubuntu:/workspace -w /workspace --name cpp-amd64-linux cpp-linux-amd64:latest bash
docker run -it:创建并启动一个容器,启动之后进入虚拟终端(进入容器,可以输入命令)-p:端口映射。将宿主机的2222端口和容器内的22端口进行映射,其他地方可以直接通过宿主机的2222端口进入到容器内的22端口(即ssh服务)-v:磁盘映射。将宿主机的C:\Users\RedTeamer\docker-volu\cpp-dev-ubuntu目录和容器内的/workspace进行映射,任何一端发生变化,另一端都能实时同步(里用的是文件共享机制,注意,windwos上默认只能映射到家目录及其子目录中,其他地方默认没有权限)-w:启动容器之后,默认进入/workspace目录--name:给常见的容器命名为cpp-amd64-linuxcpp-linux-amd64:latest:指定根据哪个进行创建容器bash:进入容器后默认执行的命令,配合前面的-it使用表示进入容器后,默认进入到bash终端,有的容器可能没有bash,而是sh或者其他。
进入容器,启动ssh服务、根据需要配置其他工具
1
2
3
4
5
6
7
8
9
10
11启动ssh服务
service ssh status
service ssh start
service ssh status
安装网络工具
apt-get udpate
apt-get install net-tools iproute2
检查22端口是否开放
ss -tlpna|grep 22
CLion配置远程开发环境
在设置界面中,搜索ssh,Tools > SSH Configurations,新建一个配置,设置ssh为密码登录(Username:root, Password:123456),点击Test Connection,连接成功(别忘了Apply)!

在设置界面中,搜索toolchains,Build > Execution > Deployment,新建一个配置(点击加号,选择Remote Host),在Credentials中选择刚刚配置的SSH,就能自动识别编译工具。最后,将这个配置项移动到第一位(第一个位置是Default的,也可以不移动),Apply!

设置界面中,搜索cmake,Build > Execution > Deployment,修改默认的配置或者新建一个配置,构建类型Debug或者Release都行,Toolchain选择刚配置的工具链,Generator让CMake决定,最后Apply

新建一个C项目进行测试
CMake执行成功,文件保存在容器内的
/tmp/tmp.pEK4Ow1Uno/CTest/cmake-build-cpp-linux-amd64-docker
点击构建,编译成功 & 链接成功,文件保存在
CMakeFiles/CTest.dir/main.c.o和/tmp/tmp.pEK4Ow1Uno/CTest/cmake-build-cpp-linux-amd64-docker/CTest
进容器查看,至此,艺术已成~!

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 少欣安全!