Docker从认识到实践再到底层原理(五)|Docker镜像

前言
那么这里博主先安利一些干货满满的专栏了!
首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。
然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!
第五章-镜像
Docker镜像是什么
Docker image本质上是一个
read-only只读文件,这个文件包含了文件系统源码、库文件、依赖、工具等一些运行行application 所必须的文件。我们可以把 Docker image 理解成一个模板,可以通过这个模板实例化出来很多容器。
image 里面是一层层文件系统
Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。
每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三 种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的。
构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层 的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到 一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
镜像命令详解
命令清单
| 命令 | 别名 | 功能 |
|---|---|---|
| docker images | docker image ls / docker image list | 列出本地镜像 |
| docker tag | docker image tag | 给镜像打标签, 可用于推送镜像仓库 |
| docker pull | docker image pull | 从镜像仓库拉取镜像 |
| docker push | docker image push | 推送镜像到仓库 |
| docker rmi | docker image rm / docker image remove | 删除本地镜像 |
| docker build | docker image build | 通过 dockerfile制作镜像 |
| docker save | docker image save | 将制定镜像保存成tar归档文件 |
| docker load | docker image load | 导入使用 docker save 导出的镜像 |
| docker image inspect | 查看镜像的详细信息 | |
| docker history | docker image history | 查看镜像历史 |
| docker import | docker image import | 从归档文件 docker export 中创建镜像 |
| docker image prune | 删除不使用的镜 像 |
在这一章,我们只详细介绍上面的部分命令,有一些我们会到特定的章节详细讲解。
docker rmi
删除本地某个镜像。
docker rmi [OPTIONS] IMAGE [IMAGE...]
关键参数。
-f : 强制删除
-no-prune : 不移除该镜像的过程镜像,默认移除
docker save 和 docker load
docker save [OPTIONS] IMAGE [IMAGE...] # -o :输出到的文件
docker save -o mybusybox.tar busybox:1.36.0 # 保存这个镜像文件

现在可以把这个镜像加载回来。
docker load [OPTIONS]
关键参数
--input, -i : 指定导入的文件,代替 STDIN。
--quiet, -q : 精简输出信息。

docker history
docker history [OPTIONS] IMAGE
-H, --human : 大小和日期采用人容易读的格式展现
--no-trunc : 显示全部信息,不要隔断;
-q, --quiet : 只显示镜像 id 信息;

