Docker 入门:镜像、容器与一条龙的交付物
知识背景
Docker 把应用连同依赖打进可移植单元,在任意装了 Docker 引擎的环境上一致运行,解决「我机器上能跑」问题。核心概念是 镜像(Image)——只读模板;容器(Container)——镜像的运行实例;Dockerfile——描述如何构建镜像的文本。
与虚拟机相比,容器共享宿主机内核,更轻、启动更快,适合微服务、CI/CD 与本地开发环境统一。
知识详解与通俗解释
1. 镜像与容器
- 镜像:分层存储(Union FS),多条镜像可共享底层层,节省磁盘。
- 容器:在镜像最上层加可写层;删容器会丢掉可写层里未持久化的数据。
通俗说:镜像是「精装房户型图」;容器是「按图纸实例化的一户人家」,装修(写入)在可写层,拆了房装修没单独备份就没了。
2. Dockerfile 常用指令(记语义)
| 指令 | 作用 |
|---|---|
FROM | 基础镜像 |
WORKDIR | 工作目录 |
COPY / ADD | 拷贝构建上下文文件 |
RUN | 构建时执行命令(多行可合并减少层数) |
ENV | 环境变量 |
EXPOSE | 声明端口(文档性质,真正映射靠 -p) |
CMD / ENTRYPOINT | 容器启动时默认命令 |
注意:.dockerignore 排除 node_modules、.git 等,减小上下文、加快构建。
3. 运行与网络
docker run -d -p 8080:80 --name web nginx:后台运行、端口映射、命名。
-默认桥接网络下,容器间可用容器名解析(自定义网络时更稳)。-v挂载:把宿主机目录或命名卷挂进容器,数据持久化与开发热更新常用。
4. Docker Compose多容器应用用 compose.yaml 描述服务、镜像、端口、环境变量、依赖顺序,一条 docker compose up 拉起整套环境,适合本地联调与小规模部署。
5. 与生产的关系
生产除 Docker 外还涉及 镜像仓库、编排(K8s/Swarm)、健康检查、资源限制(--memory/--cpus)、非 root 用户等;本文覆盖「能读懂 Dockerfile、能本地起服务」这一层。
总结
- 镜像 = 模板,容器 = 运行实例;数据要持久化用 volume。
- Dockerfile 管构建,run/compose 管运行与编排入门。
- 排查问题常看:
docker logs、docker exec -it <id> sh进容器、docker inspect。