主要结论:Docker 是一种轻量级的容器化技术,可让开发者在任何环境中快速部署、隔离和管理应用。本教程将通过实际示例,带你一步步理解 Docker 的核心概念与常用操作,帮助你在本地环境中动手构建、运行和发布容器化应用。
一、为什么要使用 Docker?
在传统开发模式中,环境差异往往导致"在我机器上能跑"却无法在服务器上正常运行的问题。Docker 将应用及其依赖打包到一个标准化的容器中,解决了"环境不一致"难题,并带来以下好处:
- 轻量与高效:容器共享主机内核,启动速度快,资源开销小。
- 可移植性:同一个镜像可在开发、测试、生产环境无差异运行。
- 隔离性:每个容器相互独立,避免依赖冲突。
- 易维护:通过 Dockerfile 定义镜像,便于版本管理和自动化构建。
二、核心概念
- 镜像(Image)
镜像是一种只读模板,包含应用运行所需的文件系统和配置。可以从公共仓库(Docker Hub)拉取,也可以自定义构建。 - 容器(Container)
容器是镜像的可运行实例,拥有独立的进程空间和网络接口,启动即运行,停止即销毁。 - Dockerfile
用于定义如何构建自定义镜像的脚本文件。通过一系列指令(如 FROM、COPY、RUN)描述镜像构建过程。 - 仓库(Registry)
镜像存储和分发的服务。Docker Hub 是官方公共仓库,也可搭建私有仓库。
三、环境准备
- 安装 Docker Desktop(Windows/macOS)或 Docker Engine(Linux)。
- 完成安装后,运行
docker --version
,确认输出类似Docker version 20.10.x
即可。
四、第一个 Docker 镜像与容器
1. 拉取官方镜像
bash
docker pull hello-world
Docker 会从 Docker Hub 下载 hello-world
镜像。
2. 运行容器
arduino
bash
docker run hello-world
输出"Hello from Docker!"即代表容器启动成功。
五、自定义镜像:构建一个简单的 Nginx 站点
1. 创建项目目录
perl
bash
mkdir my-nginx
cd my-nginx
在 index.html
中添加:
xml
xml
<!DOCTYPE html>
<html>
<head><title>My Nginx</title></head>
<body><h1>欢迎使用 Docker Nginx!</h1></body>
</html>
2. 编写 Dockerfile
在 my-nginx
目录下创建 Dockerfile
,内容如下:
bash
text
# 选择基础镜像
FROM nginx:latest
# 将本地 index.html 复制到容器网页目录
COPY index.html /usr/share/nginx/html/index.html
3. 构建镜像
perl
bash
docker build -t my-nginx:1.0 .
-t my-nginx:1.0
:为镜像打标签。
4. 运行容器
arduino
bash
docker run -d -p 8080:80 --name test-nginx my-nginx:1.0
-d
:后台运行-p 8080:80
:将主机 8080 端口映射到容器 80 端口--name test-nginx
:容器名称
浏览器访问 http://localhost:8080
,即可看到自定义页面。
六、常用命令速览
操作 | 命令示例 | 说明 |
---|---|---|
查看镜像 | docker images |
列出本地镜像 |
查看容器 | docker ps (运行中) docker ps -a (所有) |
列出容器 |
停止容器 | docker stop <容器ID或名称> |
停止运行中的容器 |
删除容器 | docker rm <容器ID或名称> |
删除已停止容器 |
删除镜像 | docker rmi <镜像ID或名称> |
删除本地镜像 |
查看日志 | docker logs <容器ID或名称> |
查看容器输出日志 |
进入容器 | docker exec -it <容器ID> /bin/bash |
以交互模式进入容器终端 |
七、进阶技巧
- 镜像层缓存:Docker 会缓存每一步,如果 Dockerfile 修改后重建,仅重做变动层,提升效率。
- 多阶段构建:在构建复杂应用时,使用多阶段构建减小最终镜像体积。
- Compose 编排 :使用
docker-compose.yml
同时管理多个服务,实现"一键启动"应用栈。
八、总结与下一步
通过以上步骤,你已经掌握了 Docker 的基本概念和操作流程。接下来可以尝试:
- 学习 Docker Compose 以编排多服务应用。
- 了解 Docker 网络模型,配置自定义网络。
- 探索 Kubernetes,实现容器编排与自动化运维。
Docker 是现代云原生开发的基石,深入学习后将极大提高开发、测试和部署效率。愿你在容器化道路上越走越远!