Docker镜像命令汇总笔记

     1.Docker镜像 

      Docker 镜像是用于部署容器化应用的轻量级、可执行的软件包。它们包含了运行特定应用所需的所有内容,包括代码、运行时环境、系统工具、系统库和设置。Docker 镜像通过文件来实现不同层的分发,每一层对应Dockerfile中的一个指令,如安装软件包或复制文件,这种分层机制允许共享、复用和缓存,从而提高构建效率。

      镜像是只读的,并且是Docker容器生命周期的起点。当需要启动一个容器时,Docker 从镜像中提取文件并在其上创建一个可写层,用于存储运行时数据。每个容器都是从镜像生成的,但容器可以修改其可写层,这些修改不会影响原始镜像。

      用户可以自定义镜像,通过编写Dockerfile并使用`docker build`命令构建,或者从Docker Hub等公共仓库拉取现有的镜像。镜像可以通过`docker pull`命令从远程仓库下载到本地环境,同样,用户可以使用`docker push`命令将本地构建的镜像上传到远程仓库,以便于分享和协作。

      Docker 镜像的这种封装、移植性和版本控制特性,使得它们成为现代应用部署和管理的理想选择。
 

该栏目主要介绍Docker相关的知识,便于自查,持续更新,如果小伙伴们觉得不错的话,请大家收藏与点赞!多多支持!

2. 创建镜像命令

 2.1 docker build

功能:命令用于使用 Dockerfile 文件创建镜像

该命令用于根据指定的 Dockerfile 构建一个新的镜像。Dockerfile 是一个文本文件,包含了用于构建镜像的所有指令。

docker build [OPTIONS] PATH

参数说明:

  • PATH: 指定构建上下文的路径,通常是包含 Dockerfile 的目录路径。

OPTIONS说明:

    --build-arg=[] :设置镜像创建时的变量;
    --cpu-shares :设置 cpu 使用权重;
    --cpu-period :限制 CPU CFS周期;
    --cpu-quota :限制 CPU CFS配额;
    --cpuset-cpus :指定使用的CPU id;
    --cpuset-mems :指定使用的内存 id;
    --disable-content-trust :忽略校验,默认开启;
    -f :指定要使用的Dockerfile路径;
    --force-rm :设置镜像过程中删除中间容器;
    --isolation :使用容器隔离技术;
    --label=[] :设置镜像使用的元数据;
    -m :设置内存最大值;
    --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
    --no-cache :创建镜像的过程不使用缓存;
    --pull :尝试去更新镜像的新版本;
    --quiet, -q :安静模式,成功后只输出镜像 ID;
    --rm :设置镜像成功后删除中间容器;
    --shm-size :设置/dev/shm的大小,默认值是64M;
    --ulimit :Ulimit配置。
    --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
    --network: 默认 default。在构建期间设置RUN指令的网络模式

示例:

#使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1
docker build -t runoob/ubuntu:v1 .

#使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像
docker build github.com/creack/docker-firefox

#也可以通过 -f 指定Dockerfile 文件的位置  
docker build -f /path/to/a/Dockerfile 

 docker build构建上下文路径(PATH)可以是一个本地的文件路径,也可以是一个远程 Git 仓库的 URL,如果构建过程中需要访问私有仓库,需要先登录到该仓库。构建镜像是一个相对耗时的过程,特别是对于大型应用,因为它需要逐层构建。

2.2 docker commit

功能:依据改动过的容器,创建新镜像并提交

该命令用于从更改过的容器中创建一个新的镜像。这个命令通常在你修改了容器的文件系统,或者想要保存容器当前状态为一个新的镜像时使用

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

参数说明:

  • CONTAINER: 要提交的容器的ID或名称。
  • REPOSITORY: 新镜像的仓库名称。
  • TAG: 新镜像的标签,默认为 "latest"。

OPTIONS说明:

