Docker基础学习(5.Docker镜像命令)

ops/2024/12/23 6:25:37/

作者简介:码上言


代表教程:Spring Boot + vue-element 开发个人博客项目实战教程


专栏内容:个人博客系统


我的文档网站:http://xyhwh-nav.cn/


微信公众号:码上言

文章目录

    • Docker run流程
    • 镜像是什么?
    • 它从哪里来?
    • 镜像常用命令
      • 1、镜像列表
      • 2、查询镜像
      • 3、拉取镜像
      • 4、删除镜像
      • 5、镜像信息
    • 问题

Docker run流程

fc92ae64f4ce7f4e3960ed5f267ff5c39a4418aed3dadc0b.png

镜像是什么?

之前我们也介绍过镜像的含义,这里再来回顾一下镜像。

  • 一个分层存储的文件
  • 一个软件的环境
  • 一个镜像可以创建N个容器
  • 一种标准化的交付
  • 一个不包含Linux内核而又精简的Linux操作系统

镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME>查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/中。

[root@lswwdapldn ~]# docker history mysql:8.0.27
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
3218b38490ce   15 months ago   /bin/sh -c #(nop)  CMD ["mysqld"]               0B        
<missing>      15 months ago   /bin/sh -c #(nop)  EXPOSE 3306 33060            0B        
<missing>      15 months ago   /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B        
<missing>      15 months ago   /bin/sh -c ln -s usr/local/bin/docker-entryp…   34B       
<missing>      15 months ago   /bin/sh -c #(nop) COPY file:345a22fe55d3e678…   14.5kB    
<missing>      15 months ago   /bin/sh -c #(nop) COPY dir:2e040acc386ebd23b…   1.12kB    
<missing>      15 months ago   /bin/sh -c #(nop)  VOLUME [/var/lib/mysql]      0B        
<missing>      15 months ago   /bin/sh -c {   echo mysql-community-server m…   380MB     
<missing>      15 months ago   /bin/sh -c echo 'deb http://repo.mysql.com/a…   55B       
<missing>      15 months ago   /bin/sh -c #(nop)  ENV MYSQL_VERSION=8.0.27-…   0B        
<missing>      15 months ago   /bin/sh -c #(nop)  ENV MYSQL_MAJOR=8.0          0B        
<missing>      15 months ago   /bin/sh -c set -ex;  key='A4A9406876FCBD3C45…   1.84kB    
<missing>      15 months ago   /bin/sh -c apt-get update && apt-get install…   52.2MB    
<missing>      15 months ago   /bin/sh -c mkdir /docker-entrypoint-initdb.d    0B     
......

它从哪里来?

Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。地址:https://hub.docker.com/explore

配置加速器在上一篇已经讲到,可以去查看。

镜像常用命令

docker 执行命令格式: docker [options] command(具体命令)

[root@lswwdapldn ~]# docker --helpUsage:  docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:run         Create and run a new container from an imageexec        Execute a command in a running containerps          List containersbuild       Build an image from a Dockerfilepull        Download an image from a registrypush        Upload an image to a registryimages      List imageslogin       Log in to a registrylogout      Log out from a registrysearch      Search Docker Hub for imagesversion     Show the Docker version informationinfo        Display system-wide information
[root@lswwdapldn ~]# docker run --helpUsage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]Create and run a new container from an imageAliases:docker container run, docker runOptions:--add-host list                  Add a custom host-to-IP mapping (host:ip)-a, --attach list                    Attach to STDIN, STDOUT or STDERR--blkio-weight uint16            Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)--blkio-weight-device list       Block IO weight (relative device weight) (default [])--cap-add list                   Add Linux capabilities--cap-drop list                  Drop Linux capabilities--cgroup-parent string           Optional parent cgroup for the container--cgroupns string                Cgroup namespace to use (host|private)'host':    Run the container in the Docker host's cgroup namespace'private': Run the container in its own private cgroup namespace'':        Use the cgroup namespace as configured by thedefault-cgroupns-mode option on the daemon (default)--cidfile string                 Write the container ID to the file--cpu-period int                 Limit CPU CFS (Completely Fair Scheduler) period--cpu-quota int                  Limit CPU CFS (Completely Fair Scheduler) quota--cpu-rt-period int              Limit CPU real-time period in microseconds--cpu-rt-runtime int             Limit CPU real-time runtime in microseconds
......

1、镜像列表

我们可以使用 docker images 来列出本地主机上的镜像。

[root@lswwdapldn ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
nginx              latest    605c77e624dd   14 months ago   141MB
mysql              8.0.27    3218b38490ce   15 months ago   516MB
hello-world        latest    feb5d9fea6a5   17 months ago   13.3kB

各个选项说明:

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

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本。

2、查询镜像

# 执行命令
docker images mysql# 返回结果
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        8.0.27    3218b38490ce   15 months ago   516MB

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/,这个在前面的Docker架构那一篇中有所介绍。

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

# 查询指定的镜像格式
docker search [options] <镜像名>[:TAG]# 显示完整的镜像信息
docker search --no-trunc <镜像名>
[root@lswwdapldn ~]# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13945     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5314      [OK]       
percona                         Percona Server is a fork of the MySQL relati…   601       [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   762       [OK]       
circleci/mysql                  MySQL is a widely used, open-source relation…   29                   
bitnami/mysql                   Bitnami MySQL Docker Image                      80                   [OK]
bitnami/mysqld-exporter                                                         4                    
ubuntu/mysql                    MySQL open source fast, stable, multi-thread…   43                   
cimg/mysql                                                                      0                    
rapidfort/mysql                 RapidFort optimized, hardened image for MySQL   14                   
google/mysql                    MySQL server for Google Compute Engine          23                   [OK]
ibmcom/mysql-s390x              Docker image for mysql-s390x                    2                    
rapidfort/mysql8-ib             RapidFort optimized, hardened image for MySQ…   0                    
hashicorp/mysql-portworx-demo                                                   0                    
newrelic/mysql-plugin           New Relic Plugin for monitoring MySQL databa…   1                    [OK]
rapidfort/mysql-official        RapidFort optimized, hardened image for MySQ…   0                    
databack/mysql-backup           Back up mysql databases to... anywhere!         82                   
linuxserver/mysql               A Mysql container, brought to you by LinuxSe…   38                   
mirantis/mysql                                                                  0                    
docksal/mysql                   MySQL service images for Docksal - https://d…   0                    
vitess/mysqlctld                vitess/mysqlctld                                1                    [OK]
linuxserver/mysql-workbench                                                     48                   
bitnamicharts/mysql                                                             0                    
eclipse/mysql                   Mysql 5.7, curl, rsync                          0                    [OK]
drud/mysql                                                    
  • NAME: 镜像仓库源的名称

  • DESCRIPTION: 镜像的描述

  • OFFICIAL: 是否 docker 官方发布

  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

  • AUTOMATED: 自动构建。

3、拉取镜像

从远程仓库下载镜像命令格式:docker pull <镜像名>[:TAG | @DIGEST]

  • TAG:版本号、标签
  • DIGEST:摘要

推荐通过「版本号」下载镜像,如果不指定版本,默认最新版 latest

[root@lswwdapldn ~]# docker pull mysql

4、删除镜像

完整的命令格式:docker image rm [options] <镜像名>[:TAG | IMAGE ID]

简写的命令格式:docker rmi [options] <镜像名>[:TAG | IMAGE ID]

我们现在来实践一下我们删除之前的hello-world镜像。

[root@lswwdapldn ~]#  docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container c1092bda5000 is using its referenced image feb5d9fea6a5

返回结果报错了,原因有两点,要么是容器(container)曾经运行过(类似于 Windows 里运行的软件无法删除),要么存在镜像依赖。

[root@lswwdapldn ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND     CREATED     STATUS      PORTS       NAMES             
c1092bda5000   hello-world   "/hello"    5 hours ago Exited (0) 5 hours ago strange_poitras                                                        

显然,我们只要删除container即可:

[root@lswwdapldn ~]# docker rm c1092bda5000
c1092bda5000

然后再次查看,发现hello-world没了。

docker ps -a

最后再来删除镜像

[root@lswwdapldn ~]# docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359

5、镜像信息

镜像是由一层一层的文件系统组成,在下载镜像的时候就发现,下载了很多文件,那么如何查看这些文件信息呢?

在 Windows 系统,如果查看文件夹的信息,右键 -> 属性 即可查看文件夹里的文件个数、创建时间等信息。镜像也可以查看自己的信息。

查看镜像信息的命令格式:docker images inspect <镜像名>[:TAG | ID]

docker images inspect <镜像名>[:TAG | ID]# 可以简写
docker inspect <镜像名>[:TAG | ID]

例如:查看mysql的镜像信息

[root@lswwdapldn ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
nginx              latest    605c77e624dd   14 months ago   141MB
mysql              8.0.27    3218b38490ce   15 months ago   516MB[root@lswwdapldn ~]# docker image inspect mysql:8.0.27
[{"Id": "sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b","RepoTags": ["mysql:8.0.27"。。。。。。。。。。。。。。。。。。

问题

这里记录一些平时可能会遇到的问题

1、在制作Docker镜像时 REPOSITORY TAG 为 <none> <none>

[root@lswwdapldn test]# docker build -t test .    #执行此命令通过dockerfile构建镜像
[root@lswwdapldn test]# docker images 
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
<none>                             <none>              6015ffec3ed9        3 minutes ago       444 MB

就出现 <none> <none>构建的镜像没有名字跟标签

[root@lswwdapldn test]# docker tag 6015ffec3ed9 test:v1.0    #手动通过image id 进行打标签
[root@lswwdapldn test]# docker images 
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
test                               v1.0                6015ffec3ed9        5 minutes ago       444 MB

2、我想删除这些名为<none> 的镜像

  • 查询所有的none镜像
docker images  | grep none
  • 查询所有的none镜像的id
docker images  | grep none | awk '{print $3}'
  • 删除所有的none镜像
docker images  | grep none | awk '{print $3}' | xargs docker rmi

3、docker none镜像

  • 有效的 none 镜像

    • Docker文件系统的组成,docker镜像是由很多 layers组成的,每个 layer之间有父子关系,所有的docker文件系统层默认都存储在/var/lib/docker/graph目录下,docker称之为图层数据库。
    • 最后做一个总结< none>:< none> 镜像是一种中间镜像,我们可以使用docker images -a来看到,他们不会造成硬盘空间占用的问题(因为这是镜像的父层,必须存在的),但是会给我们的判断带来迷惑。
  • 无效的 none 镜像

    • 另一种类型的 < none>:< none> 镜像是dangling images ,这种类型会造成磁盘空间占用问题。
    • docker的悬挂(dangling)文件系统与上面的原理类似,他是没有被使用到的并且不会关联任何镜像,因此我们需要一种机制去清理这些悬空镜像。
    • 我们在上文已经提到了有效的< none>镜像,他们是一种中间层,那无效的< none>镜像又是怎么出现的?这些 dangling镜像主要是我们触发 docker builddocker pull命令产生的。

    使用下面的命令可以清理

    docker rmi $(docker images -f "dangling=true" -q)
    

http://www.ppmy.cn/ops/19208.html

相关文章

ISP比普通的静态代理相比有什么优势?

ISP&#xff08;Internet Service Provider&#xff09;&#xff0c;即互联网服务提供商&#xff0c;是向广大用户综合提供互联网接入业务、信息业务、增值业务的电信运营商。而静态代理则是一个固定不变的代理IP地址&#xff0c;具有稳定性强、兼容性好和管理方便等特点。当我…

【Websokect】服务器https协议下ws连接失败问题及解决办法

在服务器使用HTTPS协议下连接WebSocket时&#xff0c;通常会出现一些常见的问题导致连接失败。以下是一些可能的原因和解决办法&#xff1a; SSL证书配置问题&#xff1a; 确保您的服务器上已正确配置SSL证书&#xff0c;并且证书有效。如果证书配置不正确或者过期&#xff0c;…

算法06链表

算法06链表 一、链表概述1.1概述1.2链表的组成部分&#xff1a;1.3链表的优缺点&#xff1a; 二、链表典例力扣707.设计链表难点分析&#xff1a;&#xff08;1&#xff09;MyLinkedList成员变量的确定&#xff1a;&#xff08;2&#xff09;初始化自定义链表&#xff1a;&…

微前端实现原理详解——以Single-Spa为例

Single-Spa是一个用于微前端架构的JavaScript框架。它允许在一个应用程序中同时加载多个前端框架&#xff0c;例如React、Angular、Vue等。以下是Single-Spa的核心架构解析&#xff1a; 核心思想&#xff1a;Single-Spa的核心思想是将前端应用程序拆分为多个小应用&#xff0c;…

iOS - 多线程-读写安全

文章目录 iOS - 多线程-读写安全1. 多读单写1.1 场景1.2 实现方案1.2.1 pthread_rwlock&#xff1a;读写锁1.2.1.1 示例 1.2.2 dispatch_barrier_async&#xff1a;异步栅栏调用1.2.2.1 示例 iOS - 多线程-读写安全 假设有一个文件&#xff0c;A线程进行读取操作&#xff0c;B…

Ajax和axios基础

AJAX Asynchronous JavaScript And XML 异步的JavaScript和XML 作用 数据交换: 通过Ajax可以给服务器发送请求,服务器将数据直接响应回给浏览器. 异步交互: 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术. 同步和异步 同步发送请求: 浏览器发…

【TensorFlow深度学习】人工智能绪论与深度学习前瞻

人工智能绪论与深度学习前瞻 【引言】人工智能的起源与发展机器学习与深度学习的关系深度学习的兴衰与复兴深度学习的特点与前瞻 【引言】 在信息技术蓬勃发展的今天&#xff0c;人工智能已成为推动科技革新和社会进步的关键驱动力。从最初的计算机辅助人类处理信息&#xff0…