Docker 是什么
Docker 是一个开源的应用容器引擎,它能让开发者把应用连同它的运行环境(代码、依赖、配置、系统库等)一起打包成一个标准化的"容器",然后在任何装了 Docker 的机器上一致地运行。
用一句话概括:"Build once, run anywhere"(一次构建,到处运行)。
它解决什么问题?
传统部署方式里最头疼的是环境不一致------"在我电脑上能跑,到你电脑上就报错"。原因通常是依赖版本、系统配置、路径等环境差异。Docker 把整个环境固化进镜像里,从根本上消除了这个问题。
核心概念
| 概念 | 比喻 | 说明 |
|---|---|---|
| 镜像 (Image) | 类 / 模板 / 光盘 | 只读的打包文件,包含应用和全部依赖,不可变 |
| 容器 (Container) | 实例 / 运行的进程 | 由镜像启动出来的运行实例,可启动、停止、删除 |
| Dockerfile | 配方 / 制作说明 | 一份文本文件,描述如何一步步构建镜像 |
| 仓库/注册中心 (Registry) | 应用商店 | 存放和分发镜像的地方,最常用的是 Docker Hub |
| 数据卷 (Volume) | 外接U盘 | 把容器内数据持久化到宿主机,防止容器删除时数据丢失 |
关系:Dockerfile → 构建出 镜像 → 运行出 容器。
常用方法(命令)
1. 生命周期管理
bash
docker run -d -p 8080:80 --name myapp nginx # 运行容器(后台、端口映射、命名)
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(含已停止的)
docker start / stop / restart 容器名 # 启动 / 停止 / 重启
docker rm 容器名 # 删除容器
docker exec -it 容器名 bash # 进入容器内部操作
2. 镜像管理
bash
docker pull nginx # 拉取镜像
docker images # 查看本地镜像列表
docker rmi 镜像名 # 删除镜像
docker build -t myapp:v1 . # 用当前目录的 Dockerfile 构建镜像
3. 数据与日志
bash
docker logs -f 容器名 # 查看实时日志
docker volume ls # 查看数据卷
docker cp 容器名:/路径 . # 拷贝容器内文件到宿主机
4. 一个最小 Dockerfile 示例
dockerfile
# 基于 Node 镜像
FROM node:18
# 设置工作目录
WORKDIR /app
# 拷贝源码
COPY . .
# 安装依赖并启动
RUN npm install
CMD ["node", "server.js"]
构建并运行:
bash
docker build -t myapp .
docker run -p 3000:3000 myapp
docker run -itd 各种参数 镜像名:标签
表格
| 参数 | 含义 |
|---|---|
-i |
interactive,保持标准输入开启,容器内可交互 |
-t |
分配一个伪终端(TTY) |
-d |
detached,容器在后台运行,不占用当前终端 |
Docker 的主要作用
- 环境标准化:开发、测试、生产环境完全一致,消除"在我这能跑"的问题。
- 快速部署:秒级启动,比传统虚拟机(VM)轻量得多------VM 虚拟整个操作系统,容器只共享内核、隔离进程。
- 资源隔离与高效:多个容器互不干扰,占用资源小,单台机器能跑更多服务。
- 微服务架构的基础:每个服务一个容器,独立开发、部署、扩容。
- 一键交付:交付一个镜像,客户/运维拉下来就能跑,无需装环境。
适用场景
- 个人本地搭建开发环境(数据库、中间件等一条命令搞定)
- 应用打包交付、部署上云(配合 K8s 做编排)
- 测试环境快速复用和清理
- CI/CD 流水线里跑构建和测试