-a, --author="": 设置镜像作者。
-c, --change=[]: 使用Dockerfile指令来修改镜像。
-m, --message="": 设置提交信息。
-p, --pause: 在提交过程中暂停容器。

示例:

docker commit -a "作者" -m "描述" container_id myrepo:mytag

docker commit container_id myrepo:mytag

docker commit提交的镜像不会包含容器的历史记录或元数据,它仅仅是当前容器的快照,如果容器正在运行,docker commit 命令会先暂停容器,通常建议使用 Dockerfile 来创建镜像,因为这样更可控和可重复。

3. 镜像展示

3.1 docker images

功能:列出本地镜像

该命令用于列出本地机器上的镜像。它显示了镜像的仓库名称、标签、镜像ID、创建时间和大小等信息。

表头说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签版本号
  • IMAGE ID:镜像I的D
  • CREATED:镜像的创建时间
  • SIZE:镜像的大小

Tag说明:

同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 mysql,docker 将默认使用 mysql:latest 镜像

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

参数说明:

  • REPOSITORY: 镜像的仓库名称。
  • TAG: 镜像的标签。

OPTIONS说明:

-a,--all   #列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests   #显示镜像的摘要信息;
-f,--filter #显示满足条件的镜像;
--format    #指定返回值的模板文件;
--no-trunc  #显示完整的镜像信息;
-q,--quiet  #只显示镜像ID

示例:

#查看本地镜像列表
docker images  

# 列出所有的镜像
docker images -a

#列出本地镜像中为ubuntu的镜像列表 
docker images  ubuntu 

# 仅列出镜像的ID
docker images -q

3.2 docker image ls

功能:列出本地镜像

docker image ls 是一个简写命令,它实际上是 docker images 命令的别名。它用于列出本地机器上的 Docker 镜像。

docker image ls [OPTIONS] [REPOSITORY[:TAG]]

参数说明:

  • REPOSITORY: 镜像的仓库名称。
  • TAG: 镜像的标签。

OPTIONS说明:

-a, --all: 显示所有的镜像(包括中间镜像)。
--digests: 显示镜像的摘要信息。
-f, --filter: 根据条件过滤镜像。
--no-trunc: 不截断输出。
-q, --quiet: 仅显示镜像的ID。
--viz: 以树状图的形式显示镜像的层级关系。

示例:

docker image ls -a

docker image ls -q

4.获取与推送镜像

4.1 docker pull

 功能:下载镜像,用于从镜像仓库中拉取一个镜像或仓库

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

 参数说明:

  • NAME: 镜像的名称。
  • TAG: 镜像的标签,默认为 "latest"。
  • DIGEST: 镜像的摘要。

OPTIONS说明: 

-a, --all-tags: 拉取指定仓库的所有标签。
--disable-content-trust: 拉取时不验证镜像的真实性。
--filter: 根据条件过滤镜像。
--quiet, -q: 静默模式,不显示详细输出。

示例

# 拉取最新标签的镜像
docker pull ubuntu

# 拉取指定标签的镜像
docker pull ubuntu:18.01

# 拉取指定仓库的所有标签的镜像
docker pull -a ubuntu

拉取镜像之前,确保你已经登录到 Docker Hub 或者私有仓库,如果你想要拉取私有镜像,需要先使用 docker login 命令登录到相应的仓库,拉取镜像是一个网络操作,可能需要一些时间,特别是对于较大的镜像。

4.2 docker push

功能:将本地的镜像上传到镜像仓库

该命令用于将本地的镜像上传到镜像仓库中。这通常是在 Docker Hub 或者其他私有的 Docker 仓库中进行操作。

docker push [OPTIONS] NAME[:TAG]

参数说明:

  • NAME: 镜像的名称。
  • TAG: 镜像的标签,默认为 "latest"。

OPTIONS说明:

-a, --all-tags:推送指定仓库的所有标签。
--disable-content-trust:关闭对推送镜像的数字签名。

示例:

