Docker 常用命令底子详解(一)

打印 上一主题 下一主题

主题 893|帖子 893|积分 2679

一、Docker 初相识

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


  • 轻量级与高效性:与传统的虚拟机相比,Docker 容器的启动速度极快,险些可以瞬间启动,而虚拟机的启动则需要数分钟的时间。这就好比你要出门,Docker 容器就像穿上一件轻便的外套,瞬间就能出发;而虚拟机则像穿上厚重的铠甲,准备时间漫长。别的,Docker 容器的资源占用极少,多个容器可以共享同一宿主机的内核,大大进步了资源的利用率。就像在一个大房子里,Docker 容器可以巧妙地利用每一寸空间,而虚拟机则像一个个巨大的房间,占据了大量的空间。

  • 一致性与可移植性:Docker 容器确保了应用步调在不同情况中的一致性。无论你是在当地开发情况、测试情况还是生产情况中运行,应用步调的行为都是一致的。这就好比你制作了一个精致的蛋糕,无论你把它放在哪个厨房里展示,它的味道和外观都是一样的。而且,Docker 容器可以轻松地在不同的操作系统和底子设施之间移植,让你的应用步调可以在任何地方运行,就像一个全能的 “旅行家”。

  • 快速部署与迭代:使用 Docker,你可以快速地部署和更新应用步调。通过简单的命令,你就可以创建、启动和停止容器,大大缩短了应用步调的部署时间。这就好比你在搭建一个乐高积木城堡,Docker 就像一个神奇的工具,让你可以快速地搭建和修改城堡,而不需要花费大量的时间和精力。
(二)Docker 的广泛应用场景


  • 开发与测试情况:在开发和测试过程中,Docker 可以资助开发者快速搭建和管理开发情况。每个开发职员都可以拥有自己独立的开发情况,避免了因情况差异而导致的问题。这就好比每个开发者都有自己的专属实验室,里面的设备和工具都是一样的,不会因为情况的不同而影响实验效果。

  • 持续集成与持续部署(CI/CD):Docker 与 CI/CD 工具的完美团结,实现了自动化的构建、测试和部署过程。每次代码更新时,Docker 可以自动构建新的容器,并将其部署到生产情况中,大大进步了软件开发的服从和质量。这就好比一个高效的生产线,每个环节都紧密相连,自动化地完成产物的生产和交付。

  • 微服务架构:在微服务架构中,每个微服务都可以独立地打包成一个 Docker 容器,实现了服务的独立部署、扩展和管理。这就好比一个大型的阛阓,每个店肆都是一个独立的个体,可以自由地调整谋划计谋和布局,而不会影响到其他店肆的运营。
(三)把握 Docker 命令的重要性

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

2.1 查看版本信息

在使用 Docker 时,了解其版本信息是很有必要的,这有助于我们确定所使用的功能是否可用,以及排查一些与版本干系的问题。查看 Docker 版本信息的命令非常简单,只需在终端中输入:
  1. [/code] docker version
  2. 执行该命令后,你会看到雷同如下的输出:
  3. [code]
复制代码
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 整体资助文档的命令如下:
  1. [/code] docker --help
  2. 执行该命令后,你会看到一个非常详细的资助页面,它列出了 Docker 的所有命令以及一些通用选项。比方,你可以看到管理命令(Management Commands),如 builder、config、container 等,以及平凡命令(Commands),如 attach、build、commit 等。每个命令后面都有简短的描述,让你对其功能有一个初步的了解。这就好比你拿到了一本厚厚的使用阐明书,虽然内容许多,但它能资助你全面了解这个工具的各种功能。
  3. 假如你想获取某个具体命令的资助文档,比如docker run命令,只需在命令后面加上--help,如下所示:
  4. [code]
复制代码
docker run --help
这样,你就会得到关于docker run命令的详细资助信息,包罗该命令的用法、各种选项及其含义。比方,--name选项用于为容器指定一个名称,-d选项用于在后台运行容器并返回容器 ID 等。通过查看这些详细的资助信息,我们可以更准确地使用命令,避免因为参数错误而导致的问题。
2.3 了解系统状态

要全面了解 Docker 系统的运行状态,我们可以使用docker info命令。这个命令就像是一个 “系统探测器”,它会收集并展示 Docker 系统的各种详细信息,包罗镜像数量、容器数量、存储驱动、网络配置等。在终端中输入以下命令:
  1. [/code] docker info
  2. 执行后,你会看到雷同如下的输出:
  3. [code]
