0

0

如何通过 VSCode 进行 Docker 容器内开发?

狼影

狼影

发布时间:2025-09-22 20:43:01

|

896人浏览过

|

来源于php中文网

原创

通过 VSCode 的 Remote - Containers 扩展,可在 Docker 容器内进行开发,确保环境一致、隔离性强。首先安装 Docker 和 VSCode 扩展,再通过命令生成 .devcontainer 配置文件,选择预设或自定义 Dockerfile。配置 devcontainer.json 中的 image、extensions、settings、forwardPorts、postCreateCommand 等关键选项,实现自动化环境搭建。容器启动后,项目在隔离环境中运行,支持端口转发、扩展自动安装和用户权限设置。常见问题包括文件 I/O 性能差(可通过 WSL2 或匿名卷优化)、调试配置缺失(需添加对应调试扩展)、文件权限冲突(使用 remoteUser 调整)和构建过慢(利用缓存、多阶段构建或预构建镜像)。结合 docker-compose 可管理多服务项目,提升协作效率与可移植性。

如何通过 vscode 进行 docker 容器内开发?

通过 VSCode 进行 Docker 容器内开发,核心在于利用 VSCode 强大的“Remote - Containers”扩展。它允许你直接在 Docker 容器内部打开任何文件夹或仓库,将容器变成一个功能完备的开发环境,从而确保项目环境的一致性和隔离性。

解决方案

要开始通过 VSCode 进行 Docker 容器内开发,你首先需要确保本地环境安装了 Docker Desktop(或者 Linux 上的 Docker Engine)和 VSCode。

  1. 安装 VSCode 扩展: 在 VSCode 中搜索并安装 “Remote - Containers” 扩展。这是实现容器内开发的关键。
  2. 准备项目: 打开你的项目文件夹。如果你的项目还没有
    .devcontainer
    文件夹,VSCode 会提示你添加。你可以通过命令面板(
    Ctrl+Shift+P
    Cmd+Shift+P
    )运行
    Remote-Containers: Add Dev Container Configuration Files...
    命令来生成。
  3. 选择配置: VSCode 会根据你的项目类型(例如 Node.js, Python, Java 等)推荐一个基础的
    devcontainer.json
    配置。你可以选择一个预设的定义,或者选择一个
    Dockerfile
    来从头开始构建。
  4. 重新打开在容器中: 一旦
    devcontainer.json
    文件生成,VSCode 会提示你“Reopen in Container”。点击这个按钮,或者再次通过命令面板运行
    Remote-Containers: Reopen in Container
  5. 构建与启动: VSCode 会根据
    devcontainer.json
    的配置,自动构建或启动一个 Docker 容器,并将你的项目文件挂载进去。这个过程可能需要一些时间,因为它需要下载基础镜像、安装扩展和运行配置中定义的命令。
  6. 开始开发: 容器启动并连接成功后,你的 VSCode 窗口会显示你正在一个远程容器中工作。你可以在集成终端中运行命令,安装依赖,调试代码,就好像你在本地机器上一样。所有的开发工具和依赖都已经在容器里准备好了。

为什么我需要容器内开发?它解决了什么痛点?

我个人觉得,最头疼的就是新项目环境配置,或者不同项目依赖冲突。容器开发简直是救星。它解决了几个核心痛点,让开发体验变得异常顺滑:

首先是环境一致性。相信每个开发者都听过那句“在我的机器上能跑啊!”。容器开发彻底终结了这种争论。每个团队成员,甚至是 CI/CD 流程,都在一个完全相同的、预配置好的环境里工作。这意味着你不会再因为操作系统差异、库版本不一致或者某个环境变量没设对而浪费时间。

其次是快速上手和隔离性。新入职的同事或者要切换到一个新项目时,不再需要花几个小时甚至几天去安装各种工具和依赖。一个

git clone
,然后
Reopen in Container
,几分钟内就能开始写代码。而且,每个项目都有自己的独立容器环境,彼此之间完全隔离,再也不用担心全局安装的某个包会影响到另一个项目了。我个人非常喜欢这种“一次性”的开发环境,用完就扔,下次再开还是干净的。

还有就是资源管理和可移植性。你可以为每个容器配置特定的 CPU、内存限制,避免一个开发环境占用过多宿主机资源。当需要把项目迁移到另一台机器,或者分享给别人时,整个开发环境都打包在代码仓库里,非常方便。这就像是给你的项目配了一个专属的、随时可以复刻的“开发舱”。

devcontainer.json
文件到底怎么配置,有哪些常用选项?

我刚开始用的时候,这个文件让我有点摸不着头脑,但一旦理解了它的作用,简直是神器。

devcontainer.json
是容器内开发的核心配置文件,它告诉 VSCode 如何构建和配置你的开发容器。它本质上是一个 JSON 文件,放在你项目根目录下的
.devcontainer
文件夹里。