# 推送最新标签的镜像
docker push username/repository:latest


# 推送指定标签的镜像
docker push username/repository:tagname

在推送镜像之前,确保你已经登录到目标仓库。可以使用 docker login 命令进行登录,镜像名称通常包括用户名和仓库名,格式为 username/repository。

5. 删除镜像

5.1 docker rmi

功能:用于删除一个或多个本地的镜像

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

参数说明:

  • IMAGE: 要删除的镜像的名称或ID

OPTIONS说明:

-f, --force: 强制删除镜像,即使该镜像被容器引用。
--no-prune: 不自动清理未使用的父镜像。
-q, --quiet: 静默模式,不显示删除的镜像ID。

示例:

# 删除单个
docker rmi  镜像ID

# 删除多个
docker rmi  镜像名1:TAG 镜像名2:TAG

# 删除全部
docker rmi  $(docker images -qa)

# 强制删除
docker rmi -f username/repository:tagname

不能删除正在运行的容器所使用的镜像。如果需要删除这样的镜像,你首先需要停止并删除使用该镜像的所有容器。除非你用强制删除。删除镜像之后,任何基于该镜像创建的容器都将无法正常工作,除非你重新拉取或构建该镜像


5.2 docker image rm

功能:docker image rm 是 docker rmi 命令的旧称,用于删除一个或多个本地的 Docker 镜像。从 Docker 1.25 版本开始,推荐使用 docker rmi 命令来替代 docker image rm。

docker image rm [OPTIONS] IMAGE [IMAGE...]

参数说明:

  • IMAGE: 要删除的镜像的名称或ID。

OPTIONS说明:

-f, --force: 强制删除镜像,即使该镜像被容器引用。
--no-prune: 不自动清理未使用的父镜像。

示例:

# 删除指定的镜像
docker image rm username/repository:tagname

# 强制删除镜像,即使它正在被容器使用
docker image rm -f username/repository:tagname

# 删除多个
docker image rm username/repository:tag1 username/repository:tag2

尽管 docker image rm 仍然可以使用,但是既然Docker更新了,我们就使用 docker rmi 命令。和官方保存一致。

6.镜像TAG

6.1 docker tag

 功能:标记本地镜像,将其归入某一仓库

该命令用于给本地的镜像打上一个标签,通常用于准备将镜像推送到镜像仓库

docker tag [OPTIONS] IMAGE [IMAGE...] [REGISTRY_HOST/][USERNAME/]NAME:TAG

参数说明:

  • IMAGE: 要打标签的镜像的名称或ID。
  • REGISTRY_HOST: 镜像仓库的地址,例如 Docker Hub 的地址是 docker.io
  • USERNAME: 用户名,如果你在私有仓库中推送镜像,需要指定用户名。
  • NAME: 镜像的名称。
  • TAG: 镜像的标签,通常用于指定镜像的版本。

OPTIONS说明:

-f, --force: 覆盖现有的标签。

 示例:

#将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像
docker tag ubuntu:15.10 runoob/ubuntu:v3 

# 给镜像打上标签并指定仓库地址
docker tag existing-image registry.example.com/username/new-image:tag

# 覆盖现有的标签
docker tag -f existing-image new-image:tag

我们可以给同一个镜像打上多个标签,方便管理和分发,标签分类可以使我们更好的管理镜像。

6.2 docker image tag

功能:docker tag 的别名。

docker image tag 是 docker tag 命令的另一种说法,两者完全相同,用于给本地的 Docker 镜像打上一个新的标签(tag)。这通常是为了准备将镜像推送到远程仓库,或者是为了在本地更好地组织和管理镜像

docker image tag [OPTIONS] IMAGE [IMAGE...] [REGISTRY_HOST/][USERNAME/]NAME:TAG

 参数说明:

  • IMAGE: 要打标签的镜像的名称或ID。
  • REGISTRY_HOST: 镜像仓库的地址,例如 Docker Hub 的地址是 docker.io
  • USERNAME: 用户名,如果你在私有仓库中推送镜像,需要指定用户名。
  • NAME: 镜像的名称。
  • TAG: 镜像的标签,通常用于指定镜像的版本。

