目录
1. Docker 简介
1.1 Docker 的核心概念
1.2 Docker 的优势
1.3 Docker 工作流程
2. 常见命令
2.1 基本命令
2.2 镜像操作
2.3 容器操作
2.4 网络操作
2.5 卷操作
2.6 日志和监控
2.7 清理命令
3. 注意事项和最佳实践
3.1 镜像操作
3.2 容器操作
3.3 网络操作
3.4 卷操作
3.5 日志和监控
3.6 清理命令
4.思维导图
1. Docker 简介
Docker 是一种开源的容器化平台,它使开发者能够自动化地部署、管理和运行应用程序。Docker 使用操作系统级虚拟化技术,使得应用程序和它们的依赖项可以打包成一个轻量级、可移植的容器,并在任何环境中运行。
1.1 Docker 的核心概念
镜像(Image):
- Docker 镜像是一个包含应用程序及其所有依赖项的只读模板。镜像可以用来创建 Docker 容器。
- 镜像通常是基于另一个镜像构建的,并通过分层文件系统来实现。每一层都包含了镜像的一部分,最后一层是应用程序本身。
容器(Container):
- 容器是镜像的运行实例。它们是轻量级的、独立的,运行时与主机系统隔离。
- 容器可以启动、停止、移动,并且可以随时销毁,而不会影响主机系统。
Dockerfile:
- Dockerfile 是一个文本文件,包含了一系列指令,用来告诉 Docker 如何构建镜像。
- 每个指令都对应镜像的一层,并且每次修改 Dockerfile 都会创建新的镜像层。
Docker Hub:
- Docker Hub 是一个云端的镜像存储库,允许用户存储和共享 Docker 镜像。用户可以从 Docker Hub 拉取公共镜像,或推送自己的镜像。
1.2 Docker 的优势
- 一致的运行环境: Docker 提供了一致的开发、测试和生产环境,确保应用程序在不同环境中运行时没有差异。
- 轻量级: Docker 容器与传统的虚拟机相比更加轻量级,占用资源更少,启动速度更快。
- 依赖管理: Docker 容器包含应用程序的所有依赖项,避免了“在我的机器上可以工作”的问题。
- 便捷的版本控制: Docker 镜像是分层构建的,可以很方便地进行版本控制和回滚。
- 快速部署: Docker 镜像可以快速分发和部署,缩短了从开发到生产的时间。
1.3 Docker 工作流程
- 编写 Dockerfile: 开发者编写一个 Dockerfile 来定义应用程序的环境和依赖项。
- 构建镜像: 使用
docker build
命令将 Dockerfile 构建成一个镜像。 - 运行容器: 使用
docker run
命令从镜像创建并启动一个容器。 - 管理容器: 使用各种 Docker 命令(如
docker ps
,docker stop
,docker rm
等)来管理容器的生命周期。 - 发布和分享: 使用
docker push
命令将镜像推送到 Docker Hub,或者从 Docker Hub 拉取其他镜像。
2. 常见命令
最常用的就2、3。
2.1 基本命令
docker version
:查看 Docker 的版本信息。
docker info
:显示有关 Docker 系统的详细信息,包括容器、镜像和存储驱动等信息。
docker help
:显示 Docker 命令的帮助信息。
2.2 镜像操作
docker images
:列出本地存储的所有镜像。
docker pull [镜像名]
:从 Docker Hub 或其他镜像仓库中拉取指定镜像。
- 注意: 从可信的源拉取镜像,以避免安全风险。定期更新镜像以获取最新的安全修复和功能改进。
docker build -t [镜像名]:[标签] [Dockerfile 路径]
:使用 Dockerfile 构建一个新的镜像。
- 注意: Dockerfile 中的命令尽量保持简单和明确,以减少镜像层的数量和大小。使用多阶段构建来减少最终镜像的大小。
docker rmi [镜像名或ID]
:删除指定的镜像。
docker tag [镜像名]:[标签] [新镜像名]:[新标签]
:为现有镜像打标签。
2.3 容器操作
docker ps
:列出当前正在运行的所有容器(可以看到下面的容器名和id)。
docker ps -a
:列出所有容器,包括未运行的(可以看到下面的容器名和id)。
docker run [选项] [镜像名]
:运行一个镜像,生成一个容器。
常用选项:
-d
:后台运行容器,并返回容器 ID。注意: 后台运行容器时,确保有日志管理方案以便排查问题。-it
:以交互模式运行容器,并分配一个伪终端。--name [容器名]
:为容器指定一个名称。注意: 使用有意义的名称便于管理和调试。-p [主机端口]:[容器端口]
:端口映射。注意: 映射端口时,注意主机和容器的端口冲突问题。-v [主机目录]:[容器目录]
:挂载主机目录到容器中。注意: 确保正确的读写权限,避免数据丢失或权限问题。
docker stop [容器名或ID]
:停止运行中的容器。
- 注意: 停止容器时,最好先确保容器内的进程已妥善关闭,以防止数据损坏或丢失。
docker start [容器名或ID]
:启动已停止的容器。
docker restart [容器名或ID]
:重启容器。
docker rm [容器名或ID]
:删除容器。
- 注意: 删除容器时,请确保容器中的重要数据已备份或持久化,避免数据丢失。可以结合
docker stop
和docker rm
使用docker rm -f
强制删除正在运行的容器。
docker exec -it [容器名或ID] /bin/bash
:进入正在运行的容器的终端。
2.4 网络操作
docker network ls
:列出所有的网络。
docker network create [网络名]
:创建一个新的网络。
- 注意: 创建自定义网络时,可以选择适当的驱动(如
bridge
,overlay
),以满足不同的应用场景需求。确保网络配置与主机网络环境不冲突。
docker network rm [网络名]
:删除一个网络。
docker network inspect [网络名]
:查看网络的详细信息。
2.5 卷操作
docker volume ls
:列出所有卷。
docker volume create [卷名]
:创建一个新的卷。
- 注意: 创建卷时,可以指定不同的驱动程序和选项,以满足存储需求。注意卷的生命周期管理,避免产生未使用的孤立卷。
docker volume rm [卷名]
:删除一个卷。
- 注意: 删除卷时,请确保卷中的数据已备份或不再需要,避免数据丢失。
docker volume inspect [卷名]
:查看卷的详细信息。
2.6 日志和监控
docker logs [容器名或ID]
:查看容器的日志。
- 注意: 查看日志时,可以使用
--tail
和-f
选项分别查看最近的日志和实时日志,以便于调试。日志文件可能会很大,建议配置日志驱动和日志轮转策略。
docker stats [容器名或ID]
:显示容器的实时资源使用统计信息。
- 注意: 实时监控容器资源使用情况时,可以结合其他监控工具(如 Prometheus, Grafana)进行更全面的监控和告警。
2.7 清理命令
docker system prune
:清理未使用的数据,包括未使用的镜像、挂起的容器、未使用的卷和网络。
- 注意: 使用清理命令时,要特别注意会删除未使用的数据。建议在生产环境中使用前仔细检查,以免误删重要资源。可以使用
--volumes
选项一并删除未使用的卷,但需谨慎操作。
docker image prune
:删除未使用的镜像。
docker container prune
:删除所有停止的容器。
docker volume prune
:删除未使用的卷。
docker network prune
:删除未使用的网络。
3. 注意事项和最佳实践
3.1 镜像操作
- 从可信的源拉取镜像,以避免安全风险。
- 定期更新镜像以获取最新的安全修复和功能改进。
- Dockerfile 中的命令尽量保持简单和明确,以减少镜像层的数量和大小。
- 使用多阶段构建来减少最终镜像的大小。
3.2 容器操作
- 后台运行容器时,确保有日志管理方案以便排查问题。
- 使用有意义的名称便于管理和调试。
- 映射端口时,注意主机和容器的端口冲突问题。
- 挂载卷时,确保正确的读写权限,避免数据丢失或权限问题。
- 停止容器时,最好先确保容器内的进程已妥善关闭,以防止数据损坏或丢失。
- 删除容器时,请确保容器中的重要数据已备份或持久化,避免数据丢失。
- 强制删除正在运行的容器时需谨慎操作。
3.3 网络操作
- 创建自定义网络时,可以选择适当的驱动,以满足不同的应用场景需求。
- 确保网络配置与主机网络环境不冲突。
3.4 卷操作
- 创建卷时,可以指定不同的驱动程序和选项,以满足存储需求。
- 注意卷的生命周期管理,避免产生未使用的孤立卷。
- 删除卷时,请确保卷中的数据已备份或不再需要,避免数据丢失。
3.5 日志和监控
- 查看日志时,可以使用
--tail
和-f
选项分别查看最近的日志和实时日志,以便于调试。 - 日志文件可能会很大,建议配置日志驱动和日志轮转策略。
- 实时监控容器资源使用情况时,可以结合其他监控工具进行更全面的监控和告警。
3.6 清理命令
- 使用清理命令时,要特别注意会删除未使用的数据。
- 在生产环境中使用前仔细检查,以免误删重要资源。
- 使用
--volumes
选项一并删除未使用的卷时需谨慎操作。