Docker+Vscode搭建(本地/远程)开发环境
日常开发中,环境配置一直是令人头疼的问题 ------ 不同机器的依赖版本不一致、本地环境与生产环境差异大、多语言开发环境冲突...... 而 Docker+VSCode 的组合能完美解决这些痛点:用 Docker 封装统一的开发环境,通过 VSCode 远程连接实现本地 / 远程一致的开发体验。本文就手把手教你搭建基于 Ubuntu 24.04 的多语言(Python/Rust等)开发容器,并配置 VSCode 远程开发环境。
一前置准备:安装docker环境
首先需要在本地环境安装 Docker 服务,支持 Linux、Windows、MacOS 三大系统: Linux:直接通过系统包管理器安装(如apt install docker.io),安装后记得启动 Docker 服务并配置用户权限(避免每次用sudo); Windows/MacOS:下载Docker Desktop (https://www.docker.com/products/docker-desktop/),安装后启动即可(自动配置环境变量和服务)。 验证安装是否成功:
docker --version # 输出Docker版本号即成功
docker compose version # 验证Compose工具(新版Docker已内置)
二、定制开发镜像:封装统一环境
-
拉取基础镜像 先拉取 Ubuntu 24.04 官方镜像,作为定制的基础:
docker pull ubuntu:24.04
-
编写Dockerfile 定制镜像 在空目录下创建Dockerfile文件,复制以下内容(或者更加自己的需求在RUN 修改自己需要安装的服务环境): 安装基础服务及相关开发运行环境。
FROM ubuntu:24.04
ENV WORKSPACE=/data/workspace
ENV TMP_DIR=/data/temp
ARG TMP_DIR=/data/temp安装基础依赖 + SSH 服务 + 工具链(移除 zsh,强化 bash)
RUN apt update &&
apt install -y
# 基础工具(移除 zsh,保留 bash 并设为默认)
curl unzip bash git wget
openssh-server
vim
webp
locales
fonts-noto-cjk
tzdata
# Python 环境依赖
python3 python3-pip python3-venv python3-dev python3-full
python3-setuptools python3-wheel pipx
# Rust 编译依赖
build-essential libssl-dev pkg-config &&
# 设置 bash 为默认 shell(替代 zsh)
chsh -s /bin/bash &&
# 清理缓存减小镜像体积
apt clean &&
rm -rf /var/lib/apt/lists/*配置 SSH 服务(保持原有配置)
RUN mkdir /var/run/sshd
&& sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
&& sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
&& sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
&& sed -i 's/#Port 22/Port 2234/' /etc/ssh/sshd_config生成中文 locale 并设置字符集
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen &&
sed -i '/zh_CN.UTF-8/s/^# //g' /etc/locale.gen &&
locale-gen字符集环境变量
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/TZ /etc/localtime && echo TZ > /etc/timezone========== Python 环境增强(使用虚拟环境规避 PEP 668 限制) ==========
创建 Python 虚拟环境并激活(全局生效)
RUN mkdir -p {WORKSPACE}/.venv && \ python3 -m venv {WORKSPACE}/.venv &&
# 激活虚拟环境的环境变量(仅写入 bashrc,移除 zshrc)
echo ". {WORKSPACE}/.venv/bin/activate" >> /root/.bashrc && \ # 给虚拟环境脚本添加执行权限 chmod +x {WORKSPACE}/.venv/bin/activate配置 pip 镜像源(国内加速)
RUN mkdir -p /root/.config/pip &&
echo "[global]" > /root/.config/pip/pip.conf &&
echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> /root/.config/pip/pip.conf &&
echo "trusted-host = pypi.tuna.tsinghua.edu.cn" >> /root/.config/pip/pip.conf激活虚拟环境并更新 pip + 安装常用包
RUN . ${WORKSPACE}/.venv/bin/activate &&
python3 -m pip install --upgrade pip &&
pip install numpy pandas requests flask fastapi uvicorn black isort pytest========== Rust 环境安装 ==========
安装 rustup(Rust 官方安装工具)
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y &&
# 手动加载 rustup 环境变量
. /root/.cargo/env &&
# 立即更新 Rust 并设置默认版本
rustup update stable &&
rustup default stable &&
# 安装常用 Rust 组件
rustup component add rustfmt clippy rust-analyzer配置 Rust 环境变量(让容器运行时可用 rustc/cargo)
ENV PATH="/root/.cargo/bin:${PATH}"
设置 Rust 镜像源(国内加速)
RUN mkdir -p /root/.cargo &&
echo "[source.crates-io]" > /root/.cargo/config.toml &&
echo 'replace-with = "rsproxy"' >> /root/.cargo/config.toml &&
echo "[source.rsproxy]" >> /root/.cargo/config.toml &&
echo 'registry = "https://rsproxy.cn/crates.io-index"' >> /root/.cargo/config.toml &&
echo "[registries.rsproxy]" >> /root/.cargo/config.toml &&
echo 'index = "https://rsproxy.cn/crates.io-index"' >> /root/.cargo/config.toml &&
echo "[net]" >> /root/.cargo/config.toml &&
echo 'git-fetch-with-cli = true' >> /root/.cargo/config.toml设置工作目录
WORKDIR $WORKSPACE
暴露 SSH 端口
EXPOSE 2234
启动命令:bash 执行,激活虚拟环境后启动 SSH 服务
CMD ["/bin/bash", "-c", ". ${WORKSPACE}/.venv/bin/activate && /usr/sbin/sshd -D"]
-
构建镜像 根据dockerfile制作镜像:在Dockerfile同级目录下执行这个目录,生成devbox:latest镜像
docker build -t devbox:latest .
构建完成后,执行docker images可看到devbox:latest镜像,说明构建成功。

三、配置容器启动:Docker Compose
编写一个名为docker-compose.yml的文件(默认名字),内容如下,指定相关的启动信息
services:
devbox:
image: devbox:latest # 使用刚构建的镜像
container_name: devbox # 容器名称,方便管理
#network_mode: host window和macOs不能使用host模式,Mac/Windows 的 Docker Desktop 基于 Linux 虚拟机,host网络模式无效
restart: always # 宿主机重启后自动启动容器
working_dir: /root/ # 容器默认工作目录
volumes:
# 挂载本地目录到容器内,实现代码同步(关键!)
- ${PWD}/:/root/workspace/
tty: true # 保持终端连接
stdin_open: true # 允许标准输入
# 端口映射(核心:宿主机端口→容器端口)
# 注意:Mac/Windows不建议用network_mode: host,bridge模式更稳定
ports:
- "2234:2234" # SSH端口映射,用于VSCode远程连接
# 可按需添加其他端口映射,例如:
# - "8080:8080" # Web服务端口
# - "8000:8000" # FastAPI服务端口
# 可选:增加容器资源限制
# deploy:
# resources:
# limits:
# cpus: '2'
# memory: 4G
四、启动开发容器
在docker-compose.yml同级目录下执行如下命令启动容器,容器名字:devbox
docker compose up -d
-
-d:后台运行容器,不占用当前终端;
-
启动后执行docker ps,可看到devbox容器状态为Up,说明启动成功。

-
设置容器 root 密码(首次连接必备) 启动容器后,需要设置 root 密码才能通过 SSH 连接:
进入容器内部
docker exec -it devbox bash
设置root密码(输入两次相同密码即可)
passwd root
退出容器
exit
五、搭建vscode远程连接开发环境
容器启动后,即可通过 VSCode 的「远程 SSH」插件连接容器,实现本地编辑、容器内运行的开发。
- 安装 VSCode 插件 打开 VSCode,安装以下核心插件:
Remote - SSH:实现远程 SSH 连接(必装);
-
配置SSH远程连接信息 点击左下角连接,然后配置SSH主机:

根据实际主机地址进行如下内容填写,保存。

-
启动远程连接 配置完成后,重新打开vscode,选择对应docker地址进行连接:

输入前面设置的密码:

成功连接上docker容器环境:

六、远程服务器部署(扩展)
如果需要在远程服务器搭建相同环境,只需:
-
将Dockerfile、docker-compose.yml上传到远程服务器;
-
服务器安装 Docker 环境后,执行docker build -t devbox:latest .和docker compose up -d;
-
VSCode 连接时,将localhost替换为远程服务器 IP,其余步骤一致。
七、总结
通过 Docker 封装统一的开发环境,结合 VSCode 远程 SSH 连接,我们实现了:
-
环境一致性:本地 / 远程服务器使用相同的镜像,避免 "本地能跑、线上报错";
-
多语言兼容:Python/Rust 环境隔离,无需担心系统依赖冲突;
-
便捷部署:一行命令启动 / 停止环境,跨平台适配 Linux/Mac/Windows。 这套方案既适合个人开发,也可团队共享镜像,大幅降低环境配置成本,让我们专注于代码本身开发工作。