OPTIONS说明:

-f, --force: 覆盖现有的标签。

示例:

docker image tag existing-image new-image:tag

docker image tag existing-image registry.example.com/username/new-image:tag

docker image tag -f existing-image new-image:tag

7. 搜索镜像

7.1 docker search

功能:搜索仓库中的镜像,相当于在百度网页中搜索,查询网站 https://hub.docker.com,该命令用于在 Docker Hub 上搜索镜像。你可以使用关键词来搜索,也可以通过其他参数来过滤搜索结果。

表头说明:

  • NAME:镜像名称
  • DESCRIPTION:镜像说明
  • STARS:点赞数量
  • OFFICIAL:是否是官方的
  • AUTOMATED是否是自动构建的

操作命令:


docker search [OPTIONS] TERM

参数说明:

  • TERM: 搜索的关键词。

OPTIONS说明:

--automated: 只显示自动构建的镜像。
--filter "KEY=VALUE": 根据指定的参数过滤结果。
--no-trunc: 不截断输出。
-s, --stars: 只显示评价大于指定数字的镜像。
--limt, --filter: 设置返回结果的数量。

示例:

# 搜索关键词为 "ubuntu" 的镜像
docker search ubuntu

# 搜索出Stars大于3000的
docker search mysql --filter=STARS=3000 

# 只列出N个镜像,默认5个
docker search --limit 5 redis


# 搜索自动构建的镜像
docker search --automated

8.导入/导出镜像

 8.1 docker import

功能:从归档文件中创建镜像

该命令用于从一个 tar 文件或 URL 导入容器快照,从而创建一个新的 Docker 镜像。与 docker load 不同,docker import 可以从容器快照中创建新的镜像,而不需要保留镜像的历史和元数据。

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

参数说明:

  • file|URL|-: 输入文件的路径、本地文件或 URL,或者使用 - 从标准输入读取。
  • REPOSITORY[:TAG]: (可选)为导入的镜像指定仓库和标签。

OPTIONS说明:

-c, --changes:在导入镜像时,对Dockerfile进行修改。
-m, --message:设置导入镜像的提交信息。
-u, --author:设置导入镜像的作者。

示例:

# 从本地 tar 文件导入镜像
docker import mycontainer.tar mynewimage:latest

# 从 URL 导入镜像
docker import http://example.com/mycontainer.tar mynewimage:latest

# 从标准输入导入镜像
cat mycontainer.tar | docker import - mynewimage:latest

# 在导入过程中应用变更
docker import -c "ENV LANG=en_US.UTF-8" -c "CMD /bin/bash" mycontainer.tar mynewimage:latest

docker import 创建的镜像不会保留原始镜像的历史和元数据。使用 -c 选项可以在导入过程中应用 Dockerfile 指令,从而自定义新镜像的配置。导入的 tar 文件必须是使用 docker export 创建的容器快照,或者是兼容的其他格式,

8.2 docker load 

功能:命令用于从 tar 归档文件加载一个镜像或一组镜像到本地 Docker 镜像库中。这通常用于备份镜像或在不同主机之间迁移镜像

docker load [OPTIONS]

OPTIONS说明:

-i, --input="": 指定输入文件,通常是一个 tar 文件,包含镜像数据。
-q, --quiet: 静默模式,不显示加载过程的详细信息。

示例:

# 从标准输入加载镜像
cat myimage.tar | docker load

# 从指定文件加载镜像
docker load --input myimage.tar

# 静默模式下加载镜像
docker load --input myimage.tar --quiet

注意事项

  • 使用 docker load 命令加载的镜像保留了其历史和元数据。
  • 可以使用 docker save 命令将镜像保存为 tar 文件,然后使用 docker load 命令加载。
  • 确保 tar 文件是有效的 Docker 镜像存档,否则加载过程可能会失败。

