当前位置: 首页 > article >正文

Docker 常用命令基础详解(一)

一、Docker 初相识

在当今数字化时代,软件开发和部署的效率与灵活性成为了关键因素。Docker,作为一款开源的应用容器引擎,犹如一颗璀璨的明星,照亮了软件开发与部署的道路,为开发者们带来了前所未有的便利。它就像是一个神奇的 “集装箱”,可以将应用程序及其所有的依赖项打包在一起,形成一个独立的、可移植的运行环境。无论你是在开发、测试还是生产环境中,Docker 都能确保你的应用程序稳定运行,就像在一个 “密封舱” 里一样,不受外界环境的干扰。

(一)Docker 的独特优势

  1. 轻量级与高效性:与传统的虚拟机相比,Docker 容器的启动速度极快,几乎可以瞬间启动,而虚拟机的启动则需要数分钟的时间。这就好比你要出门,Docker 容器就像穿上一件轻便的外套,瞬间就能出发;而虚拟机则像穿上厚重的铠甲,准备时间漫长。此外,Docker 容器的资源占用极少,多个容器可以共享同一宿主机的内核,大大提高了资源的利用率。就像在一个大房子里,Docker 容器可以巧妙地利用每一寸空间,而虚拟机则像一个个巨大的房间,占据了大量的空间。
  1. 一致性与可移植性:Docker 容器确保了应用程序在不同环境中的一致性。无论你是在本地开发环境、测试环境还是生产环境中运行,应用程序的行为都是一致的。这就好比你制作了一个精美的蛋糕,无论你把它放在哪个厨房里展示,它的味道和外观都是一样的。而且,Docker 容器可以轻松地在不同的操作系统和基础设施之间移植,让你的应用程序可以在任何地方运行,就像一个万能的 “旅行家”。
  1. 快速部署与迭代:使用 Docker,你可以快速地部署和更新应用程序。通过简单的命令,你就可以创建、启动和停止容器,大大缩短了应用程序的部署时间。这就好比你在搭建一个乐高积木城堡,Docker 就像一个神奇的工具,让你可以快速地搭建和修改城堡,而不需要花费大量的时间和精力。

(二)Docker 的广泛应用场景

  1. 开发与测试环境:在开发和测试过程中,Docker 可以帮助开发者快速搭建和管理开发环境。每个开发人员都可以拥有自己独立的开发环境,避免了因环境差异而导致的问题。这就好比每个开发者都有自己的专属实验室,里面的设备和工具都是一样的,不会因为环境的不同而影响实验结果。
  1. 持续集成与持续部署(CI/CD):Docker 与 CI/CD 工具的完美结合,实现了自动化的构建、测试和部署过程。每次代码更新时,Docker 可以自动构建新的容器,并将其部署到生产环境中,大大提高了软件开发的效率和质量。这就好比一个高效的生产线,每个环节都紧密相连,自动化地完成产品的生产和交付。
  1. 微服务架构:在微服务架构中,每个微服务都可以独立地打包成一个 Docker 容器,实现了服务的独立部署、扩展和管理。这就好比一个大型的商场,每个店铺都是一个独立的个体,可以自由地调整经营策略和布局,而不会影响到其他店铺的运营。

(三)掌握 Docker 命令的重要性

要充分发挥 Docker 的强大功能,掌握其常用命令是至关重要的。这些命令就像是开启 Docker 宝藏的钥匙,让你能够轻松地管理容器、构建镜像、进行网络配置等操作。无论是创建和启动容器,还是管理镜像和仓库,每一个命令都有其独特的用途和魅力。接下来,让我们一起深入探索 Docker 的常用命令,开启这段精彩的技术之旅吧!

二、Docker 基础命令

2.1 查看版本信息

在使用 Docker 时,了解其版本信息是很有必要的,这有助于我们确定所使用的功能是否可用,以及排查一些与版本相关的问题。查看 Docker 版本信息的命令非常简单,只需在终端中输入:

 

docker version

执行该命令后,你会看到类似如下的输出:

 

Client:

Version: 20.10.12

API version: 1.41

Go version: go1.16.12

Git commit: e91ed57

Built: Mon Dec 13 11:45:04 2021

OS/Arch: linux/amd64

Context: default

Experimental: true

Server:

Engine:

Version: 20.10.12

API version: 1.41 (minimum version 1.12)

Go version: go1.16.12

Git commit: 459d0df

Built: Mon Dec 13 11:43:49 2021

OS/Arch: linux/amd64

Experimental: false

containerd:

Version: 1.4.12

GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d

runc:

Version: 1.0.3

GitCommit: v1.0.3-0-gf46b6ba

docker-init:

Version: 0.19.0

GitCommit: de40ad0

从输出中可以看到,它分别展示了客户端(Client)和服务端(Server)的版本信息,包括版本号、API 版本、Go 版本、Git 提交信息、构建时间、操作系统和架构等。这就像是我们购买了一款软件,查看版本信息可以让我们了解这个软件的 “生产日期” 和 “配置参数”,以便更好地使用它。

2.2 获取帮助文档

当我们对某个 Docker 命令不太熟悉,或者想了解某个命令的具体用法和参数时,Docker 提供的帮助文档就像是一位贴心的 “小助手”,随时为我们答疑解惑。获取 Docker 整体帮助文档的命令如下:

 

docker --help

执行该命令后,你会看到一个非常详细的帮助页面,它列出了 Docker 的所有命令以及一些通用选项。例如,你可以看到管理命令(Management Commands),如 builder、config、container 等,以及普通命令(Commands),如 attach、build、commit 等。每个命令后面都有简短的描述,让你对其功能有一个初步的了解。这就好比你拿到了一本厚厚的使用说明书,虽然内容很多,但它能帮助你全面了解这个工具的各种功能。

如果你想获取某个具体命令的帮助文档,比如docker run命令,只需在命令后面加上--help,如下所示:

 

docker run --help

这样,你就会得到关于docker run命令的详细帮助信息,包括该命令的用法、各种选项及其含义。例如,--name选项用于为容器指定一个名称,-d选项用于在后台运行容器并返回容器 ID 等。通过查看这些详细的帮助信息,我们可以更准确地使用命令,避免因为参数错误而导致的问题。

2.3 了解系统状态

要全面了解 Docker 系统的运行状态,我们可以使用docker info命令。这个命令就像是一个 “系统探测器”,它会收集并展示 Docker 系统的各种详细信息,包括镜像数量、容器数量、存储驱动、网络配置等。在终端中输入以下命令:

 

docker info

执行后,你会看到类似如下的输出:

 

Containers: 3

Running: 1

Paused: 0

Stopped: 2

Images: 5

Server Version: 20.10.12

Storage Driver: overlay2

Backing Filesystem: extfs

Supports d_type: true

Native Overlay Diff: true

userxattr: false

Logging Driver: json-file

Cgroup Driver: cgroupfs

Cgroup Version: 1

Plugins:

Volume: local

Network: bridge host ipvlan macvlan null overlay

Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

Swarm: inactive

Runtimes: runc

Default Runtime: runc

Init Binary: docker-init

containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d

runc version: v1.0.3-0-gf46b6ba

init version: de40ad0

Security Options:

seccomp

Profile: default

Kernel Version: 5.10.0-10-amd64

Operating System: Debian GNU/Linux 11 (bullseye)

OSType: linux

Architecture: x86_64

CPUs: 2

Total Memory: 3.855GiB

Name: your-hostname

ID: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

Docker Root Dir: /var/lib/docker

Debug Mode: false

Registry: https://index.docker.io/v1/

Labels:

Experimental: false

Insecure Registries:

127.0.0.0/8

Live Restore Enabled: false

Product License: Community Engine

从输出中,我们可以清晰地看到当前系统中容器的运行状态,如正在运行的容器数量、暂停的容器数量和停止的容器数量。同时,还能了解到镜像的数量、存储驱动的类型、网络插件的信息等。这些信息对于我们监控和管理 Docker 系统非常重要,就像医生通过各种检查数据来了解病人的身体状况一样,我们可以根据这些信息来优化和调整 Docker 系统的配置,确保其稳定高效地运行。

三、镜像操作命令

3.1 列出本地镜像

在使用 Docker 的过程中,我们常常需要查看本地已经下载或构建的镜像,这时就可以使用docker images命令。这个命令就像是一个 “镜像仓库管理员”,它会将本地镜像的信息清晰地展示出来。其基本语法如下:

 

docker images [OPTIONS] [REPOSITORY[:TAG]]