其他参数大家都可以尝试。
docker image prune
删除不使用的镜像。
-a, --all : 删除全部不使用的镜像;
--filter filter : 指定过滤条件;
-f, --force : 不提示是否删除;
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.24.0 bf09be6b0005 2 weeks ago 142MB
nginx 1.25.2 eea7b3dcba7e 2 weeks ago 187MB
yufcbagpack/my-bit-nginx 1.25.2 eea7b3dcba7e 2 weeks ago 187MB
busybox 1.36.0 af2c3e96bcf1 3 months ago 4.86MB
yufcbagpack/busybox-by-yufc v1.0 af2c3e96bcf1 3 months ago 4.86MB
centos 7 eeb6ee3f44bd 23 months ago 204MB
nginx 1.18.0-alpine 684dbf9f01f3 2 years ago 21.9MB
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: busybox:1.36.0
untagged: busybox@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112
untagged: yufcbagpack/busybox-by-yufc:v1.0
untagged: yufcbagpack/busybox-by-yufc@sha256:086417a48026173aaadca4ce43a1e4b385e8e62cc738ba79fc6637049674cac0
deleted: sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33
deleted: sha256:1f1d08b81bbe3cb8d730d2e163d6737b4352192712b1f1548720dc224f6cac06
untagged: nginx:1.18.0-alpine
untagged: nginx@sha256:93baf2ec1bfefd04d29eb070900dd5d79b0f79863653453397e55a5b663a6cb1
deleted: sha256:684dbf9f01f3250437d595669c7437c202573798ab34247d50338ff630e58b6a
deleted: sha256:c2de14d9781a9624082602f51baa465d1904cf681e8209bec5e0a40054897f49
deleted: sha256:6774274a318ea7dfe5fb9dd3fe1f625e463352ba889f6f9fb2222e4783bcd209
deleted: sha256:485b3a00a3b7092170c9612a95637ee7e1ff6b6bdc915c5131eb07983d02171d
deleted: sha256:c5ddcad13e93c4e6d6cf10c03bf14f0a8fc8a2a5435b87e300394fbc9977a02c
deleted: sha256:9a5d14f9f5503e55088666beef7e85a8d9625d4fa7418e2fe269e9c54bcb853c
untagged: nginx:1.25.2
untagged: nginx@sha256:104c7c5c54f2685f0f46f3be607ce60da7085da3eaa5ad22d3d9f01594295e9c
untagged: yufcbagpack/my-bit-nginx:1.25.2
untagged: yufcbagpack/my-bit-nginx@sha256:48a84a0728cab8ac558f48796f901f6d31d287101bc8b317683678125e0d2d35
deleted: sha256:eea7b3dcba7ee47c0d16a60cc85d2b977d166be3960541991f3e6294d795ed24
deleted: sha256:589bcc284f24d6548cd3cef06ace5f6ebc4f23a48a5763f2f9d3d30b0f9dadf5
deleted: sha256:b3addc7069fafd183d88d1a40bb3dfe51227d45e4fe8e59b81a2fda7614ebbc1
deleted: sha256:5bf28af6a2188fa2d657e451213761b03e115e4c24ee72c41da34a241fe81ca1
deleted: sha256:2496134da21702d935bee1334ae42baf26d0197af91275e5c1a11eee31299121
deleted: sha256:c7e60968a54882c23483c3acb0ff1f415ce0f98184dfbed3fb9080447d79b313
deleted: sha256:49bfd4a4ea578aefcacdfd87efdc4999d6a4e4b7f00322484cac67ff7671389e
deleted: sha256:511780f88f80081112aea1bfdca6c800e1983e401b338e20b2c6e97f384e4299
untagged: centos:7
untagged: centos@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9
deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02
untagged: nginx:1.24.0
untagged: nginx@sha256:a195f9fb6503531660b25f9aeefef1f48bbaf56f46da04bffe1568abb3d3aff6
deleted: sha256:bf09be6b0005cc81d4cc3c3cf836c84450e92a7c4dcb2e2e31d84843ff3d6c62
deleted: sha256:ff7c49c7e5d3258f6e702b5259ac2bdc8986bb04b24b2b7117925b4d26844596
deleted: sha256:7c0b5de76892cd4ea9baac2b125bfafa689f059f1a160993549208d348789473
deleted: sha256:06409bd4a1a7f2e234292dfeba96fb76d9cff1256e41e5df13d38a6f47488aa3
deleted: sha256:401de303ad1d4c865aab0018974df56eb349a04fdfb88a8e4c5c91fa1036a03f
deleted: sha256:5d87999cc8379e200e5702df879ba59805993578ac8cc20c4376d84274ab79f5
deleted: sha256:63290f9c9e5201f0507ee1b5701aa06c7f48bef7cce287fc77db92bec634d737
Total reclaimed space: 559.5MB
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$
镜像操作案例
实战流程如下所示。
#mermaid-svg-sV3PPRaWuQPxVpM3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .error-icon{fill:#552222;}#mermaid-svg-sV3PPRaWuQPxVpM3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sV3PPRaWuQPxVpM3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .marker.cross{stroke:#333333;}#mermaid-svg-sV3PPRaWuQPxVpM3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sV3PPRaWuQPxVpM3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .cluster-label text{fill:#333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .cluster-label span{color:#333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .label text,#mermaid-svg-sV3PPRaWuQPxVpM3 span{fill:#333;color:#333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .node rect,#mermaid-svg-sV3PPRaWuQPxVpM3 .node circle,#mermaid-svg-sV3PPRaWuQPxVpM3 .node ellipse,#mermaid-svg-sV3PPRaWuQPxVpM3 .node polygon,#mermaid-svg-sV3PPRaWuQPxVpM3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sV3PPRaWuQPxVpM3 .node .label{text-align:center;}#mermaid-svg-sV3PPRaWuQPxVpM3 .node.clickable{cursor:pointer;}#mermaid-svg-sV3PPRaWuQPxVpM3 .arrowheadPath{fill:#333333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sV3PPRaWuQPxVpM3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-sV3PPRaWuQPxVpM3 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-sV3PPRaWuQPxVpM3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sV3PPRaWuQPxVpM3 .cluster text{fill:#333;}#mermaid-svg-sV3PPRaWuQPxVpM3 .cluster span{color:#333;}#mermaid-svg-sV3PPRaWuQPxVpM3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sV3PPRaWuQPxVpM3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
#mermaid-svg-AcnKvkP1DW1Yx42X {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AcnKvkP1DW1Yx42X .error-icon{fill:#552222;}#mermaid-svg-AcnKvkP1DW1Yx42X .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AcnKvkP1DW1Yx42X .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-AcnKvkP1DW1Yx42X .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AcnKvkP1DW1Yx42X .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AcnKvkP1DW1Yx42X .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AcnKvkP1DW1Yx42X .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AcnKvkP1DW1Yx42X .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AcnKvkP1DW1Yx42X .marker.cross{stroke:#333333;}#mermaid-svg-AcnKvkP1DW1Yx42X svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AcnKvkP1DW1Yx42X .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AcnKvkP1DW1Yx42X .cluster-label text{fill:#333;}#mermaid-svg-AcnKvkP1DW1Yx42X .cluster-label span{color:#333;}#mermaid-svg-AcnKvkP1DW1Yx42X .label text,#mermaid-svg-AcnKvkP1DW1Yx42X span{fill:#333;color:#333;}#mermaid-svg-AcnKvkP1DW1Yx42X .node rect,#mermaid-svg-AcnKvkP1DW1Yx42X .node circle,#mermaid-svg-AcnKvkP1DW1Yx42X .node ellipse,#mermaid-svg-AcnKvkP1DW1Yx42X .node polygon,#mermaid-svg-AcnKvkP1DW1Yx42X .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AcnKvkP1DW1Yx42X .node .label{text-align:center;}#mermaid-svg-AcnKvkP1DW1Yx42X .node.clickable{cursor:pointer;}#mermaid-svg-AcnKvkP1DW1Yx42X .arrowheadPath{fill:#333333;}#mermaid-svg-AcnKvkP1DW1Yx42X .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AcnKvkP1DW1Yx42X .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AcnKvkP1DW1Yx42X .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-AcnKvkP1DW1Yx42X .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-AcnKvkP1DW1Yx42X .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AcnKvkP1DW1Yx42X .cluster text{fill:#333;}#mermaid-svg-AcnKvkP1DW1Yx42X .cluster span{color:#333;}#mermaid-svg-AcnKvkP1DW1Yx42X div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AcnKvkP1DW1Yx42X :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
查找镜像
docker search busybox

