Docker 应用实践-镜像篇
创始人
2024-05-12 15:47:32
0

一个 Docker 镜像往往是由多个镜像层(可读层)叠加而成,每个层仅包含了前一层的差异部分,单个镜像层也往往可以看作镜像使用,当我们启动一个容器的时候,Docker 会加载镜像层并在其上添加一个可写层。容器上所做的任何更改,譬如新建文件、更改文件、删除文件,都将记录与可写层上,任何对容器的操作均不会影响到镜像。

本品内容主要介绍:关于 Docker 镜像、Docker 命令应用实践


文章目录

    • 一、关于 Docker 镜像
        • 1、对于 Docker 镜像的理解
        • 2、Docker 镜像的多层结构
    • 二、Docker 命令应用实践
        • 1、登陆镜像仓库(镜像仓库)
        • 2、Docker search 命令(镜像仓库)
        • 3、Docker pull 命令(镜像仓库)
        • 4、Docker images 命令(本地镜像)
        • 5、Docker rmi 命令(本地镜像)
        • 6、Docker tag 命令(本地镜像)
        • 7、Docker build 命令(本地镜像)
        • 8、Docker history 命令(本地镜像)
        • 9、Docker save 命令(本地镜像)


一、关于 Docker 镜像

1、对于 Docker 镜像的理解

大家如果曾经使用过 VM,则可以把 Docker 镜像理解为 VM 模板,VM 模板就像停止运行的 VM,而 Docker 镜像就像停止运行的容器;而作为一名研发人员,则可以将镜像理解为类(Class)。

image-20230113115817004

上图是一张,Docker 的命令导图,从中可以看出,Docker 包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。

  1. 首先,需要先从镜像仓库服务中拉取镜像。常见的镜像仓库服务是 Docker Hub,但是也存在其他镜像仓库服务;
  2. 然后,拉取操作会将镜像下载到本地 Docker 主机,可以使用该镜像启动一个或者多个容器。

2、Docker 镜像的多层结构

一个 Docker 镜像往往是由多个镜像层(可读层)叠加而成,每个层仅包含了前一层的差异部分,单个镜像层也往往可以看作镜像使用,当我们启动一个容器的时候,Docker 会加载镜像层并在其上添加一个可写层。容器上所做的任何更改,譬如新建文件、更改文件、删除文件,都将记录与可写层上,任何对容器的操作均不会影响到镜像。

容器与镜像最大的区别就在于可写层上。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从可写层下的只读层复制到可写层,该文件的只读版本仍然存在,只是已经被可写层中该文件的副本所隐藏。其中,多个容器共享镜像的结构如下所示:

image-20230116104839758

总的来说:镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构,

镜像分层结构特点/注意事项:

  • 基础镜像层被共享的,一般基础镜像层都是根据构建镜像的环境来生成的,比如基于 Linux 的某发行版本;
  • 当对镜像进行修改或增加等操作时,会直接在前镜像层上形成新的镜像层,所以当我们去拉取最新的镜像时往往会提示我们已包含基础镜像,所以我们一般拉取的就是新更新的几层镜像层;
  • 假如我们只是单纯的更新了某一层的版本,比如镜像中包含一层是 golang 1.1,我们要替换为 golang 2.2 ,这时并没有新增镜像层,而是直接替换了旧版本的 golang 层。

二、Docker 命令应用实践

1、登陆镜像仓库(镜像仓库)

我们在使用 Docker 拉取镜像前,往往需要登陆到一个 Docke r镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub!!!

# 登陆语法

$ docker login -u 用户名 -p 密码

# 登出语法

$ docker logout

2、Docker search 命令(镜像仓库)

docker search:从 Docker Hub 查找镜像。

# 语法

$ docker search [OPTIONS] TERM

OPTIONS 说明:

  • –automated : 只列出 automated build 类型的镜像;
  • –no-trunc : 显示完整的镜像描述;
  • -f <过滤条件>: 列出收藏数不小于指定值的镜像。

# 实例

从 Docker Hub 查找所有镜像名包含 centos,并且收藏数大于 3 的镜像

$ docker search -f stars=3 centos

image-20230116113229524

参数说明:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

3、Docker pull 命令(镜像仓库)

docker pull:从镜像仓库中拉取或者更新指定镜像

# 语法

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

OPTIONS说明:

  • -a : 拉取所有 tagged 镜像;
  • –disable-content-trust : 忽略镜像的校验,默认开启。

# 实例

$ docker pull ubuntu:18.04

image-20230116114008580

4、Docker images 命令(本地镜像)

docker images:列出本地镜像。

# 语法

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

OPTIONS 说明:

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

# 实例

$ docker images

image-20230116114428847

查看本地镜像列表

  • pepository:仓库
  • tag:标签
  • image id:镜像id(使用hash,是唯一的)
  • created:时间
  • size:镜像大小

5、Docker rmi 命令(本地镜像)

docker rmi :删除本地一个或多个镜像。

# 语法

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

OPTIONS 说明:

  • -f:强制删除;
  • –no-prune:不移除该镜像的过程镜像,默认移除。

# 实例

$ docker rmi -f ubuntu:18.04

image-20230116114713192

6、Docker tag 命令(本地镜像)

docker tag:标记本地镜像,将其归入某一仓库。

# 语法

$ docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

# 实例

将镜像 ubuntu:18.04 标记为 runoob/ubuntu:v3 镜像。

$ docker tag ubuntu:18.04 runoob/ubuntu:v3
$ docker images

image-20230116114952880

7、Docker build 命令(本地镜像)

docker build 命令用于使用 Dockerfile 创建镜像。

# 语法

$ docker build [OPTIONS] PATH | URL | -

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配置。
  • –squash:将 Dockerfile 中所有的操作压缩为一层。
  • –tag-t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • –network: 默认 default。在构建期间设置RUN指令的网络模式

8、Docker history 命令(本地镜像)

docker history:查看指定镜像的创建历史。

# 语法

$ docker history [OPTIONS] IMAGE

OPTIONS说明:

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

# 实例

查看本地镜像 runoob/ubuntu:v3 的创建历史

$ docker history runoob/ubuntu:v3

image-20230116115554837

9、Docker save 命令(本地镜像)

docker save:将指定镜像保存成 tar 归档文件。

语法

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

OPTIONS 说明:

  • -o:输出到的文件。

相关内容

热门资讯

电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...
android系统和安卓哪个好... 说到手机操作系统,你有没有想过,Android系统和安卓哪个更好用呢?这可是个让无数手机用户纠结的问...