Docker+Vscode搭建(本地/远程)开发环境

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 Desktophttps://www.docker.com/products/docker-desktop/),安装后启动即可(自动配置环境变量和服务)。 验证安装是否成功:

复制代码
docker --version  # 输出Docker版本号即成功
docker compose version  # 验证Compose工具(新版Docker已内置)

二、定制开发镜像:封装统一环境

  1. 拉取基础镜像 先拉取 Ubuntu 24.04 官方镜像,作为定制的基础:

    docker pull ubuntu:24.04

  2. 编写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"]

  3. 构建镜像 根据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」插件连接容器,实现本地编辑、容器内运行的开发。

  1. 安装 VSCode 插件 打开 VSCode,安装以下核心插件:

Remote - SSH:实现远程 SSH 连接(必装);

  1. 配置SSH远程连接信息 点击左下角连接,然后配置SSH主机:

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

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

输入前面设置的密码:

成功连接上docker容器环境:

六、远程服务器部署(扩展)

如果需要在远程服务器搭建相同环境,只需:

  1. 将Dockerfile、docker-compose.yml上传到远程服务器;

  2. 服务器安装 Docker 环境后,执行docker build -t devbox:latest .和docker compose up -d;

  3. VSCode 连接时,将localhost替换为远程服务器 IP,其余步骤一致。

七、总结

通过 Docker 封装统一的开发环境,结合 VSCode 远程 SSH 连接,我们实现了:

  • 环境一致性:本地 / 远程服务器使用相同的镜像,避免 "本地能跑、线上报错";

  • 多语言兼容:Python/Rust 环境隔离,无需担心系统依赖冲突;

  • 便捷部署:一行命令启动 / 停止环境,跨平台适配 Linux/Mac/Windows。 这套方案既适合个人开发,也可团队共享镜像,大幅降低环境配置成本,让我们专注于代码本身开发工作。

相关推荐
用户21991679703912 小时前
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
后端·github
用户47949283569153 小时前
node_modules 太胖?用 Node.js 原生功能给依赖做一次大扫除
前端·后端·node.js
开心就好20253 小时前
苹果iOS设备免越狱群控系统完整使用指南与应用场景解析
后端
ss2733 小时前
SpringBoot+vue养老院运营管理系统
vue.js·spring boot·后端
用户8356290780513 小时前
使用 C# 高效解析 PDF 文档:文本与表格提取实战指南
后端·c#
zhangyifang_0093 小时前
Spring中的BeanFactory类
java·后端·spring
掘金一周3 小时前
【用户行为监控】别只做工具人了!手把手带你写一个前端埋点统计 SDK | 掘金一周 12.18
前端·人工智能·后端
开心就好20253 小时前
iOS App 加固方法的实际应用,安全不再只是源码问题
后端
冒泡的肥皂4 小时前
AI小应用分享
人工智能·后端