首页 > 其他分享 >超详细!!关于Docker的使用镜像操作

超详细!!关于Docker的使用镜像操作

时间:2024-12-12 23:57:47浏览次数:12  
标签:容器 image ls 详细 镜像 Docker docker

需要搭建帮助的可以去taobao搜索许风继续吹技术服务,谢谢!!!

需要搭建帮助的可以去taobao搜索许风继续吹技术服务,谢谢!!!

一、获取镜像

之前提到过,Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

docker pull ubuntu:18.04

二、运行

2.1有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面的 ubuntu:18.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

docker run -it --rm ubuntu:18.04 bash

2.2 进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 cat /etc/os-release,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 Ubuntu 18.04.1 LTS 系统。

cat /etc/os-release

三、列出镜像

要想列出已经下载下来的镜像,可以使用 docker image ls 命令。

docker image ls

3.1镜像体积

如果仔细观察,会注意到,这里标识的所占用空间和在 Docker Hub 上看到的镜像大小不同。比如,ubuntu:18.04 镜像大小,你可以通过 docker system df 命令来便捷的查看镜像、容器、数据卷所占用的空间。

docker system df

3.2虚悬镜像

上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为 <none>。由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none> 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:

docker image ls -f dangling=true

四、中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数。

 五、列出部分镜像

不加任何参数的情况下,docker image ls 会列出所有顶层镜像,但是有时候我们只希望列出部分镜像。docker image ls 有好几个参数可以帮助做到这个事情。根据仓库名列出镜像:

docker image ls ubuntu

5.1列出特定的某个镜像,也就是说指定仓库名和标签

docker image ls ubuntu:18.04

5.2 除此以外,docker image ls 还支持强大的过滤器参数 --filter,或者简写 -f。之前我们已经看到了使用过滤器来列出虚悬镜像的用法,它还有更多的用法。比如,我们希望看到在 mongo:3.2 之后建立的镜像,可以用下面的命令:

docker image ls -f since=ubuntu:18.04

5.3 以特定格式显示

默认情况下,docker image ls 会输出一个完整的表格,但是我们并非所有时候都会需要这些内容。比如,刚才删除虚悬镜像的时候,我们需要利用 docker image ls 把所有的虚悬镜像的 ID 列出来,然后才可以交给 docker image rm 命令作为参数来删除指定的这些镜像,这个时候就用到了 -q 参数。

docker image ls -q

5.4 另外一些时候,我们可能只是对表格的结构不满意,希望自己组织列;或者不希望有标题,这样方便其它程序解析结果等,这就用到了 Go 的模板语法

比如,下面的命令会直接列出镜像结果,并且只包含镜像ID和仓库名:

docker image ls --format "{{.ID}}: {{.Repository}}"

5.5 或者打算以表格等距显示,并且有标题行,和默认一样,不过自己定义列:

docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

六、利用 commit 理解镜像构成

6.1 回顾一下之前我们学到的知识,镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。

现在让我们以定制一个 Web 服务器为例子,来讲解镜像是如何构建的

docker run --name webserver -d -p 80:80 nginx

6.2 如果是在本机运行的 Docker,那么可以直接访问:http://localhost ,如果是在虚拟机、云服务器上安装的 Docker,则需要将 localhost 换为虚拟机地址或者实际云服务器地址。

直接用浏览器访问的话,我们会看到默认的 Nginx 欢迎页面。

6.3 现在,假设我们非常不喜欢这个欢迎页面,我们希望改成欢迎 Docker 的文字,我们可以使用 docker exec 命令进入容器,修改其内容。

docker exec -it webserver bash
echo '<h1>Hello, Docker</h1>' > /usr/share/nginx/html/index.html
exit

6.4 我们以交互式终端方式进入 webserver 容器,并执行了 bash 命令,也就是获得一个可操作的 Shell。

然后,我们用 <h1>H6.5ello, Docker!</h1> 覆盖了 /usr/share/nginx/html/index.html 的内容。

现在我们再刷新浏览器的话,会发现内容被改变了。

6.5 我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff 命令看到具体的改动。

docker diff webserver

6.6 现在我们定制好了变化,我们希望能将其保存下来形成镜像。

要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。

docker commit `
    --author "许风继续吹" `
    --message "modify webpage" `
    webserver `
    nginx:v2

其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。这点和 git 版本控制相似,不过这里这些信息可以省略留空。

七、慎用 docker commit

使用 docker commit 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