其中,OPTIONS是一些可选参数,REPOSITORY表示镜像仓库名称,TAG表示镜像标签。如果不指定REPOSITORY和TAG,则会列出所有本地镜像。常见的参数有:

  • -a:列出本地所有的镜像,包括中间映像层。默认情况下,会过滤掉中间映像层,只展示最终的镜像。就好比一个仓库里有很多货物,默认只展示摆放在外面的成品,而-a参数可以让我们看到仓库里所有的货物,包括半成品。
  • --digests:显示镜像的摘要信息,这对于确保镜像的完整性和一致性非常重要。就像我们购买商品时,查看商品的防伪标识,确保买到的是正品。
  • -f:根据指定条件过滤结果。例如,docker images -f "dangling=true"可以列出所有虚悬镜像(仓库名和标签都是<none>的镜像)。这就像是在仓库里筛选出特定类型的货物,方便我们管理和清理。
  • --format:指定返回值的模板文件,通过 Go 语言模板文件来定制展示的格式,让输出更符合我们的需求。
  • --no-trunc:显示完整的镜像信息,不会截断输出。有时候镜像的一些信息可能比较长,默认会截断显示,使用这个参数就可以看到完整的内容。
  • -q:只显示镜像 ID,简洁明了,适合在需要快速获取镜像 ID 的场景中使用。

执行docker images命令后,会看到一个类似如下的表格:

 

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx latest 8609f97d428d 2 weeks ago 133MB

ubuntu 20.04 94e19c99c257 3 weeks ago 72.8MB

hello-world latest c54a2cc56cbb 5 months ago 1.84kB

表格中的各列含义如下:

  • REPOSITORY:镜像所属的仓库名称,就像货物所属的品牌或类别。
  • TAG:镜像的标签,用于区分同一仓库中的不同版本,通常latest表示最新版本。这就好比商品的不同批次或型号。
  • IMAGE ID:镜像的唯一标识,类似于商品的条形码,通过它可以准确地识别和操作镜像。
  • CREATED:镜像的创建时间,让我们了解镜像的 “年龄”。
  • SIZE:镜像的大小,反映了镜像所占用的存储空间,就像商品的体积大小。

3.2 搜索镜像

当我们需要在 Docker Hub 中查找特定的镜像时,docker search命令就派上用场了。它就像是一个 “镜像搜索引擎”,帮助我们在海量的镜像中找到符合需求的那一个。其基本语法为:

 

docker search [OPTIONS] TERM

其中,OPTIONS是可选参数,TERM是搜索的关键词,比如镜像名称或相关描述。常见的参数有:

  • --automated:只列出自动构建的镜像,这些镜像通常是由一些自动化工具或流程创建的,质量和稳定性可能更有保障。
  • --filter, -f:根据指定条件过滤结果。例如,docker search -f "stars=30" nginx可以筛选出点赞数(STARS)大于等于 30 的 nginx 镜像。这就像是在搜索引擎中设置筛选条件,快速找到符合要求的信息。
  • --limit:限制搜索结果的最大条数,默认是 25 条。如果我们只需要查看前几个最相关的镜像,可以使用这个参数来控制输出数量。
  • --no-trunc:不截断输出,显示完整的镜像描述和其他信息,让我们能更全面地了解镜像的详细情况。
  • --stars, -s:只展示点赞数(STARS)不低于该数值的结果,通过点赞数可以大致了解镜像的受欢迎程度和质量。

例如,我们要搜索 nginx 镜像,可以执行以下命令:

 

docker search nginx

执行后,会看到一个类似如下的表格:

 

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

nginx Official build of Nginx. 16640 [OK]

jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1715 [OK]

richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 815 [OK]

表格中的各列含义如下:

  • NAME:镜像的名称,包含仓库名和镜像名,方便我们识别和拉取。
  • DESCRIPTION:镜像的描述信息,简单介绍了镜像的用途和特点,帮助我们判断是否符合需求。
  • STARS:镜像的点赞数,反映了该镜像在社区中的受欢迎程度,点赞数越高,通常表示该镜像质量和实用性较好。
  • OFFICIAL:表示是否为官方镜像,官方镜像由软件的官方项目组创建和维护,质量和安全性更有保障。
  • AUTOMATED:表示是否是自动构建的镜像,自动构建的镜像一般是通过特定的脚本或工具自动生成的,构建过程更加标准化和高效。

3.3 拉取镜像

从远程仓库获取镜像到本地,我们使用docker pull命令,它就像是一个 “镜像搬运工”,将我们需要的镜像从远程仓库搬运到本地。其基本语法为:

 

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

其中,OPTIONS是可选参数,NAME是镜像的名称,TAG是镜像的标签,用于指定版本,DIGEST是镜像的摘要,用于唯一标识一个镜像版本。如果不指定TAG,默认会拉取latest版本。常见的参数有:

  • --all-tags, -a:下载所有标签的镜像,这在我们需要获取某个镜像的所有版本时非常有用,不过可能会占用较多的存储空间。
  • --disable-content-trust:忽略镜像的校验,默认情况下,Docker 会对下载的镜像进行校验,确保镜像的完整性和安全性。但在某些特殊情况下,我们可能需要忽略校验,比如使用一些未经过官方签名的镜像时。