复制代码
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命令。这个命令就像是一个 “镜像堆栈管理员”,它会将当地镜像的信息清楚地展示出来。其根本语法如下:
  1. [/code] docker images [OPTIONS] [REPOSITORY[:TAG]]
  2. 其中,OPTIONS是一些可选参数,REPOSITORY表示镜像堆栈名称,TAG表示镜像标签。假如不指定REPOSITORY和TAG,则会列出所有当地镜像。常见的参数有:
  3. [list]
  4. [*]-a:列出当地所有的镜像,包罗中心映像层。默认情况下,会过滤掉中心映像层,只展示最终的镜像。就好比一个堆栈里有许多货品,默认只展示摆放在表面的成品,而-a参数可以让我们看到堆栈里所有的货品,包罗半成品。
  5. [/list]
  6. [list]
  7. [*]--digests:显示镜像的摘要信息,这对于确保镜像的完整性和一致性非常重要。就像我们购买商品时,查看商品的防伪标识,确保买到的是正品。
  8. [/list]
  9. [list]
  10. [*]-f:根据指定条件过滤效果。比方,docker images -f "dangling=true"可以列出所有虚悬镜像(堆栈名和标签都是<none>的镜像)。这就像是在堆栈里筛选出特定范例的货品,方便我们管理和清理。
  11. [/list]
  12. [list]
  13. [*]--format:指定返回值的模板文件,通过 Go 语言模板文件来定制展示的格式,让输出更符合我们的需求。
  14. [/list]
  15. [list]
  16. [*]--no-trunc:显示完整的镜像信息,不会截断输出。偶然候镜像的一些信息可能比较长,默认会截断显示,使用这个参数就可以看到完整的内容。
  17. [/list]
  18. [list]
  19. [*]-q:只显示镜像 ID,简洁明了,适合在需要快速获取镜像 ID 的场景中使用。
  20. [/list] 执行docker images命令后,会看到一个雷同如下的表格:
  21. [code]
复制代码
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命令就派上用场了。它就像是一个 “镜像搜索引擎”,资助我们在海量的镜像中找到符合需求的那一个。其根本语法为:
  1. [/code] docker search [OPTIONS] TERM
  2. 其中,OPTIONS是可选参数,TERM是搜索的关键词,比如镜像名称或干系描述。常见的参数有:
  3. [list]
  4. [*]--automated:只列出自动构建的镜像,这些镜像通常是由一些自动化工具或流程创建的,质量和稳固性可能更有保障。
  5. [/list]
  6. [list]
  7. [*]--filter, -f:根据指定条件过滤效果。比方,docker search -f "stars=30" nginx可以筛选出点赞数(STARS)大于等于 30 的 nginx 镜像。这就像是在搜索引擎中设置筛选条件,快速找到符合要求的信息。
  8. [/list]
  9. [list]
  10. [*]--limit:限定搜索效果的最大条数,默认是 25 条。假如我们只需要查看前几个最干系的镜像,可以使用这个参数来控制输出数量。
  11. [/list]
  12. [list]
  13. [*]--no-trunc:不截断输出,显示完整的镜像描述和其他信息,让我们能更全面地了解镜像的详细情况。
  14. [/list]
  15. [list]
  16. [*]--stars, -s:只展示点赞数(STARS)不低于该数值的效果,通过点赞数可以大抵了解镜像的受欢迎程度和质量。
  17. [/list] 比方,我们要搜索 nginx 镜像,可以执行以下命令:
  18. [code]
复制代码
docker search nginx
执行后,会看到一个雷同如下的表格:
  1. [/code] NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  2. nginx Official build of Nginx. 16640 [OK]
  3. jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1715 [OK]
  4. richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 815 [OK]
  5. 表格中的各列含义如下:
  6. [list]
  7. [*]NAME:镜像的名称,包罗堆栈名和镜像名,方便我们识别和拉取。
  8. [/list]
  9. [list]
  10. [*]DESCRIPTION:镜像的描述信息,简单先容了镜像的用途和特点,资助我们判断是否符合需求。
  11. [/list]
  12. [list]
  13. [*]STARS:镜像的点赞数,反映了该镜像在社区中的受欢迎程度,点赞数越高,通常表示该镜像质量和实用性较好。
  14. [/list]
  15. [list]
  16. [*]OFFICIAL:表示是否为官方镜像,官方镜像由软件的官方项目组创建和维护,质量和安全性更有保障。
  17. [/list]
  18. [list]
  19. [*]AUTOMATED:表示是否是自动构建的镜像,自动构建的镜像一般是通过特定的脚本或工具自动天生的,构建过程更加尺度化和高效。
  20. [/list] [size=3]3.3 拉取镜像[/size]
  21. 从长途堆栈获取镜像到当地,我们使用docker pull命令,它就像是一个 “镜像搬运工”,将我们需要的镜像从长途堆栈搬运到当地。其根本语法为:
  22. [code]