首先,如果仔细观察之前的 docker diff webserver 的结果,你会发现除了真正想要修改的 /usr/share/nginx/html/index.html 文件外,由于命令的执行,还有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,将会导致镜像极为臃肿。

此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为 黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体的操作。这种黑箱镜像的维护工作是非常痛苦的。

而且,回顾之前提及的镜像所使用的分层存储的概念,除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。如果使用 docker commit 制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到。这会让镜像更加臃肿。

标签:容器,image,ls,详细,镜像,Docker,docker
From: https://blog.csdn.net/2301_79479472/article/details/144429401

相关文章

  • SpringCloud Nacos (docker 搭建 && 项目运行) 基于 Cloud 2022 版本
    一、使用docker安装nacos基础镜像1、安装docker(省略)2、创建docker-compose.ymlversion:'3.7'services:nacos:image:nacos/nacos-server:latestcontainer_name:nacosenvironment:-MODE=standalone#单机模式-PREFER_HOST_MODE=hos......
  • 最新LoadRunner12安装教程(很详细)
    LoadRunner是HP(现MicroFocus)开发的一款性能测试工具,广泛用于模拟多用户场景测试应用程序的性能和稳定性。以下是LoadRunner12的详细安装教程,包括准备、安装和配置步骤。一、安装前的准备1.1检查系统要求确保你的电脑满足以下最低硬件和软件需求:操作系统:Window......
  • Docker启动Nacos2.4.3并且使用MySQL
    1.拉取容器dockerpullnacos/nacos-server:v2.4.32.创建宿主机挂载目录mkdir-p/docker/nacos/logs/mkdir-p/docker/nacos/conf/3.启动临时容器并拷贝配置文件启动临时容器dockerrun-d--namenacos-temp-p8848:8848nacos/nacos-server:v2.4.3拷贝Nacos......
  • 《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose
    @目录二、高级篇(大厂进阶)5.Docker-compose容器编排5.1是什么5.2能干嘛5.3去哪下5.4Compose核心概念5.5Compose使用的三个步骤5.6Compose常用命令5.7Compose编排微服务5.7.1改造升级微服务工程docker_boot5.7.2不用Compose5.7.3swagger测试5.7.4上面成功了,有哪些问题?5.7.5......
  • HTTPS加密认证过程详细理解
    简单来说HTTPS也就是在HTTP基础上加上了SSL/TLS,SSL是TLS的前身,在建立TCP三次握手后,建立SSL/TLS四次握手,也是主要的加密认证过程。1、首先客户端先向服务端打招呼,并发送自己支持的TLS版本,选择的加密套件(支持的加密算法列表),以及随机生成的第1个随机数。对应12、接着服务端也......
  • docker
    目录docker介绍安装和配置文件详解镜像与容器相关操作dockerFile指令dockerFile实现镜像自动化构建实现数据持久化实现容器间通信和网络docker-compose单机编排工具搭建harbor私有仓库docker介绍Docker的组成Docker主机(Host):一个物理机或虚拟机,用于运行Docker......
  • 通过 Docker Compose 本地启动 zk 集群
    项目如果你想直接看代码,可以直接看我的git-docker-centos项目地址,最近发布了v1.2.0版本,readme已经非常详细了,包括项目的使用方式和需求规划本机环境基本只依赖Docker的安装,DockerDesktop的安装教程可参考我之前的博客-DockerDesktop安装方式和开发镜像分享,当然,更详......
  • Transformer从零详细解读
    1.从全局角度概括Transformer输入汉字:我爱你到Transformer中处理后会得到一个输出的结果:ILOVEYOU对Transformer进行细化:TRM结果可以分文两部分一部分是Encoders(编码器)一部分是Decoders(解码器)简单的流程就是"我爱你"输入到Encoders中处理后作为Decoders的输入......
  • Spring Security详细介绍(一)基本原理
            SpringSecurity(下文简称ss)是目前最流行的Web应用安全管理框架,其前身是Acegi项目(2006年左右纳入Spring子项目)。截至目前最新的版本是6.4.1。    ss早期版本的配置非常复杂,项目维护小组做了大量的工作简化了框架的配置和使用,现有的版本只需要寥寥几行......
  • web安全学习路线(非常详细),零基础入门到精通,看这一篇就够了
    1.学习基本的Web开发知识在学习Web安全之前,了解基本的Web开发知识是非常重要的。Web开发通常涉及HTML、CSS和JavaScript等技术。这些技术可以帮助您理解Web应用程序的结构和工作原理。此外,了解Web服务器和客户端之间的通信过程也有助于您更好地理解Web安......