Docker之 - 使用镜像和仓库(三)

简介: 上一篇文章中,我们学习了包括 docker run 在内的许多对容器进行操作的基本指令,那么在本节中,我们主要探讨 Docker 镜像的一些概念,比如什么是镜像,如何对镜像进行管理,如何修改镜像,如何创建、存储、共享自己创建的镜像等,那么就开始我们的学习

指令失败时呢?

之前大致介绍了一下指令失败时的执行过程,下面来看一个例子:假设我们在上面的 Dockerfile 中把 nginx 拼成了 ngnx ,再来构建一遍

91.jpg


我们可以看到,程序出错了,这个时候我们希望去调试一下这次失败。我们使用 docker run 命令来基于这次构建到目前为止已经成功的最后一步创建一个容器,这里它的ID 是 dee85a65a396,我们可以使用如下命令

docker run -t -i dee85a65a396 /bin/bash,来恢复到出错之前的镜像,然后重新运行出错的指令apt-get install -y ngnx ,可以看到哪里出错了


92.jpg


但是感觉这个步骤是多余了一些,如果 Dockerfile 中出现了错误,那么 Docker 就会给你提示,用不着重新运行命令来找出问题原因。

Dockerfile 和构建缓存

由于每一步的结果都会作为下一步的基础镜像,所以Docker 构建镜像的过程非常聪明,它会将之前的镜像层作为缓存。

正如上面 Dockerfile 来举例,比如,在我们调试过程中,不需要在第一步和第三步之间做任何修改,因此 Docker 会将之前构建时创建的镜像当作缓存并作为新的开始点。再次构建时,Docker 会直接从第四步开始。当之前的构建步骤没有变化时,这会节省大量的时间。如果第一步到第三步之间有什么变化,则回到第一步开始。

然而,有的时候不希望有缓存的功能,这个时候你需要使用 apt-get update,那么 Docker 将不会刷新 APT 包的缓存,要想略过缓存,可以使用 docker build 的 --no-cache 标志。

基于构建缓存的 Dockerfile 模版

构建缓存的一个好处就是,我们可以实现简单的 Dockerfile 模版,一般会在 Dockerfile 文件顶部使用相同的指令集模版,比如对 ubuntu ,使用下面的模版

FROM ubuntu:14.04
MAINTAINER James Turnbull "james@example.com"
ENV REFRESHED_AT 2019-08-15
RUN apt-get -qq update

我们来分析一下这个新的 Dockerfile :

  • 首先,通过 FROM 指令为新镜像设置了一个基础镜像 ubuntu:14.04。
  • 接着,使用 MAINTAINER 指令添加了自己的详细信息
  • 然后,通过 ENV 指令设置了一个名为 REFRESHED_AT 的环境变量,用来表示最后一次的更新时间
  • 最后,使用 RUN 指令运行 apt-get -qq update 命令,该指令会刷新 APT 包的缓存,用来确保每个安装的软件包都在最新版本。


查看新镜像

现在来看一下新构建的镜像,使用 docker images 命令来完成

93.jpg


如果想要了解镜像是如何构建出来的,可以使用 docker history 命令,如下


94.jpg


从结果可以看出镜像构建的每一层都是哪些指令构成的


从新镜像启动容器

我们可以基于新构建的镜像启动新容器,来检查我们的构建工作是否正常


95.jpg


在这里,我们使用 docker run 命令,启动一个 static_web 的容器, -d表示的是以分离(detached) 的方式在后台运行。这种方式适合 nginx守护进程 这种需要长时间运行的进程。我们也指定了需要在 容器中运行的命令: nginx -g "daemon off;",将以前台方式运行 nginx 作为我们的服务器。

我们这里也使用了一个新的 -p 标志,用来控制 Docker 再运行时应该给外部开放哪些端口

  • Docker 可以在宿主机上随机选择 49153 --- 65535 之间的一个比较大的端口映射到 80 端口上
  • 可以在 Docker 宿主机指定一个具体的端口来映射到 80 端口上

使用 docker ps查看一下端口分配情况

96.png

Docker 把 32769 端口映射到了 80 端口上

也可以通过 docker port查看端口的映射情况


97.jpg


Dockerfile 指令

Dockerfile 指令比较多,这里我们会对 Dockerfile 单独列一个章节进行说明

将镜像推送至 Docker Hub

镜像构建完毕之后,我们也可以将它上传到 Docker Hub 上面去,这样其他人就能使用这个镜像了。

Docker Hub 的私有仓库是需要收费的

