Docker简介和Docker常见命令

目录

[1. Docker 简介](#1. Docker 简介)

[1.1 Docker 的核心概念](#1.1 Docker 的核心概念)

[1.2 Docker 的优势](#1.2 Docker 的优势)

[1.3 Docker 工作流程](#1.3 Docker 工作流程)

[2. 常见命令](#2. 常见命令)

[2.1 基本命令](#2.1 基本命令)

[2.2 镜像操作](#2.2 镜像操作)

[2.3 容器操作](#2.3 容器操作)

[2.4 网络操作](#2.4 网络操作)

[2.5 卷操作](#2.5 卷操作)

[2.6 日志和监控](#2.6 日志和监控)

[2.7 清理命令](#2.7 清理命令)

[3. 注意事项和最佳实践](#3. 注意事项和最佳实践)

[3.1 镜像操作](#3.1 镜像操作)

[3.2 容器操作](#3.2 容器操作)

[3.3 网络操作](#3.3 网络操作)

[3.4 卷操作](#3.4 卷操作)

[3.5 日志和监控](#3.5 日志和监控)

[3.6 清理命令](#3.6 清理命令)


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 工作流程

  1. 编写 Dockerfile: 开发者编写一个 Dockerfile 来定义应用程序的环境和依赖项。
  2. 构建镜像: 使用 docker build 命令将 Dockerfile 构建成一个镜像。
  3. 运行容器: 使用 docker run 命令从镜像创建并启动一个容器。
  4. 管理容器: 使用各种 Docker 命令(如 docker ps, docker stop, docker rm 等)来管理容器的生命周期。
  5. 发布和分享: 使用 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 stopdocker 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 选项一并删除未使用的卷时需谨慎操作。
相关推荐
全能全知者18 分钟前
docker快速安装与配置mongoDB
mongodb·docker·容器
非著名程序员1 小时前
腾讯为什么支持开源?
开源
CSDN云计算1 小时前
如何以开源加速AI企业落地,红帽带来新解法
人工智能·开源·openshift·红帽·instructlab
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
阿尔帕兹2 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
ZHOU西口4 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩4 小时前
Istio Gateway发布服务
云原生·gateway·istio
梓羽玩Python6 小时前
推荐一款用了5年的全能下载神器:Motrix!全平台支持,不限速下载网盘文件就靠它!
程序员·开源·github