下载镜像
docker pull busybox:1.36.0
下载成功。
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox 1.36.0 af2c3e96bcf1 3 months ago 4.86MB
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$
查看镜像及列表存储位置
东西存在这。
cd /data/var/lib/docker # 我们改过的,要记得哦
[root@ALiCentos7:/data/var/lib/docker]$ ll
total 44
drwx--x--x 4 root root 4096 Sep 1 20:57 buildkit
drwx--x--- 2 root root 4096 Sep 5 22:18 containers
-rw------- 1 root root 36 Sep 1 20:57 engine-id
drwx------ 3 root root 4096 Sep 1 20:57 image
drwxr-x--- 3 root root 4096 Sep 1 20:57 network
drwx--x--- 4 root root 4096 Sep 5 22:45 overlay2
drwx------ 4 root root 4096 Sep 1 20:57 plugins
drwx------ 2 root root 4096 Sep 1 20:57 runtimes
drwx------ 2 root root 4096 Sep 1 20:57 swarm
drwx------ 2 root root 4096 Sep 5 22:45 tmp
drwx-----x 2 root root 4096 Sep 1 20:57 volumes
[root@ALiCentos7:/data/var/lib/docker]$ cd image/
[root@ALiCentos7:/data/var/lib/docker/image]$ ls
overlay2
[root@ALiCentos7:/data/var/lib/docker/image]$ cd overlay2/
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ ls
distribution imagedb layerdb repositories.json
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ cat repositories.json
{"Repositories":{"busybox":{"busybox:1.36.0":"sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33","busybox@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112":"sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33"}}}[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$
关注这里面的一个一个文件夹,/data/var/lib/docker/image/overlay2/这里面存的是docker的存储驱动。
我们可以看下repositories.json 这里面的内容。
{
"Repositories": {
"busybox": {
"busybox:1.36.0": "sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33",
"busybox@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112": "sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33"
}
}
}
可以看到我们是有一个busybox镜像的。
所以东西是存在这里的,列表是在这里面的。
也可以通过这个命令查看镜像的详情。
docker image inspect busybox:1.36.0
当然dockerhub上也可以看这些信息。
查看镜像分层
docker history busybox:1.36.0
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ docker history busybox:1.36.0
IMAGE CREATED CREATED BY SIZE COMMENT
af2c3e96bcf1 3 months ago /bin/sh -c #(nop) CMD ["sh"] 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:c22c6617fa9a85e0d… 4.86MB
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$
打标签
docker tag busybox:1.36.0 yufcbagpack/busybox-by-yufc:v2.0
推送镜像
docker push yufcbagpack/busybox-by-yufc:v2.0

运行容器
先查看现在有的镜像。
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox 1.36.0 af2c3e96bcf1 3 months ago 4.86MB
yufcbagpack/busybox-by-yufc v2.0 af2c3e96bcf1 3 months ago 4.86MB
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$
运行容器。
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ docker run -it yufcbagpack/busybox-by-yufc:v2.0 sh
/ #

现在就启动这个镜像了。
删除这个镜像
docker rmi yufcbagpack/busybox-by-yufc:v2.0

我们可以发现,其实不是删除了这个镜像,而是只是去除了标签而已。
用docker rm 进一步删除

镜像仓库实战
实战一:离线迁移镜像
现有的镜像如下。


保存下来。
把这个tar包发到另一台服务器后(可以使用scp命令)
然后在另一台服务器使用docker load -i载入这个镜像即可。
实战二:镜像存储的压缩与共享
先拉一个镜像下来。
docker pull nginx:1.21.4
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker pull nginx:1.21.4
1.21.4: Pulling from library/nginx
a2abf6c4d29d: Pull complete
f3409a9a9e73: Pull complete
9919a6cbae9c: Pull complete
fc1ce43285d7: Pull complete
1f01ab499216: Pull complete
13cfaf79ff6d: Pull complete
Digest: sha256:366e9f1ddebdb844044c2fafd13b75271a9f620819370f8971220c2b330a9254
Status: Downloaded newer image for nginx:1.21.4
docker.io/library/nginx:1.21.4
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$

我们发现拉到本地是141MB
我们看看hub上的大小。

所以,在hub上肯定是进行了一定的压缩的。
Docker从认识到实践再到底层原理(五)|Docker镜像的更多相关文章
- Docker 介绍以及其相关术语、底层原理和技术
https://ruby-china.org/topics/22004 Docker是啥 Docker是一个程序运行.测试.交付的开放平台,Docker被设计为能够使你快速地交付应用.在Docker中 ...
- Docker从入门到实践
一般说来 SPA 的项目我们只要启一个静态文件 Server 就可以了,但是针对传统项目就不一样了,一个项目会依赖很多服务端程序.之前我们的开发模式是在一台开发机上部署开发环境,所有人都在这台开发机上 ...
- docker学习笔记(1)概述、原理学习、常用命令
一.Docker概述 Docker是基于Go语言实现的云开源项目,诞生于2013年初,目前主流的Linux操作系统已支持Docker,如Redhat RHEL6.5/CentOS6.5.Ubuntu ...
- [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务
转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为 ...
- Docker Daemon 参数最佳实践
1. Docker Daemon 配置参数 限制容器之间网络通信 在同一台主机上若不限制容器之间通信,容器之间就会暴露些隐私的信息,所以推荐关闭 docker daemon –icc=false 使用 ...
- Docker 从入门到实践(一)Docker 简介
读前须知:本教程大部分都是[Docker 从入门到实践 ]一书的知识,有兴趣可以直接观看书籍.同时,借鉴书籍的知识,如有侵权,请告知我,我会删除处理.谢谢. 一.什么是 Docker? Docker ...
- Kubernetes+Docker+Istio 容器云实践
随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...
- Docker从入门到实践(2)
二.基本概念 Docker 镜像 我们都知道,操作系统分为内核和用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相 ...
- Docker底层原理介绍
1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...
- Docker — 从入门到实践PDF下载(可复制版)
0.9-rc2(2017-12-09)修订说明:本书内容将基于DockerCEv17.MM进行重新修订,计划2017年底发布0.9.0版本.旧版本(Docker1.13-)内容,请阅读docker-l ...
随机推荐
- 你真的了解MySQL日期函数吗?
MySQL提供了丰富的日期和时间函数,用于处理和操作日期时间数据.本篇博文将深入介绍一些常用的MySQL日期函数,通过详细的例子带你了解这些函数的用法和实际应用. 1. CURDATE() - 获取当 ...
- 重磅发布丨从云原生到 Serverless,先行一步看见更大的技术想象力
(2022 云原生实战峰会) 2022年12月28日,以"原生万物 云上创新"为主题的第三届云原生实战峰会在线上举行. 会上,阿里云提出激活企业应用构建三大范式,并发布云原生可观测 ...
- 如何把thinkphp5的项目迁移到阿里云函数计算来应对流量洪峰?
原文链接:https://developer.aliyun.com/article/982746 1. 为什么要迁移到阿里云函数? 我的项目是一个节日礼品领取项目,过节的时候会有短时间的流量洪峰.平时 ...
- vue2.x封装svg组件并使用
https://blog.csdn.net/ChickenBro_/article/details/134027803
- P4837
日了啊,这道题每个输入中有多组输入,每处理完一组输入需要清空STL的stack类对象的啊.要是自己写的栈或许能想起来重新top=1,但是这用的STL现成的stack,就忘了while(!sk.empt ...
- 分享 ASCII 字符集的字模
是做 VGA 显示屏时用到的,这是字模资源:gitee 链接 以下为字模代码: // 133 * 16 * 8 字模的 parameter reg [127:0] C_ascii_character ...
- AvaloniaUI 取消标题栏,无边框无最大最小化,
AvaloniaUI 取消标题栏,无边框无最大最小化, 创建一个Window控件 并且在Window中添加以下代码 ExtendClientAreaToDecorationsHint="Tr ...
- SpringMVC03—RestFul和Controller
控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中一个控制器类可以包含多个 ...
- [转帖]Jmeter接口测试:参数化
Jmeter接口请求中的参数经常需要通过参数进行赋值 引用形式:${} 变量时:${变量名} 函数时,${_函数名(参数1,参数2,参数3)} 值中"${n}"中,n为变量名:&q ...
- [转帖]Kafka-Kraft 模式架构部署
news文章来源: Kafka-Kraft 模式架构部署 Kafka网址:https://kafka.apache.org/ PS:因环境原因此文档内端口都有修改! 1.去官网下载二进制包 PS:3. ...