与 docker import 的区别

  • docker load 用于加载由 docker save 命令保存的镜像。
  • docker import 用于从容器快照创建镜像,不保留镜像的历史和元数据。

 8.3 docker save

功能: 将指定镜像保存成 tar 归档文件,该命令用于将一个或多个本地镜像保存到一个 tar 归档文件中。这通常用于备份镜像或在不同主机之间迁移镜像。

docker save [OPTIONS] IMAGE [IMAGE...]

参数说明:

  • IMAGE: 要保存的镜像的名称或ID。

OPTIONS说明:

-o, --output="": 指定输出文件的名称,如果不指定,输出将被发送到标准输出。

 示例:

# 将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

# 将mysql:5.7镜像打包归档
docker save -o /home/docker/mysql5.7.tar mysql:5.7

# 将镜像保存到标准输出
docker save myimage:latest > myimage.tar

#将镜像保存到指定文件
docker save -o myimage.tar myimage:latest

# 保存多个镜像到同一个文件
docker save -o myimages.tar myimage1:latest myimage2:latest

注意事项

  • 使用 docker save 命令保存的镜像包含了其历史和元数据。
  • 保存的 tar 文件可以用于 docker load 命令来加载镜像。
  • 保存大型镜像或多个镜像可能会生成非常大的 tar 文件,这可能会占用大量的磁盘空间。

与 docker export 的区别

  • docker save 用于保存镜像,包括镜像的所有层和元数据。
  • docker export 用于导出容器的文件系统快照,不包括镜像的构建上下文或历史。

9. 查看镜像信息

9.1 docker inspect

功能:显示一个容器或镜像的元数据,该命令用于获取有关 Docker 对象(容器、镜像、网络或卷)的详细信息。这个命令对于调试和获取对象的配置非常有用。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

参数说明:

  • NAME|ID: 要检查的容器、镜像、网络或卷的名称或ID。

OPTIONS说明:

-f, --format:格式化输出,使用Go模板格式化。
-s, --size:显示总大小。
--type:返回给定类型的信息("container"或"image")

示例:

# 获取容器的详细信息
docker inspect mycontainer

# 以 JSON 格式获取镜像的详细信息
docker inspect myimage:latest

# 格式化输出容器的 IP 地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mycontainer

# 获取容器的总大小
docker inspect -s mycontainer

输出默认为 JSON 格式,除非使用 --format 选项进行格式化,可以使用 --format 选项来定制输出,例如提取特定的字段或属性,如果需要检查多个对象,可以一次性传递多个名称或ID。

9.2 docker image inspect

功能:docker inspect 的别名,用于获取有关 Docker 镜像的详细信息,包括镜像的配置、层级结构、标签等。这个命令对于调试和获取镜像的配置非常有用

docker image inspect [OPTIONS] IMAGE [IMAGE...]

参数说明:

  • IMAGE: 要检查的镜像的名称或ID。

OPTIONS说明:

-f, --format="": 用于格式化输出的模板。
-s, --size: 显示总大小。
--verbose: 显示详细的输出。

示例:

# 获取镜像的详细信息
docker image inspect myimage:latest

# 格式化输出镜像的标签
docker image inspect --format='{{.Config.Labels}}' myimage:latest

# 获取镜像的总大小
docker image inspect -s myimage:latest

# 显示详细的输出
docker image inspect --verbose myimage:latest


10.清理镜像

 10.1 docker image prune

功能:命令用于删除所有悬空(dangling)的镜像。悬空镜像是指那些没有被任何容器引用的镜像,通常是因为使用了 docker build 构建新镜像后,旧的中间层镜像不再需要了

docker image prune [OPTIONS]

OPTIONS说明:

-a, --all: 删除所有镜像,不仅仅是悬空的。
-f, --force: 强制删除,不进行确认提示。
-filter: 提供过滤器条件来删除指定的镜像。

 示例:

