docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker+Vscode本地/远程搭建

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

作者:Linux编程用C

本文介绍了使用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已内置)

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

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

docker pull ubuntu:24.04 
  1. 编写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"]
  1. 构建镜像 根据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 
# 进入容器内部
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 连接,我们实现了:

到此这篇关于Docker+Vscode搭建(本地/远程)开发环境的文章就介绍到这了,更多相关Docker+Vscode本地/远程搭建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文