例如,要拉取最新版本的 nginx 镜像,可以执行:

 

docker pull nginx

如果要拉取特定版本,比如 1.19 版本的 nginx 镜像,则执行:

 

docker pull nginx:1.19

当我们执行拉取命令时,Docker 会首先检查本地是否已经存在该镜像,如果不存在,就会从远程仓库下载。下载过程中,会显示下载的进度和相关信息,让我们清楚地了解下载的状态。

3.4 推送镜像

将本地镜像推送到远程仓库,我们需要使用docker push命令,但在推送之前,必须先登录到远程仓库,就像我们要把东西寄到某个地方,首先要获得这个地方的 “通行证”。登录远程仓库的命令是docker login,执行后会提示输入用户名和密码。登录成功后,就可以使用docker push命令推送镜像了,其基本语法为:

 

docker push [OPTIONS] NAME[:TAG]

其中,OPTIONS是可选参数,NAME是镜像的名称,TAG是镜像的标签。如果不指定TAG,默认会推送latest版本。常见的参数有:

  • --disable-content-trust:忽略镜像的校验,在推送镜像时,也可以选择忽略校验,不过这可能会带来一定的安全风险,所以在正式环境中要谨慎使用。

例如,我们要将本地的一个名为myapp:v1.0的镜像推送到 Docker Hub 上,首先登录:

 

docker login

输入用户名和密码登录成功后,执行推送命令:

 

docker push myapp:v1.0

推送过程中,会显示推送的进度和相关信息。如果推送成功,我们就可以在远程仓库中看到这个镜像了,这样其他人也可以从远程仓库拉取这个镜像来使用。

3.5 删除镜像

当我们不再需要某个本地镜像时,可以使用docker rmi命令将其删除,它就像是一个 “镜像清理工”,帮助我们释放磁盘空间,保持本地镜像仓库的整洁。其基本语法为:

 

docker rmi [OPTIONS] IMAGE [IMAGE...]

其中,OPTIONS是可选参数,IMAGE是要删除的镜像,可以是镜像 ID、镜像名或镜像名:标签的形式。常见的参数有:

  • -f, --force:强制删除镜像,即使该镜像被一个或多个容器使用。有时候,我们想要删除的镜像可能正在被容器使用,如果直接删除会报错,这时使用-f参数就可以强制删除。但要注意,强制删除可能会导致正在运行的容器出现问题,所以在使用时要谨慎。
  • --no-prune:不移除该镜像的过程镜像,默认情况下,删除镜像时会同时移除相关的过程镜像,使用这个参数可以保留过程镜像。

例如,要删除名为myapp:v1.0的镜像,可以执行:

 

docker rmi myapp:v1.0

如果要删除所有镜像,可以使用以下命令:

 

docker rmi -f $(docker images -qa)

这里的$(docker images -qa)会列出所有本地镜像的 ID,然后-f参数强制删除这些镜像。在执行删除所有镜像的命令时要特别小心,确保确实不再需要这些镜像,以免误删重要的镜像。


http://www.kler.cn/a/544495.html

相关文章:

  • 微信服务号推送消息
  • 【Linux】玩转Linux操作系统(四)文本处理
  • 从当下到未来:蓝耘平台和 DeepSeek 应用实践的路径探索,勾勒 AI 未来新蓝图
  • Golang的消息队列架构
  • VS2022中.Net Api + Vue 从创建到发布到IIS
  • cap2:1000分类的ResNet的TensorRT部署指南(python版)
  • CentOS-Stream 9更换RT实时内核
  • webpack研究,解决了什么问题
  • 第二十二章 P - R 开头的术语
  • 文心一言与gpt,核心原理对比
  • React源码揭秘 | scheduler 并发更新原理
  • 《五福临门》后期鉴赏(三)
  • C# ASP.NET的发展历程
  • 「软件设计模式」工厂方法模式 vs 抽象工厂模式
  • 操作系统之文件系统
  • Python+selenium基于PO模式的Web自动化测试框架
  • 蓝桥杯之并查集
  • 鸿蒙Harmony打包脚本使用整理
  • 在生成器表达式中调用 tuple() 函数,会返回元组,是因为 tuple() 会消耗整个生成器,将所有元素转换成元组。
  • KubeSphere 和 K8s 高可用集群离线部署全攻略