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 在启动开发容器时,同时启动所有相关的服务。

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

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

707

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

625

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

734

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

616

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1234

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

573

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

695

2023.08.11

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

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

精品课程

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

共34课时 | 2.5万人学习

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

共98课时 | 7.2万人学习

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

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