Docker容器技术全指南:从概念到实操(含Windows安装与命令速查)
一、Docker核心概念与架构
1.1 三大核心组件
(1)镜像(Image)
Docker镜像是一个只读的模板,包含运行应用所需的代码、运行时、库、环境变量和配置文件,是创建容器的基础。其核心特点的是分层存储(由多个只读层叠加而成,可被多个镜像共享,节省存储空间)且不可修改(一旦构建完成无法修改,更新需构建新镜像)。类比来看,镜像相当于软件的安装包,例如`nginx`镜像就是包含Nginx服务的“安装模板”。
(2)容器(Container)
容器是镜像的运行实例,是一个独立的、可运行的软件单元。容器在镜像的只读层之上会添加一层可写层,所有运行时的修改都保存在该层;同时通过Linux内核的命名空间(Namespace)实现进程、网络、文件系统的隔离,且无需模拟完整操作系统,直接复用宿主机内核,具备秒级启动、资源占用低(MB级)的轻量特性。类比来看,容器相当于安装好的软件进程,运行`nginx`镜像后,就得到一个Nginx容器实例。
(3)仓库(Repository)
仓库是用于集中存储和分发镜像的服务平台,分为公有仓库和私有仓库两类。其中,Docker Hub是最知名的公有仓库,提供海量免费镜像(如Nginx、MySQL、Redis等);私有仓库(如Harbor)则用于企业内部存储私有应用镜像,保障镜像安全。类比来看,仓库相当于软件的应用商店,用户可上传、下载、搜索镜像。
1.2 核心架构(C/S架构)
Docker采用客户端-服务器(Client-Server)架构,主要包含三大组件,协同完成镜像与容器的全生命周期管理:
- Docker Client(客户端):提供命令行/API接口,是用户操作Docker的入口,常用`docker run`、`docker ps`等命令与守护进程交互。
- Docker Daemon(守护进程):运行在宿主机的后台服务,负责接收客户端请求,执行镜像拉取、容器创建、启动等具体操作。
- Docker Registry(镜像仓库):存储镜像的远程服务,客户端通过守护进程从仓库拉取镜像,或向仓库推送本地构建的镜像。
1.3 Docker与虚拟机(VM)的核心区别
很多人会混淆容器和虚拟机,两者的核心差异在于是否模拟完整操作系统,具体对比如下:
特性 | Docker容器 | 虚拟机(VM) |
|---|---|---|
底层架构 | 复用宿主机Linux内核 | 模拟完整硬件和操作系统内核 |
启动速度 | 秒级启动 | 分钟级启动 |
资源占用 | 极低(MB级) | 较高(GB级) |
隔离性 | 进程级隔离(Namespace),隔离性较弱 | 硬件级隔离(Hypervisor),隔离性强 |
镜像体积 | 小巧(通常<100MB) | 庞大(通常>1GB) |
跨平台兼容性 | 依赖宿主机内核(Windows需WSL2),跨内核兼容性有限 | 完全独立,与宿主机无关,跨平台性更强 |
部署复杂度 | 极简,一键部署,无需额外配置操作系统 | 复杂,需先安装操作系统,再配置应用环境 |
运维成本 | 低,仅需维护容器和镜像,无需维护操作系统 | 高,需单独维护每个VM的操作系统(补丁、升级等) |
适用场景 | 微服务、持续集成/部署、轻量应用快速迭代 | 独立环境部署、需强隔离的场景(如多租户)、传统应用迁移 |
1.4 Docker核心优势与应用场景
(1)核心优势
- 环境一致性:开发、测试、生产环境完全一致,杜绝环境不一致导致的Bug。
- 快速部署:秒级启动容器,支持大规模集群快速扩容,部署效率远超虚拟机。
- 资源高效利用:一台宿主机可运行成百上千个容器,资源利用率远高于虚拟机。
- CI/CD友好:镜像可作为CI/CD流程的交付物,实现自动化构建、测试、部署。
- 跨平台可移植:一次构建,到处运行,兼容Linux、Windows(WSL2)、macOS、云服务器。
(2)典型应用场景
- 微服务部署:将微服务拆分为独立容器,通过Docker Compose或Kubernetes编排管理。
- 开发环境标准化:团队统一使用Docker镜像作为开发环境,避免“本机配置不同”问题。
- 自动化测试:为每个测试用例创建独立容器,测试完成后销毁,保证测试环境干净。
- 云原生应用交付:与Kubernetes、Istio等工具配合,实现云平台弹性伸缩与运维自动化。
二、Windows环境下Docker Desktop安装教程(超详细)
Windows平台安装Docker主要通过Docker Desktop实现,该工具集成Docker Engine、Docker Compose、Docker CLI等核心组件,支持Windows 10/11专业版、企业版、教育版,家庭版需通过WSL2兼容运行。以下是完整安装步骤:
2.1 前置条件检查
(1)系统版本要求
系统版本 | 支持的Docker运行模式 | 核心依赖 |
|---|---|---|
Windows 10 64位 专业版/企业版/教育版(1903及以上) | Hyper-V + 容器功能 | 系统内置Hyper-V |
Windows 11 64位 全版本 | Hyper-V + 容器功能 / WSL2 | 系统内置Hyper-V或WSL2 |
Windows 10 家庭版 | 仅支持WSL2模式 | 需手动安装WSL2 |
(2)开启硬件虚拟化(BIOS层面)
Docker依赖硬件虚拟化技术,需先在BIOS中开启,步骤如下:
- 重启电脑,开机时按快捷键(联想F2、华硕Del、戴尔F2、惠普F10)进入BIOS。
- 找到虚拟化选项(Intel芯片为`Intel Virtualization Technology`,AMD芯片为`AMD-V`)。
- 将选项设置为`Enabled`,保存BIOS设置并重启电脑。
(3)开启Windows必要功能
① 专业版/企业版/教育版(开启Hyper-V + 容器功能)
- 按下`Win + R`,输入`appwiz.cpl`回车,打开“程序和功能”。
- 点击左侧“启用或关闭Windows功能”,勾选“Hyper-V(含所有子选项)”“容器”“适用于Linux的Windows子系统”(可选,兼容WSL2)。
- 点击“确定”,系统自动安装功能,完成后重启电脑。
② 家庭版(安装WSL2)
家庭版不支持Hyper-V,需通过WSL2运行Docker,步骤如下:
- 按下`Win + X`,选择“Windows终端(管理员)”。
- 执行命令开启WSL功能:`wsl --install`,自动安装WSL2和Ubuntu发行版。
- 安装完成后重启电脑,打开Ubuntu终端,设置用户名和密码(WSL初始化)。
- (可选)升级WSL到最新版本:`wsl --update`。
- 安装WSL2内核更新包:访问微软官方地址,下载并安装x64版本内核包,执行`wsl --set-default-version 2`设置默认版本。
2.2 下载与安装Docker Desktop
- 下载安装包:访问Docker官方下载页,点击“Download for Windows”按钮,下载安装包(约600MB,无需登录即可下载)。
- 启动安装:双击`Docker Desktop Installer.exe`,勾选以下选项(默认已勾选,确认即可): Use WSL 2 instead of Hyper-V(家庭版强制勾选,专业版优先勾选)Add shortcut to desktop(添加桌面快捷方式)Add Docker to the PATH(添加到系统环境变量)
- 点击“OK”开始安装,耗时5-10分钟(取决于电脑配置),安装完成后勾选“Launch Docker Desktop”,点击“Close and restart”重启电脑。
2.3 Docker Desktop初始化与配置
- 首次启动:重启后Docker自动启动,右下角出现鲸鱼图标,图标停止跳动即启动完成;弹出协议窗口时,勾选同意并点击“Accept”,可选择“Skip”跳过Docker账号登录(后续需拉取私有镜像再登录)。
- 配置国内镜像源(关键,加速镜像拉取): 右键右下角Docker图标,选择“Settings”。左侧菜单选择“Docker Engine”,在配置文件中添加镜像源: { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://hub-mirror.c.163.com", "https://mirror.aliyuncs.com" ], "insecure-registries": [], "debug": false, "experimental": false }点击“Apply & restart”,Docker重启后配置生效。
- 切换运行模式(专业版专属):进入Settings > General,勾选/取消“Use WSL 2 instead of Hyper-V”,点击“Apply & restart”即可切换Hyper-V与WSL2模式。
2.4 验证安装是否成功
(1)命令行验证
- 按下`Win + R`,输入`cmd`回车,打开命令提示符。
- 执行以下命令,检查版本: docker --version docker-compose --version 正常输出示例: Docker version 25.0.3, build 4debf41 Docker Compose version v2.24.5
- 运行测试容器:`docker run hello-world`,若输出“Hello from Docker!”等内容,说明安装成功。
(2)图形界面验证
打开Docker Desktop,切换到“Containers”页面,可看到`hello-world`容器的运行记录(状态为`Exited`,测试容器运行后自动退出),即验证通过。
2.5 常见问题与解决方案
问题现象 | 原因 | 解决方法 |
|---|---|---|
启动失败,提示“Hyper-V未开启” | 未开启Hyper-V功能或BIOS虚拟化未开启 | 1. 检查BIOS虚拟化是否开启;2. 重新开启Hyper-V功能并重启 |
提示“WSL 2 is not installed” | WSL2内核未更新或未设置默认版本 | 执行`wsl --update`,或手动安装WSL2内核更新包,设置默认版本为2 |
拉取镜像速度极慢 | 未配置国内镜像源 | 按2.3步骤配置镜像源并重启Docker |
家庭版无法安装Hyper-V | 系统版本不支持 | 切换到WSL2模式运行Docker |
输入`docker`提示“不是内部或外部命令” | 安装时未勾选“添加到PATH” | 重新安装Docker Desktop,勾选“Add Docker to the PATH” |
三、Docker镜像与容器核心操作速查
本部分整理镜像拉取/构建、容器启停/进入等高频操作,按功能分类,方便快速查阅,所有命令均在CMD/PowerShell或Linux终端中执行。
3.1 镜像(Image)核心操作
操作类型 | 命令 | 功能说明 | 示例 |
|---|---|---|---|
搜索镜像 | `docker search <镜像名>` | 在Docker Hub搜索镜像 | `docker search nginx` |
拉取镜像 | `docker pull <镜像名>:<标签>` | 下载镜像,无标签默认拉取`latest` | `docker pull nginx:1.25`;`docker pull nginx`(等价latest) |
查看本地镜像 | `docker images` | 列出所有本地镜像(含ID、标签、大小) | `docker images`;`docker images -q`(仅显示镜像ID) |
构建镜像 | `docker build -t <镜像名>:<标签> <Dockerfile路径>` | 通过Dockerfile构建自定义镜像 | `docker build -t my-nginx:v1 .`(`.`表示当前目录Dockerfile) |
镜像打标签 | `docker tag <原镜像ID/名称> <新镜像名>:<新标签>` | 为镜像添加新标签(用于推送仓库) | `docker tag nginx:1.25 myrepo/nginx:v1` |
推送镜像 | `docker push <镜像名>:<标签>` | 推送镜像到Docker Hub/私有仓库(需先登录) | `docker push myrepo/nginx:v1` |
删除镜像 | `docker rmi <镜像ID/名称>` | 删除本地镜像(需先删除依赖容器) | `docker rmi nginx:1.25`;`docker rmi $(docker images -q)`(删除所有镜像) |
保存镜像为文件 | `docker save -o <保存文件名.tar> <镜像名>` | 将镜像导出为tar包(离线传输用) | `docker save -o nginx-1.25.tar nginx:1.25` |
导入镜像文件 | `docker load -i <镜像文件.tar>` | 从tar包导入镜像到本地 | `docker load -i nginx-1.25.tar` |
3.2 容器(Container)核心操作
操作类型 | 命令 | 功能说明 | 示例 |
|---|---|---|---|
创建并运行容器 | `docker run [参数] <镜像名>` | 基于镜像创建并启动容器,常用参数:`-d`(后台运行)、`-p 宿主机端口:容器端口`(端口映射)、`--name 容器名`(自定义名称)、`-v 宿主机路径:容器路径`(挂载数据卷)、`--rm`(停止后自动删除) | `docker run -d -p 8080:80 --name my-nginx nginx`;`docker run -it --rm ubuntu /bin/bash`(交互式运行,退出即删除) |
查看容器状态 | `docker ps` | 列出运行中的容器 | `docker ps`;`docker ps -a`(列出所有容器,含已停止);`docker ps -q`(仅显示运行中容器ID) |
启动容器 | `docker start <容器ID/名称>` | 启动已停止的容器 | `docker start my-nginx` |
停止容器 | `docker stop <容器ID/名称>` | 优雅停止容器(发送SIGTERM信号) | `docker stop my-nginx`;`docker stop $(docker ps -q)`(停止所有运行中容器) |
强制停止容器 | `docker kill <容器ID/名称>` | 强制终止容器(发送SIGKILL信号) | `docker kill my-nginx` |
重启容器 | `docker restart <容器ID/名称>` | 重启容器(先停止再启动) | `docker restart my-nginx` |
进入运行中容器 | `docker exec -it <容器ID/名称> <命令>` | 进入容器执行命令(推荐,不阻塞主进程) | `docker exec -it my-nginx /bin/bash`(进入容器终端) |
查看容器日志 | `docker logs [参数] <容器ID/名称>` | 查看容器运行日志,常用参数:`-f`(实时跟踪)、`--tail 行数`(查看最后N行) | `docker logs -f my-nginx`;`docker logs --tail 100 my-nginx` |
容器文件拷贝 | `docker cp <容器ID:容器路径> <宿主机路径>` | 从容器拷贝文件到宿主机 | `docker cp my-nginx:/etc/nginx/nginx.conf ./` |
容器文件拷贝 | `docker cp <宿主机路径> <容器ID:容器路径>` | 从宿主机拷贝文件到容器 | `docker cp ./nginx.conf my-nginx:/etc/nginx/` |
删除容器 | `docker rm <容器ID/名称>` | 删除已停止的容器 | `docker rm my-nginx`;`docker rm $(docker ps -aq)`(删除所有容器) |
查看容器详情 | `docker inspect <容器ID/名称>` | 查看容器详细配置(IP、挂载、网络等) | `docker inspect my-nginx` |
3.3 常用组合命令
功能 | 命令 |
|---|---|
停止并删除所有容器 | `docker stop $(docker ps -q) && docker rm $(docker ps -aq)` |
删除所有未使用的镜像和容器(谨慎使用) | `docker system prune -a` |
四、Docker Compose常用命令速查
Docker Compose基于`docker-compose.yml`配置文件,实现多容器应用的一键编排、启动、停止,命令默认在配置文件所在目录执行;若配置文件名非默认,需加`-f 文件名.yml`参数(如`docker-compose -f my-compose.yml up`)。
4.1 基础启动与停止
操作类型 | 命令 | 功能说明 | 示例 |
|---|---|---|---|
启动应用 | `docker-compose up [参数]` | 创建并启动所有服务容器,常用参数:`-d`(后台运行)、`--build`(启动前重建镜像)、`--scale <服务名>=<数量>`(指定容器实例数) | `docker-compose up -d`;`docker-compose up -d --build`;`docker-compose up -d --scale web=3` |
停止应用 | `docker-compose down [参数]` | 停止并删除容器、网络、网桥,常用参数:`-v`(删除绑定数据卷)、`--rmi <all/local>`(删除镜像) | `docker-compose down`;`docker-compose down -v --rmi local` |
查看服务状态 | `docker-compose ps [服务名]` | 列出所有/指定服务的容器状态 | `docker-compose ps`;`docker-compose ps web` |
4.2 容器生命周期管理
操作类型 | 命令 | 功能说明 | 示例 |
|---|---|---|---|
启动已创建容器 | `docker-compose start [服务名]` | 启动之前`down`停止的容器(不创建新容器) | `docker-compose start`;`docker-compose start db` |
停止运行中容器 | `docker-compose stop [服务名]` | 停止容器(不删除,可通过`start`重启) | `docker-compose stop`;`docker-compose stop web` |
重启容器 | `docker-compose restart [服务名]` | 重启运行中的容器 | `docker-compose restart`;`docker-compose restart nginx` |
暂停容器 | `docker-compose pause [服务名]` | 暂停容器进程 | `docker-compose pause db` |
恢复暂停容器 | `docker-compose unpause [服务名]` | 恢复暂停的容器 | `docker-compose unpause db` |
删除已停止容器 | `docker-compose rm [服务名]` | 删除停止的容器(需先`stop`) | `docker-compose rm`;`docker-compose rm -f web`(强制删除) |
4.3 镜像相关操作
操作类型 | 命令 | 功能说明 | 示例 |
|---|---|---|---|
构建镜像 | `docker-compose build [参数] [服务名]` | 构建配置文件中定义的镜像,`--no-cache`(无缓存构建) | `docker-compose build`;`docker-compose build --no-cache web` |
拉取依赖镜像 | `docker-compose pull [服务名]` | 拉取服务所需的镜像(配置中指定的`image`) | `docker-compose pull mysql` |
推送镜像 | `docker-compose push [服务名]` | 推送本地构建的镜像到仓库(需先打标签) | `docker-compose push web` |
4.4 日志与调试
操作类型 | 命令 | 功能说明 | 示例 |
|---|---|---|---|
查看容器日志 | `docker-compose logs [参数] [服务名]` | 查看服务容器日志,`-f`(实时跟踪)、`--tail 行数`(最后N行) | `docker-compose logs -f`;`docker-compose logs --tail 100 web` |
进入容器终端 | `docker-compose exec [参数] <服务名> <命令>` | 进入运行中的容器执行命令(推荐) | `docker-compose exec web /bin/bash`;`docker-compose exec db mysql -uroot -p` |
验证配置文件 | `docker-compose config [参数]` | 校验`docker-compose.yml`语法是否正确 | `docker-compose config`;`docker-compose config -q`(仅校验不输出) |
查看服务进程 | `docker-compose top [服务名]` | 查看服务容器内的运行进程 | `docker-compose top web` |
查看资源占用 | `docker-compose stats [服务名]` | 实时查看容器CPU、内存、网络等资源占用 | `docker-compose stats` |
4.5 其他常用命令与组合命令
命令/功能 | 说明/命令 |
|---|---|
查看Compose版本 | `docker-compose version` |
列出Compose管理的镜像 | `docker-compose images` |
监控容器事件 | `docker-compose events [服务名]`(实时监控启动、停止等事件) |
一键重启服务(重建镜像) | `docker-compose down && docker-compose up -d --build` |
清理所有Compose相关资源 | `docker-compose down -v --rmi all --remove-orphans`(容器+镜像+数据卷) |
五、后续操作建议
- 熟悉基础命令:先掌握镜像拉取、容器启停等核心命令,通过实操(如运行Nginx、MySQL容器)加深理解。
- 学习Dockerfile:掌握自定义镜像构建方法,通过Dockerfile定义应用依赖和运行环境,实现镜像标准化。
- 实践多容器编排:使用Docker Compose编写`docker-compose.yml`,实现Web、数据库、缓存等多服务协同运行。
- 进阶学习Kubernetes:若需大规模容器集群管理,可进一步学习Kubernetes(K8s),掌握容器编排进阶技术。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/568.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。