一些我常用的、也是最关键的配置项包括:

  • image
    Dockerfile
    这是容器的基础。你可以直接指定一个 Docker 镜像(如
    mcr.microsoft.com/devcontainers/typescript-node:18
    ),或者指向一个自定义的
    Dockerfile
    (如
    "dockerFile": "Dockerfile"
    ),这样你可以更精细地控制容器的构建过程,比如安装特定的系统依赖。
  • extensions
    一个数组,列出你希望在容器中自动安装的 VSCode 扩展 ID。这非常有用,可以确保团队成员都有相同的代码格式化、Linting 和调试工具。比如:
    "extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
  • settings
    允许你为容器内的 VSCode 实例设置特定的用户配置。这些设置会覆盖你的全局 VSCode 用户设置,但只在容器内生效。例如,你可以设置终端的默认 shell:
    "settings": { "terminal.integrated.defaultProfile.linux": "bash" }
  • forwardPorts
    如果你的应用在容器内监听某个端口(比如前端的 3000 端口,或者后端 API 的 5000 端口),你可以通过这个数组将容器内的端口映射到宿主机上,这样你就能在浏览器或其他客户端访问它们。例如:
    "forwardPorts": [3000, 5000]
  • postCreateCommand
    postStartCommand
    这两个是运行命令的利器。
    postCreateCommand
    在容器首次创建后运行,通常用于安装项目依赖(如
    npm install
    pip install
    )。
    postStartCommand
    则在容器每次启动后运行。合理利用它们可以自动化很多环境准备工作。
  • mounts
    用于更高级的卷挂载配置,如果你需要挂载除了项目目录以外的其他目录,或者需要自定义挂载选项时会用到。
  • remoteUser
    指定容器内 VSCode 进程和终端运行的用户。默认是
    root
    ,但为了安全和权限管理,你可能希望指定一个非特权用户。

一个简单的

devcontainer.json
看起来可能像这样:

ISite企业建站系统1.2.3
ISite企业建站系统1.2.3

ISite企业建站系统是为懂点网站建设和HTML技术的人员(例如企业建站人员)而开发的一套专门用于企业建站的开源免费程序。本系统采用了全新的栏目维护模式,内容添加过程中,前后台菜单是一样的,需要维护前台某个栏目的内容,只需要进后台相应栏目即可,一般的企业人员只需要查看简易的说明就可以上手维护网站内容。通过自由度极高的模板系统,可以适应大多数情况的界面需求,后台带有标签生成器,建站只需要构架好HTM

下载
{
  "name": "Node.js Development Container",
  "image": "mcr.microsoft.com/devcontainers/typescript-node:18",
  "extensions": [
    "dbaeumer.vscode-eslint",
    "esbenp.prettier-vscode",
    "ms-vscode.vscode-typescript-next"
  ],
  "settings": {
    "terminal.integrated.defaultProfile.linux": "bash"
  },
  "forwardPorts": [3000, 5000],
  "postCreateCommand": "npm install",
  "customizations": {
    "vscode": {
      "settings": {
        "editor.formatOnSave": true
      }
    }
  }
}

容器内开发有哪些常见问题和优化技巧?

容器内开发虽然强大,但在实际使用中也会遇到一些挑战,不过都有相应的优化技巧来解决。

性能问题,尤其是文件 I/O 慢: 我记得有次在 Mac 上用 Docker Desktop,文件 I/O 慢得想摔电脑。这主要是因为 Docker Desktop 在 macOS 和 Windows 上,宿主机和容器之间的文件共享性能不如 Linux 原生。

  • 优化技巧:
    • Windows 用户: 强烈建议开启 WSL2,并将项目代码放在 WSL2 文件系统内。Docker Desktop 与 WSL2 的集成非常出色,文件 I/O 性能会大幅提升。
    • macOS 用户: 确保 Docker Desktop 分配了足够的资源。对于大型项目,考虑将
      node_modules
      target
      等编译产物目录通过
      devcontainer.json
      中的
      mounts
      配置为匿名卷,避免它们频繁地在宿主机和容器之间同步。
    • 优化
      Dockerfile
      保持镜像精简,利用 Docker 的构建缓存,减少不必要的层。

调试复杂性: 刚开始用的时候,总觉得调试怪怪的,后来发现是容器里没装对应的调试器。

  • 优化技巧: 确保你的
    devcontainer.json
    extensions
    列表包含了你项目语言所需的调试器扩展。例如,Python 项目需要
    ms-python.python
    ,Node.js 项目通常内置了调试功能,但可能需要额外的配置。同时,你的
    launch.json
    文件也需要针对容器环境进行适配,确保它能正确地在容器内启动调试会话。

文件权限问题: 有时候会遇到容器内创建的文件,在宿主机上权限不对,或者宿主机上的文件在容器内无法修改。

  • 优化技巧:
    devcontainer.json
    中使用
    remoteUser
    配置。很多基础镜像会创建一个非 root 用户(如
    node
    vscode
    ),你可以指定 VSCode 在容器内以这个用户运行。或者,如果你的宿主机和容器用户 ID 不一致导致问题,可以尝试在
    Dockerfile
    postCreateCommand
    中调整文件权限。

构建时间过长: 每次重新构建容器都要等很久,特别是当项目依赖很多时。

  • 优化技巧:
    • 利用 Docker 缓存: 优化
      Dockerfile
      的层顺序,将不经常变动的依赖安装放在前面。
    • 多阶段构建: 对于需要编译的语言(如 Go、Java),使用多阶段构建,只将最终的运行时产物复制到最终镜像中,减少镜像大小和构建时间。
    • 预构建镜像: 对于大型或复杂的开发环境,可以考虑定期构建一个包含所有基础依赖的自定义镜像,然后让
      devcontainer.json
      直接使用这个预构建的镜像。

网络访问和端口冲突: 容器内服务需要访问外部网络,或者多个容器服务之间需要通信。

  • 优化技巧:
    • forwardPorts
      这是将容器内端口映射到宿主机的最直接方式。
    • docker-compose.yml
      如果你的项目包含多个服务(例如一个前端容器和一个后端 API 容器),使用
      docker-compose.yml
      来定义和管理这些服务会更方便。
      devcontainer.json
      可以引用
      docker-compose.yml
      文件,让 VSCode 在启动开发容器时,同时启动所有相关的服务。

通过这些技巧,容器内开发会变得更加顺畅和高效。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

419

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

339

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

415

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

761

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

349

2025.07.23

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
go语言零基础开发内容管理系统
go语言零基础开发内容管理系统

共34课时 | 2.6万人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 7.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号