# 删除所有悬空镜像
docker image prune

# 强制删除所有悬空镜像,不进行确认提示
docker image prune -f

# 删除所有镜像 这将删除所有镜像,不仅仅是悬空的
docker image prune -a

# 使用过滤条件删除镜像
docker image prune --filter "label=<key>=<value>"

使用 -a 选项时要非常小心,因为它会删除所有镜像,包括那些正在被使用的镜像,在执行 docker image prune 之前,建议先运行 docker images 命令查看哪些镜像是悬空的。定期清理悬空镜像可以帮助释放磁盘空间

10.2 docker system prune

功能:用于清理 Docker 系统,删除悬空(dangling)的镜像,同时也删除悬空的容器、网络和卷。这个命令是快速清理未使用资源的便捷方式

docker system prune [OPTIONS]

OPTIONS说明: 

-a, --all: 删除所有停止的容器(不只是悬空的)。
-f, --force: 强制删除,不进行确认提示。
-volumes: 也删除悬空的卷。
-filter: 提供过滤条件来删除指定的资源。

示例:

# 删除所有悬空的镜像、容器、网络和卷
docker system prune

# 强制删除所有悬空的资源,不进行确认提示
docker system prune -f

# 删除所有停止的容器 不只是悬空的
docker system prune -a

# 删除所有资源,包括悬空的卷
docker system prune --volumes

# 使用过滤条件删除资源
docker system prune --filter "until=24h"

11.签名镜像

11.1 docker trust

功能:是 Docker Engine 的一个特性,它允许你对 Docker 镜像进行数字签名和验证。这样,你可以确保镜像的完整性和来源的真实性。使用 docker trust 命令,你可以签署镜像,查看签署的镜像信息,以及撤销对镜像的签名。

操作步骤:

# 生成签名密钥 这将生成一个密钥对,用于签署镜像。私钥应该妥善保管,公钥可以分享到 Docker 信任存储库
docker trust key generate <signer_name>


# 将公钥添加到 Docker 信任存储库 以便可以对镜像进行签名
docker trust signer add <signer_name> <repository_name>

# 对镜像进行签名 使用你的私钥对指定的镜像标签进行签名。签名后,你可以将签名的镜像推送到 Docker 信任存储库
docker trust sign <repository_name>:<tag>

# 查看镜像的签名信息
docker trust inspect <repository_name>:<tag>


# 撤销镜像的签名
docker trust revoke <repository_name>:<tag>

# 启用内容信任
export DOCKER_CONTENT_TRUST=1

请注意,docker trust 命令通常与 Docker 的内容信任(Content Trust)系统一起使用,该系统提供了一种机制来确保镜像的真实性和完整性

12.其他镜像命令

 12.1 docker history

功能: 查看指定镜像的创建历史

该命令用于获取一个 Docker 镜像的构建历史和元数据。这个命令列出了用于创建镜像的每一层的元数据,包括每层的创建时间、作者、大小以及构建这一层所用的 Dockerfile 指令

docker history [OPTIONS] IMAGE

参数说明:

  • IMAGE: 指定要查看历史的镜像名称或ID。

OPTIONS说明:

    -H :以可读的格式打印镜像大小和日期,默认为true;
    --no-trunc :显示完整的提交记录;
    -q :仅列出提交记录ID。

示例:

# 查看镜像的历史 
docker history myimage:latest

# 仅显示每层的ID
docker history -q myimage:latest

# 显示完整的提交信息
docker history --no-trunc myimage:latest

输出信息

  • IMAGE ID: 镜像层的唯一ID。
  • CREATED BY: 创建这一层的命令或Dockerfile指令。
  • CREATED: 创建这一层的时间。
  • SIZE: 这一层的大小。
  • COMMENT: 构建过程中添加的注释(如果有)

13.最后

感谢大家,请大家多多支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微刻时光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值