我们可以使用 docker push 命令将镜像推送至 Docker Hub。命令如下

98.jpg


为什么推送不上去?

网上搜索了一下,大概是镜像标签的问题,重新为镜像设置一个标签


99.png

然后把这个标签推送上去,相当于就是把镜像推送上去

000.jpg

我们可以在 Docker Hub 上看到我们推送的镜像了

00.png


删除镜像

如果不再需要一个镜像了,也可以将它删除,使用 docker rmi命令来删除一个镜像


111.jpg


该操作只能删除本地镜像,如果你已经推送至 Docker Hub 上,那么你还需要在 Docker Hub 上将其删除



登录 Docker Hub ,直接点下面的链接删除

222.jpg


docker rmi 删除多个容器的方式直接在后面枚举容器即可,中间用空格隔开

总结

本篇文章主要讲述了 Docker 中的镜像和仓库的一些概念和基本用法,那么你是否能回顾起来下面这些内容呢?

  • 什么是镜像
  • 如何列出Docker中的镜像,tag标签是干什么用的
  • 如何拉取远程仓库中的镜像
  • 如何查找镜像
  • 对于镜像构建,你能想到哪些内容
  • 如何推送镜像至 Docker Hub
  • 如何删除镜像


            </div>
目录
相关文章
|
存储 负载均衡 NoSQL
MongoDB·最佳实践·count不准原因分析
背景 一般来说,除了由于secondary延迟可能造成查询secondary节点数据不准以外,关于count的准确性问题,在MongoDB4.0官方文档中有这么一段话On a sharded cluster, db.
|
算法 搜索推荐 5G
|
存储 关系型数据库 MySQL
什么是MyISAM和InnoDB
【10月更文挑战第17天】什么是MyISAM和InnoDB
169 0
|
11月前
|
存储 运维 监控
Elasticsearch Serverless高性价比智能时序分析关键技术解读
本篇演讲由阿里云1s团队的贾新寓讲解,主题为高性价比、智能日志更新关键技术。内容分为四部分:回顾日志场景痛点、介绍四大关键能力(开箱即用、高性能低成本、按量付费、智能调度免运维)、解读关键技术(如读写分离架构、ES内核优化等),并演示如何快速接入Serverless产品。通过这些技术,显著提升性能、降低成本,帮助用户实现高效日志管理。
|
敏捷开发 缓存 前端开发
阿里云云效产品使用合集之前端打包时npm安装卡住一般是什么导致的
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
关系型数据库 Java 数据库
实时计算 Flink版操作报错合集之flinksql采PG数据库时报错,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
Kubernetes Cloud Native 容灾
阿里云新版ACE全球通关第一人考试经历回顾
2022.3月底阿里云针对老版ACE进行了改版,针对云计算技术的发展趋势,新增了云原生等热门技术,同时新版ACE认证新增了实验和面试,全面考查考生的动手能力和理论知识结构,含金量大大提升。本人于2022.7.25号通过新版ACE实验,并于8.22号参加并通过了新版ACE第一场面试考试,有幸成为新版ACE全球通关第一人。现在本人备考学习新版ACE认证的过程记录成文,跟大家分享,期待越来越多的云计算技术爱好者学习和报考新版ACE,拿到属于自己的全球编号。
3633 19
阿里云新版ACE全球通关第一人考试经历回顾
H8
|
存储 传感器 机器学习/深度学习
数字孪生(Digital Twins)
数字映射(Digital twin),或译作数字孪生、数字分身,指在信息化平台内模拟物理实体、流程或者系统,类似实体系统在信息化平台中的双胞胎。借助于数字映射,可以在信息化平台上了解物理实体的状态,甚至可以对物理实体里面预定义的接口组件进行控制。
H8
910 1
|
运维 供应链 安全
用友YonSuite——打造全新一代场景化SaaS应用服务
“我们到用友BIP3这个版本,找到了企业级SaaS的运营密码,总结出了一套企业级SaaS的应用和交互模式。” 用友网络副总裁傅毅日前在用友BIP3|YonSuite媒体沟通会上介绍说,面向成长型企业的平台型纯公有云SaaS——用友YonSuite如今具备了技术与架构领先、场景与应用领先、客户化开发领先、用户体验领先、应用模式领先等五大先进性,成为全球领先的成长型企业一体化商业创新平台。
596 0
|
机器学习/深度学习 算法 量子技术
希尔伯特空间:概念、原理与发展趋势
希尔伯特空间:概念、原理与发展趋势
967 0