【docker①】在VS Code中使用Docker容器
0 序言
本文将系统介绍在VS Code中使用Docker的相关知识,涵盖基础概念、环境配置、核心操作及高级应用。通过学习,你将理解为何在VS Code中集成Docker能提升开发效率,掌握Docker镜像、容器的基本概念,以及在VS Code中构建、运行、调试容器的具体方法,利用VS Code与Docker协同进行项目开发。
1 Docker与VS Code集成基础
在开发过程中,不同项目可能依赖不同的环境(如Python版本、数据库配置等),手动配置容易出现环境不一致
问题。Docker通过容器化技术实现环境隔离,而VS Code提供了对Docker的深度支持,可在同一界面完成镜像构建、容器管理、代码调试等操作,减少工具切换成本,提升开发效率。
1.1 Docker核心概念
1.1.1 镜像(Image)
Docker镜像是一个包含代码、运行时、库、环境变量和配置文件的只读模板,是创建容器的基础。例如,一个Python镜像可能包含Python解释器、必要的依赖库等。
1.1.2 容器(Container)
容器是镜像的运行实例,是一个独立的可执行单元。镜像相当于类
,容器相当于对象
,一个镜像可创建多个容器,容器间相互隔离。
1.1.3 Dockerfile
Dockerfile是一个文本文件,包含一系列指令,用于构建Docker镜像。通过Dockerfile,开发者可定义镜像的基础环境、安装依赖、配置程序等,实现镜像的可重复构建。
1.1.4 Docker Compose
Docker Compose是用于定义和运行多容器Docker应用的工具,通过yaml文件配置应用的服务,可一键启动、停止所有服务,适合多组件协同的项目(如前端+后端+数据库)。
总结就是,如果用面包这个例子来做一个类比的话,就是Dockerfile相当于面包磨具的图纸,Image相当于制作面包的磨具,Container相当于制作出来的面包,Docker Compose相当于面包店的套餐组合单。
2 环境准备
2.1 安装Docker
2.1.1 Windows系统
在这里还需要考虑一件事,就是原先电脑里是否有虚拟机,如果没有用过虚拟机,那就直接按照以下步骤即可。
但如果之前有在电脑创建过虚拟机并且运行了,有一定的数据储存情况下,我们得先确保要不要接着保留虚拟机,比如VirualBox等这些。
因为docker跟如VirualBox此类虚拟机还是存在一定的冲突风险的,所以如果后续还想接着使用虚拟机,最好还是先请确认一下,尤其是windows系统。
这里有个方法,可以实现在Windows系统中 Docker Desktop 和 VirtualBox 虚拟机共存,避免两者因虚拟化技术冲突而无法同时使用,可参考以下方法:
确认当前系统环境,通过在命令提示符中执行 wsl -l -v 命令,查看 Windows Subsystem for Linux(WSL)的安装和版本情况。
若输出结果中显示已安装的 Linux 发行版(如 Ubuntu)及其对应的 WSL 版本为 2,且状态为 Stopped 或 Running,则说明 WSL 2 环境已准备就绪。如果没有安装 WSL 2 或者没有对应的 Linux 发行版,需要先进行安装和配置。
此外就是要想使用docker的桌面版本,你得Windows系统版本号需要1904以上!!!
- 检查系统要求:需Windows 10 64位专业版、企业版或教育版(支持Hyper-V),或Windows 11。
- 下载Docker Desktop:访问Docker官网,下载对应版本并安装。
- 验证安装:打开命令提示符,输入
docker --version
,若显示版本信息则安装成功。
打开Docker官网,点击下载,
只要你的电脑是 x86 架构 64 位处理器,一般都是选择AMD64版本。
下载完后双击打开该exe文件,
选择以上两个选项,点击下一步。
等待加载。
点 Close and log out
注销 - 重新登录 - 启动 Docker 继续配置,注销只是短暂退出登录,不会丢文件。
在弹出该页面的地方选择Accept
单纯想先用 Docker 跑公开镜像、本地容器,不用登录,直接跳过即可。
如果你想用私有镜像、Docker Hub 远程操作,或是已经有账号,就直接sign in
即可。
正常填写即可,也可以选择跳过,不影响后续操作。
接下来需要完成 WSL 2 集成配置,这样 Docker 才能借助 WSL 2 跑容器。
点击 Docker Desktop 右上角的 齿轮图标(Settings,设置),进入配置界面。
按上图要求完成配置。
Docker Desktop 已正常启动并处于运行状态,但还需结合功能验证来确认是否真的能正常工作。
win + r
输出cmd
打开Windows 命令提示符,输入docker ps
并回车。
由于国内的镜像源拉取速度比较慢,很容易出现网络超时这种情况,因此有必要用国内的镜像源来加快拉取速度。
粘贴以下程序:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}
然后在下面这个地方修改一下镜像存放的位置。
(也可以选择不做更改,都可以,如果C盘空间足够的话)
接着打开终端,验证一下docker能够正常拉取镜像。
如果出现这个就说明成功拉取到了。
当然,你也可以回到docker桌面端,在images中可以看到你拉取到的镜像,点击运行即可。
点运行后会弹出创建容器,根据自己需求填写后点运行即可。
运行后就可以看到运行结果了。
2.2 配置VS Code
2.2.1 安装Docker插件
- 打开VS Code,进入扩展面板(快捷键
Ctrl+Shift+X
或Cmd+Shift+X
)。 - 搜索“Docker”,选择微软官方的“Docker”插件(作者为Microsoft),点击“安装”。
- 安装完成后,VS Code左侧会出现Docker图标,可通过该面板管理镜像、容器等。
这里就看到VsCode已经自动连接上docker了。
2.2.2 配置Docker连接(默认无需额外配置)
Docker插件默认会自动连接本地Docker服务,若需连接远程Docker服务,可按以下步骤:
- 打开VS Code设置(
Ctrl+,
或Cmd+,
)。 - 搜索“docker.host”,设置远程Docker服务地址(如
tcp://remote-host:2375
)。 - 重启VS Code使配置生效。
3 VS Code中使用Docker的核心操作
3.1 创建Dockerfile
3.1.1 新建Dockerfile
- 在VS Code中打开项目文件夹,右键新建文件,命名为
Dockerfile
(无扩展名)。 - 输入基础指令:
在你新创建的Dockerfile里写上以下程序。
# 基础镜像FROM python:3.9-slim# 设置工作目录WORKDIR /app# 复制项目依赖文件COPY requirements.txt .# 安装依赖RUN pip install --no-cache-dir -r requirements.txt# 复制项目代码COPY . .# 暴露端口(若项目有服务)EXPOSE 5000# 启动命令CMD ["python", "app.py"]
在运行程序之前,需要确保你的项目目录下需要有 requirements.txt 文件(用于记录 Python 项目的依赖包),如果没有实际依赖,可以创建一个空的 requirements.txt 文件,
项目目录下还需要有 app.py 文件。
app.py文件程序内容如下:
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, Docker!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
3.1.2 Dockerfile指令说明
FROM
:指定基础镜像,必须为Dockerfile的第一条指令。WORKDIR
:设置后续指令的工作目录。COPY
:将本地文件复制到镜像中。RUN
:在镜像构建过程中执行命令。EXPOSE
:声明容器运行时暴露的端口(仅为文档说明,需配合-p
参数映射)。CMD
:指定容器启动时执行的命令(可被docker run
后的命令覆盖)。
3.2 构建Docker镜像
3.2.1 基于Dockerfile构建
- 打开VS Code终端(
Ctrl+
` 或Cmd+
`)。 - 执行构建命令:
docker build -t my-python-app:1.0 .
-t
:指定镜像标签(格式为名称:版本
)。.
:表示Dockerfile所在的当前目录。
- 构建完成后,可在VS Code的Docker面板
Images
中看到新构建的镜像。
从docker的images就能看到新建好的镜像了。
3.2.2 查看镜像信息
在VS Code Docker面板中,右键镜像选择“Inspect”,可查看镜像的详细配置(如层信息、环境变量等);或在终端执行:
docker images my-python-app:1.0
3.3 运行Docker容器
3.3.1 基础运行命令
在终端执行:
docker run -d -p 5000:5000 --name my-app-container my-python-app:1.0
-d
:后台运行容器。-p 5000:5000
:将容器的5000端口映射到主机的5000端口(主机端口:容器端口)。--name
:指定容器名称。
3.3.2 在VS Code中管理容器
- 打开Docker面板,在
Containers
中可看到运行中的容器。 - 右键容器可执行“Start”“Stop”“Restart”“Delete”等操作。
- 选择“Attach Shell”可进入容器内部终端;选择“View Logs”可查看容器运行日志。
3.4 调试容器内的应用
3.4.1 配置调试环境
- 在VS Code中创建
.vscode/launch.json
文件,添加Docker调试配置:
{"version": "0.2.0", // 配置文件的版本,固定值"configurations": [ // 调试配置列表(可以有多个配置){"name": "Docker: Python - Launch", // 配置名称(自己能认就行,比如“调试Docker里的Python”)"type": "docker", // 调试类型:告诉VS Code这是Docker环境的调试"request": "launch", // 调试方式:启动新的容器并开始调试(另一种是“attach”,附加到已运行的容器)"preLaunchTask": "docker-build", // 调试前自动执行的任务:这里是先构建镜像(确保代码最新)"python": { // Python相关的调试配置"pathMappings": [ // 路径映射:关键!让VS Code知道本地代码和容器内代码的对应关系{"localRoot": "${workspaceFolder}", // 本地代码路径(你电脑上的项目文件夹)"remoteRoot": "/app" // 容器内代码路径(Dockerfile里WORKDIR设置的/app)}],"projectType": "general" // 项目类型:通用Python项目(不用改)}}]
}
这个 launch.json 配置是用于 在 VS Code 中直接调试 Docker 容器内的 Python 代码。
因为通过上文我们已经通过 docker build 和 docker run 让代码在容器里跑起来了,但如果个问题:
如果代码出了 bug,怎么像本地调试那样一步步看哪里错了?
直接在容器里打印日志太麻烦,而 VS Code 的调试功能(断点、变量监视)又默认只能用在本地环境。
这个 launch.json 就是让 VS Code 和 Docker 容器打通
,让调试器能到容器内部,直接调试里面运行的代码。
- 创建
.vscode/tasks.json
文件,定义构建任务:
{"version": "2.0.0", // 配置文件版本,固定值"tasks": [{"label": "docker-build", // 任务名称(必须和launch.json里的preLaunchTask一致)"type": "docker-build", // 任务类型:Docker构建(VS Code的Docker插件会识别)"dockerBuild": {"context": "${workspaceFolder}", // 构建上下文:当前项目文件夹(和手动构建时的“.”作用一样)"tag": "my-python-app:1.0" // 镜像标签(和手动构建的 -t 参数一样)}}]
}
这个 tasks.json 文件是为了在 VS Code 里更方便地管理 Docker 构建任务,让你不用每次手动输入 docker build 命令,同时和调试流程(launch.json 里的 preLaunchTask)联动,
你之前手动构建镜像的命令是:
docker build -t my-python-app:1.0 .
而 tasks.json 的作用是把这个命令固化
成 VS Code 的一个任务,
以后就可以用快捷键自动执行构建。
3.4.2 启动调试
- 可以在程序中设置断点(点击行号左侧)。
- 按
F5
启动调试,或者在左侧选择运行和调试
,VS Code会自动构建镜像、运行容器并附加调试器,程序执行到断点时会暂停,可查看变量、调用栈等信息。
从日志看,镜像构建已经成功完成。
构建过程利用了 Docker 的缓存机制(CACHED 的步骤),加速了构建流程(因为代码 / 依赖没变化,复用了之前的结果 )。
终端提示是正常的 VS Code 任务执行收尾逻辑,按需按任意键关闭即可,不影响镜像使用。
4 小结
本文很基础,介绍了在VS Code中使用Docker的全流程。首先明确了Docker与VS Code集成的价值——解决环境一致性问题并提升开发效率;接着讲解了镜像、容器等核心概念,以及Docker和VS Code的安装配置;然后通过实例演示了Dockerfile编写、镜像构建、容器运行及调试的具体操作。
掌握这些知识后,你可在VS Code中高效完成容器化开发,无论是单服务应用还是多组件协同项目(道理一样),都能通过Docker实现环境隔离与快速部署,显著提升开发体验和项目可维护性。