C/C++编译时经常需要配置环境,有的时候不想安装在本机上,环境太多容易混乱,安装步骤麻烦,出错也不好撤销修改。我最近在学习Linux C/C++,但是我的电脑是win10系统,正好可以结合vscode+VMware+Docker+SSH做出一套Linux下面的C/C++编译环境,配置方便快捷
安装软件及功能列表
- gcc
- g++
- gdb
- make
- man
- psmisc(killall命令)
- openssh-server
- vsftpd(FTP服务)
编写Dockerfile文件
- 进入到
~目录,创建cpp_env文件夹,创建Dockerfile文件
cd ~
mkdir cpp_dev
cd cpp_dev
vi Dockerfile粘贴以下内容
- 脚本中的developer为账号
- 脚本中的password为密码
# 使用最新的Ubuntu镜像作为基础镜像
FROM ubuntu:22.04
# 禁用SELinux
ENV container SELINUX=disabled
# 更换为阿里云的Ubuntu存储库镜像,以加速更新
RUN sed -i 's/http:\/\/archive.ubuntu.com/http:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list
# 创建SSH目录并更新apt包列表
RUN mkdir /run/sshd && \
apt-get update && \
apt-get install -y gcc g++ gdb make man psmisc openssh-server vsftpd && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 创建一个新用户(这里使用了用户名为bill,您可以更改为您喜欢的用户名)
RUN useradd -m -s /bin/bash bill && \
echo 'bill:bill' | chpasswd && \
usermod -aG sudo bill
# 允许SSH远程连接
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# 配置vsftpd
RUN echo "local_enable=YES" >> /etc/vsftpd.conf && \
echo "write_enable=YES" >> /etc/vsftpd.conf && \
echo "local_umask=022" >> /etc/vsftpd.conf && \
echo "chroot_local_user=YES" >> /etc/vsftpd.conf && \
echo "pasv_enable=YES" >> /etc/vsftpd.conf && \
echo "pasv_min_port=30000" >> /etc/vsftpd.conf && \
echo "pasv_max_port=30009" >> /etc/vsftpd.conf && \
echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf && \
echo "local_root=/home/bill/ftp" >> /etc/vsftpd.conf
# 创建FTP所需目录并设置权限
RUN mkdir -p /var/run/vsftpd/empty && \
chmod 555 /var/run/vsftpd/empty
# 允许外部连接
EXPOSE 22 21 30000-30009
# 启动SSH和FTP服务器
CMD ["/bin/bash", "-c", "/usr/sbin/sshd && /usr/sbin/vsftpd /etc/vsftpd.conf"]打包成Docker镜像
sudo docker build -t my_cpp_env .运行容器
- 所有容器的端口号均设置2200的偏移量,例如SSH端口号为
2222,避免与宿主机冲突 - 设置启动参数
--restart always,容器总是随着主机启动而启动 -v /home/bill:/home/bill将本地主机的/home/bill文件夹映射到容器内的/home/bill文件夹- 容器的22端口(SSH端口)映射到主机的22端口,将20和21端口(FTP端口)映射到主机的20和21端口
,并将30000到30009端口(FTP被动模式端口)映射到主机的30000到30009端口(只用主动模式操作)
sudo docker run -d \
-v /home/bill:/home/bill \
-p 2222:22 \
-p 20-21:20-21 \
--restart always \
--name my_cpp_container \
my_cpp_env- 查看容器日志
sudo docker logs -f my_cpp_container- 删除容器
# 先停止容器再删除
sudo docker container stop my_cpp_container
sudo docker container rm my_cpp_container
# 或者强制删除
sudo docker container rm -f my_cpp_container- 查看容器运行状态
[bill@localhost cppenv]$ sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
205356368e4f my_cpp_env "/usr/sbin/sshd -D" 36 minutes ago Up 36 minutes 0.0.0.0:2222->22/tcp, :::2222->22/tcp my_cpp_container容器正常启动,随后可以通过SSH连接。
容器开机自启
- 在容器运行参数中设置启动参数
--restart always,容器总是随着主机启动而启动 - 设置docker开机自启
sudo systemctl enable docker配置vscode远程连接
安装Remote - SSH插件
- 插件商店搜索
SSH关键字,找到如下插件,进行安装

安装成功后,左侧功能栏会有如下图标:

添加SSH远程连接
- 点击+添加SSH连接

在Enter SSH Connection Command连接命令文本框中输入
# 用户名、IP地址、端口号改成自己定义的即可
ssh bill@192.168.149.137 -p 2222在弹出的custom SSH configuration file中选择第一个备选项即可,这个配置文件存到了当前用户的.ssh文件夹中

Host 192.168.149.138(Docker)
HostName 192.168.149.138
User bill
Port 2222连接
- 点击➡小箭头进行连接

- 连接成功
测试编译

- 编译成功,环境配置完成
提供云存储服务