复制代码
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
其中,OPTIONS是可选参数,NAME是镜像的名称,TAG是镜像的标签,用于指定版本,DIGEST是镜像的摘要,用于唯一标识一个镜像版本。假如不指定TAG,默认会拉取latest版本。常见的参数有:


  • --all-tags, -a:下载所有标签的镜像,这在我们需要获取某个镜像的所有版本时非常有效,不过可能会占用较多的存储空间。


  • --disable-content-trust:忽略镜像的校验,默认情况下,Docker 会对下载的镜像举行校验,确保镜像的完整性和安全性。但在某些特别情况下,我们可能需要忽略校验,比如使用一些未颠末官方署名的镜像时。
比方,要拉取最新版本的 nginx 镜像,可以执行:
  1. [/code] docker pull nginx
  2. 假如要拉取特定版本,比如 1.19 版本的 nginx 镜像,则执行:
  3. [code]
复制代码
docker pull nginx:1.19
当我们执行拉取命令时,Docker 会首先检查当地是否已经存在该镜像,假如不存在,就会从长途堆栈下载。下载过程中,会显示下载的进度和干系信息,让我们清楚地了解下载的状态。
3.4 推送镜像

将当地镜像推送到长途堆栈,我们需要使用docker push命令,但在推送之前,必须先登录到长途堆栈,就像我们要把东西寄到某个地方,首先要获得这个地方的 “通行证”。登录长途堆栈的命令是docker login,执行后会提示输入用户名和密码。登录成功后,就可以使用docker push命令推送镜像了,其根本语法为:
  1. [/code] docker push [OPTIONS] NAME[:TAG]
  2. 其中,OPTIONS是可选参数,NAME是镜像的名称,TAG是镜像的标签。假如不指定TAG,默认会推送latest版本。常见的参数有:
  3. [list]
  4. [*]--disable-content-trust:忽略镜像的校验,在推送镜像时,也可以选择忽略校验,不过这可能会带来肯定的安全风险,所以在正式情况中要谨慎使用。
  5. [/list] 比方,我们要将当地的一个名为myapp:v1.0的镜像推送到 Docker Hub 上,首先登录:
  6. [code]
复制代码
docker login
输入用户名和密码登录成功后,执行推送死令:
  1. [/code] docker push myapp:v1.0
  2. 推送过程中,会显示推送的进度和干系信息。假如推送成功,我们就可以在长途堆栈中看到这个镜像了,这样其他人也可以从长途堆栈拉取这个镜像来使用。
  3. [size=3]3.5 删除镜像[/size]
  4. 当我们不再需要某个当地镜像时,可以使用docker rmi命令将其删除,它就像是一个 “镜像清理工”,资助我们释放磁盘空间,保持当地镜像堆栈的整洁。其根本语法为:
  5. [code]
复制代码
docker rmi [OPTIONS] IMAGE [IMAGE...]
其中,OPTIONS是可选参数,IMAGE是要删除的镜像,可以是镜像 ID、镜像名或镜像名:标签的形式。常见的参数有:


  • -f, --force:强制删除镜像,即使该镜像被一个或多个容器使用。偶然候,我们想要删除的镜像可能正在被容器使用,假如直接删除会报错,这时使用-f参数就可以强制删除。但要留意,强制删除可能会导致正在运行的容器出现问题,所以在使用时要谨慎。


  • --no-prune:不移除该镜像的过程镜像,默认情况下,删除镜像时会同时移除干系的过程镜像,使用这个参数可以保存过程镜像。
比方,要删除名为myapp:v1.0的镜像,可以执行:
  1. [/code] docker rmi myapp:v1.0
  2. 假如要删除所有镜像,可以使用以下命令:
  3. [code]
复制代码
docker rmi -f $(docker images -qa)
这里的$(docker images -qa)会列出所有当地镜像的 ID,然后-f参数强制删除这些镜像。在执行删除所有镜像的命令时要特别小心,确保确实不再需要这些镜像,以免误删重要的镜像。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表