当前位置: 首页 > article >正文

docker3-容器与镜像命令

前言

容器命令[部分]

docker run

–name=“nginx-lb”

这个就是为容器起一个名称
在这里插入图片描述
以前是随机起的名称
docker run -d --name mynginx1 nginx:1.24.0
在这里插入图片描述
在这里插入图片描述
docker ps
这样就可以看到我们起的名字了

docker stop mynginx1
这个就可以停掉指定名字的容器了,但不是删除这个容器,docker ps -a还是可以看到的

在这里插入图片描述

-h “mars”

这个就是指定容器的hostname
docker run -it centos:7 bash

这个就是交互式运行

如果不指定-h就是随机生成的hostname
docker run -it -h mycentos7 centos:7 bash
放在centos的参数是针对的centos的命令
在这里插入图片描述

这个就是指定的hostname了

-e username=“ritchie”

这个就是设置环境变量

docker run -it -h mycentos7 -e myenv=test centos:7 bash
这个表示我们的环境现在是测试环境
我们用env这个命令检查环境变量

env | grep myenv
在这里插入图片描述
这个就成功了
输入env就可以查看所有的环境变量

–cpuset-cpus=“0-2” or --cpuset-cpus=“0,1,2”

就是把这个容器绑定到具体的某个核某个cpu去跑

docker run -d --name mynginx1 --cpuset-cpus=“0-1” nginx:1.24.0
这个就是使用0或者1核

我们先到另一个shell看看cpu信息
cat /proc/cpuinfo
在这里插入图片描述
这个是运行前cpu的信息
可以看出cpu单核的
在这里插入图片描述
我们一运行就会报错
因为只有一个核
只能指定一个
docker run -d --name mynginx1 --cpuset-cpus=“0” nginx:1.24.0
在这里插入图片描述
但是运行又出错了
因为这个mynginx1的名字已经被其他容器使用了
docker ps -a
在这里插入图片描述
所以换个名字

docker run -d --name mynginx2 --cpuset-cpus=“0” nginx:1.24.0
在这里插入图片描述
这样就可以了

-m

就是容器使用内存的最大值

docker run -d --name mynginx3 nginx:1.24.0
我们先不指定使用内存
我们用
docker stats mynginx3
在这里插入图片描述
可以看出我们最大值为1.93G
在另一个shell中
输入
free -m
在这里插入图片描述
可以看出服务器最大只有1.9G
所以默认最大的内存就是服务器的使用的内存
docker run -d --name mynginx4 -m 500m nginx:1.24.0
这个就是指定只能用500m
docker stats mynginx4 mynginx3
在这里插入图片描述
可以看出这个就有区别了

–link=[]

这个就是把一个容器链接到另一个容器
docker run -it --name mycentos1 centos:7 bash

再打开另一个shell
docker run -it --name mycentos2 --link mycentos1:mywebsite1 centos:7 bash
这个就是把容器mycentos2 链接到mycentos1,然后取个别名mywebsite1
这样的话我们就可以在mycentos2 中访问mycentos1的网络了
我们直接ping mycentos1
这个指令是测试网络的
在这里插入图片描述
我们也可以ping mywebsite1
在这里插入图片描述
mywebsite1 和mycentos1是一样的
输入cat /etc/hosts
在这里插入图片描述
这里就有那个链接的信息
但是这个链接是单向的
意思就是
mycentos1不能pingmycentos2
在这里插入图片描述
cat /etc/hosts输入这个也不会有链接的信息
不会存储另一个容器的ip
本质就是在/etc/hosts存储了另一个容器的ip所以才可以链接的
在这里插入图片描述

–rm

这个就是容器暂停退出的时候自动删除容器

docker run -it --name mycentos3 centos:7 bash
docker ps -a是查看的运行中的容器
exit只是暂停这个容器的运行
docker run -it --name mycentos4 --rm centos:7 bash
在这里插入图片描述
然后再在另一个容器中输入docker ps -a,能看到mycentos4
但是我们在mycentos4 里面exit之后,
再在另一个容器中docker ps -a,就看不到mycentos4 了
在这里插入图片描述

在这里插入图片描述
这个就是自动清理容器删除容器了

docker ps

  1. docker ps
    • 功能
    列出容器

• 语法
docker ps [OPTIONS]

• 别名
docker container ls, docker container list, docker container ps

• 关键参数
○ -a :显示所有的容器,包括未运行的。
○ -f :根据条件过滤显示的内容。
○ --format :指定返回值的模板文件。如json或者table
○ -l :显示latest的容器。
○ -n :列出最近创建的n个容器。
○ --no-trunc :不截断输出。
○ -q :静默模式,只显示容器编号。
○ -s :显示总的文件大小。

• 样例
docker ps -a

-f

就是根据docker ps里面的属性列进行过滤

docker ps -f name=mynginx4
在这里插入图片描述

–format

可以指定返回的模版

docker ps --format json
默认返回的是表格
在这里插入图片描述

-l

就是显示最近的那个容器
docker ps -l
在这里插入图片描述

-n

docker ps -n 2
就是显示最近的n个容器
在这里插入图片描述

–no-trunc

就是不截断输出
比如id不截断
在这里插入图片描述

-q

docker ps -q
就是只返回id

在这里插入图片描述
还可以与-a配合,就是返回所有容器的id

-s

就是顺便把容器的大小都返回了

docker ps -s
在这里插入图片描述
最后一列就是大小

实战

搭建一个nginx服务

查找nginx镜像

docker search nginx
在这里插入图片描述
但是一般还是在docker.hub官网上去找
在这里插入图片描述
选取镜像的时候还是要去选取上面的已认证的镜像
然后看tags那边
在这里插入图片描述
选取镜像
第二步就是拉取镜像了
docker pull nginx:1.24.0
我们如何验证拉取过来了没呢
docker images nginx
这个是把nginx过滤来查看
在这里插入图片描述
我们如何看一个镜像的详细信息呢
docker image inspect nginx:1.24.0
在这里插入图片描述
我们看出ExposePorts暴露的是80的tcp端口
在这里插入图片描述
我们还可以看出启动命令

启动镜像,修改首页

docker run -p 80:80 --name myweb2 -h myweb1.cm -e myenv=test nginx:1.24.0
一运行
但是Ubuntu上的服务器上已经布置了一个80端口了
docker run -p 8099:80 --name myweb2 -h myweb1.cm -e myenv=test nginx:1.24.0

但是这样又错了
为什么呢,因为上一次已经创建了容器myweb2 ,只不过创建失败了,但是名字已经被占用了

docker run -p 8099:80 --name myweb3 -h myweb1.cm -e myenv=test nginx:1.24.0
在这里插入图片描述
这个就是nginx的启动信息
打印出来了这个,就说明了我们是在前台运行的
因为没有-d,这个就只能看看,什么都干不了
在这里插入图片描述
这样就可以了
如果我们ctrl+c或者关掉了shell
就停止了这个容器了
所以我们要后台运行
docker run -p 8099:80 --name myweb4 -h myweb1.cm -e myenv=test -d nginx:1.24.0
在这里插入图片描述
这样就成功了
ctrl+c也没用了

现在开始改首页
—》要交互运行才可以,因为要在里面搞事情,修改东西

docker run -p 8100:80 --name myweb6 -h myweb1.cm -e myenv=test -it nginx:1.24.0 bash
-it对应就有一个bash在后面,为什么要添加bash呢,添加bash的目的就是能够使用ll这种命令
然后就是要改名字,改端口
在这里插入图片描述
这样我们就进去了

我们进入了nginx的交互,进入了这个nginx容器里面
,但是nginx并没有启动的,我们还要手动启动才可以,但是后台运行的话,就不用我们来手动启动了
在这里插入图片描述
这样我们的nginx就启动起来了
这样我们访问8100端口就可以访问里面的nginx的默认页面了

在这里插入图片描述
我们可以进入这个nginx的默认页面
就在nginx容器里面进入nginx的默认页面
cd /usr/share/nginx/html/
这里面有一个index.html
的页面
修改它就可以修改默认显示的页面了

直接输入echo “hello nginx docker” > index.html
在这里插入图片描述
这样的话,里面的内容就变成这一句话了,这个是因为echo是覆盖性的
在这里插入图片描述
但是我们还没有学习怎么在后台运行,然后进入这个容器,修改这个容器的内容

Docker hub上创建自己私有仓库

Busybox

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一
些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例
grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。
简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也
包含了 Linux 系统的自带的shell。busybox是一个集成了一百多个最常用linux命令和
工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却
只有区区1M左右的大小.因海外带宽较小,我们拉取该镜像推送到自己的仓库。

意思就是我们拿进去这个Busybox的命令,那么那些简简单单的rz命令我们都不用下载了,原生是没有的,需要下载,而且这个大小很小,推仓库很快

安装Busybox

我们直接敲busybox
就知道我们有没有busybox了
在这里插入图片描述
然后开始卸载
apt --purge autoremove busybox

然后就是安装
apt install busybox -y

安装和卸载都比较慢
我们输入busybox检查一下
在这里插入图片描述
可以正常运行就可以了
这样我们就可以使用busybox来使用它里面的指令了

比如
busybox ls /
查找根目录

在这里插入图片描述
busybox ping www.baidu.com
在这里插入图片描述
这些命令都是可以正常运行的

输入which busybox
就可以知道安装在哪里了

ls -lh /usr/bin/busybox
这样加了-h就知道大小了
在这里插入图片描述
发现才七百多k

创建仓库

在这里插入图片描述
要创建仓库的话,首先要在docker.hub上有一个账号才可以
但是有两个问题
第一这是海外的,我们要网络加速才可以
第二就是,我们的QQ邮箱是国内的邮箱,国外无法发邮箱信息过来
所以我们注册不了
当然也创建不了账号
所以得换国内的仓库了
我们可以拉取一下busybox
docker pull busybox:1.36.0

综合实战三、腾讯云创建自己的私有仓库

创建腾讯云账号

官网
在这里插入图片描述
点击右上角的注册就可以了

在这里插入图片描述
然后我们搜索容器镜像服务
在这里插入图片描述
点击立即选购

这个是要钱的

在这里插入图片描述

买了就会进去这个页面
点击镜像仓库
新建那里就可以建造仓库了
在这里插入图片描述
创建的时候它要一个命令空间
在这里插入图片描述
点击命名空间这里进行命名

在这里插入图片描述
现在就可以创建镜像仓库了

在这里插入图片描述
在这里插入图片描述

这样就创建好了
点击快捷指令
在这里插入图片描述
这里就给出了命令

我们推送镜像之前先登录
直接复制上面图片的命令就可以了

docker login ccr.ccs.tencentyun.com --username=100014125284
然后输入密码
在这里插入图片描述
然后就是打tag,打标签
也是复制
docker tag busybox:1.36.0 ccr.ccs.tencentyun.com/maxhou6/busyboxbymaxhou:v1.0

或者用id来tag都是可以的
在这里插入图片描述
我们在看一下效果
dicker images | grep busybox
在这里插入图片描述
这样就有1.0和2.0的tag了
其实id都是一样的

然后就是推送了

docker push ccr.ccs.tencentyun.com/maxhou6/busyboxbymaxhou:v1.0
这样就可以了
在这里插入图片描述
在这里插入图片描述
还有就是tag重复的,只会push成功一个
并不会全部一样的都push上去,
docker push ccr.ccs.tencentyun.com/maxhou6/busyboxbymaxhou -a
-a就是把 tag为ccr.ccs.tencentyun.com/maxhou6/busyboxbymaxhou全部push上去
在这里插入图片描述
看前台我们就看到了,三个不同的tag都push上去了
我们如何拉取呢

docker pull ccr.ccs.tencentyun.com/maxhou6/busyboxbymaxhou:v1.0
这样就可以拉取下来了

在这里插入图片描述
然后就是登出了

docker logout ccr.ccs.tencentyun.com
v1.0是tag
busyboxbymaxhou是仓库名称
maxhou6是命名空间的名称
ccr.ccs.tencentyun.com是镜像仓库统一的对外的地址
在这里插入图片描述
在这里插入图片描述

登出之后就不能push和pull了
不能pull是因为这个镜像是一个私有的镜像

阿里云创建自己的私有仓库

官网

还是搜索容器镜像服务

这个比腾讯云的好,因为有个人版的,不要钱,腾讯云没有个人版,它的个人版用不了了

在这里插入图片描述
在这里插入图片描述
这里可以设置docker登录的密码
创建镜像仓库之前,先创建命名空间
在这里插入图片描述
然后就是创建镜像仓库
在这里插入图片描述
在这里插入图片描述
代码源我们选取本地仓库就可以了

本地仓库就是通过docker push和docker pull来操作
在这里插入图片描述

而且命令阿里云都提供好了
docker images busybox确保本地有镜像

登录去复制然后输入密码
然后就是打tag
docker images | grep busybox过滤查看

在这里插入图片描述
然后push还是复制,但是tag不能复制

在这里插入图片描述在这里插入图片描述
我们多打几个tag
在这里插入图片描述
然后-a就是一起push
就都进去了

在这里插入图片描述
退出来也是一样的
在这里插入图片描述
拉取的命令也是复制
这个不需要登录,如果我们的镜像是公开的话
在这里插入图片描述
这样就完成了
没有登录当然就不能push了

Docker Image(镜像)

Docker 镜像是什么

Docker image本质上是一个 read-only 只读文件, 这个文件包含了文件系统、
源码、库文件、依赖、工具等一些运行application所必须的文件。
• 我们可以把Docker image理解成一个模板或者类, 可以通过这个模板实例化出来很多
容器。
• image 里面是一层层文件系统Union FS。联合文件系统,可以将几层目录挂载到
一起,形成一个虚拟文件系统。
每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三
种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker
镜像中每一层文件系统都是只读的。
构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层
的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可
见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到
一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
在这里插入图片描述
镜像可以弄java也可以是c++

为什么需要镜像

在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端
和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操
作,非常费劲。
然而,Docker 镜像就是为了解决这个小小的打包功能,突然一夜之间成名。那么,你
可能说 Docker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如
何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成
一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环
境用的操作系统一摸一样。
docker 最大的贡献就是定义了容器镜像的分层的存储格式,docker镜像技术的基础
是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可
以减少存储空间占用。
docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的
将其用于个人用途或与其他 Docker 用户公开共享
把jdk那些东西一起打包好的东西
dockefile:docker镜像制作的标准
而且镜像只需要存一份,就可以镜像出很多份
在这里插入图片描述
镜像存过来的时候,就不会把centos存两份,因为是分层的

底层的东西已经有了的话,就只需要pull最上面的东西就可以了,这就是镜像分层的好处,节省了存储空间,直到找到不一样的层为止,就可以pull了
所有镜像层数越深,浪费时间越多

镜像命令详解

这个是docker的命令,所以用ubuntu和centos是没有区别的

  1. 镜像命令清单
    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…]
IMAGE [IMAGE…] 这个表示我们可以一次或者删除多个镜像

• 别名
docker image rm, docker image remove

• 关键参数
○ -f :强制删除;
○ --no-prune :不移除该镜像的过程镜像,默认移除;
这两个参数一般不用

docker images busybox
删除的话第一中可以通过id来删除
docker rmi imageId
在这里插入图片描述
这个删除指令显示后面的意思就是,我们先删除了标签,然后就是删除

在这里插入图片描述
这样就删除了

我们还可以通过名字+tag删除

docker rmi busybox:1.35.0
在这里插入图片描述
但是如果这个镜像被引用了,也就是被run起来了,生成了·容器,这样的话是不能删除镜像的

docker run -it --name mybusybox busybox:1.35.0 sh
如果没有这个镜像会先pull,后面的sh的意思就是进入这个容器的shell
和centos的后面的bash是一样的效果

在这里插入图片描述

docker ps -a | grep mybusybox
在这里插入图片描述
也是可以正常退出的
但是这个时候,这个容器对应的镜像就不能删除了

docker rmi busybox:1.35.0
在这里插入图片描述
因为生成了一个容器,也就是对象,那你怎么能删除类呢
接下来我们就只能强制删除了
-f,
就是不管有没有容器都删除镜像
docker rmi -f busybox:1.35.0
在这里插入图片描述
正常的话不要这样删除
我们要先删除容器

rm就是删除容器的意思,i就是image的意思
docker rm 容器id
在这里插入图片描述
然后再删镜像
正常删镜像时会报err,err里面有对应容器的id

我们直接docker ps -a | grep busybox:1.35.0
就可以看到所有使用这个镜像的容器了
然后删除就可以了
最后就是删除镜像了
docker rmi busybox:1.35.0

docker save

功能
将指定镜像保存成 tar 归档文件。
因为镜像是一个文件系统,他就是把镜像打包成一个tar文件

• 语法
docker save [OPTIONS] IMAGE [IMAGE…]
[IMAGE…]表示我们一次可以打包多个

• 别名
docker image save
• 关键参数
○ -o :输出到的文件。

先创建一个个人的目录
mkdir -p /data/maxhou
然后进去
docker images busybox

docker save -o mybusybox1.tar busybox:1.36.0
在这里插入图片描述
然后我们还可以保存多个文件
docker save -o mybusybox2.tar busybox:1.36.0 busybox:1.34.0
在这里插入图片描述
ll -h就可以看大小了
在这里插入图片描述

而且镜像也不会消失的,就算打了包

docker load

功能
导入使用 docker save 命令导出的镜像。
• 语法
docker load [OPTIONS]
• 别名
docker image load
• 关键参数
○ --input , -i : 指定导入的文件,代替 STDIN。
○ --quiet , -q : 精简输出信息。

我们导入这两个tar包的话
要先删除原来的镜像,不然效果不明显
dockerr rmi busybox:1.36.0 busybox:1.34.0
在这里插入图片描述

然后就是加载了
docker load -i mybusybox2.tar
这样就会加载出两个镜像了

在这里插入图片描述

然后又删除这两个镜像
开始用-q

docker load -i mybusybox2.tar -q
这个就是安静模式加载,意思就是不会显示出额外没用的信息,没用进度条了
在这里插入图片描述

docker history

功能
显示镜像历史。 就是看镜像每层都是怎么盖上去的
• 语法
docker history [OPTIONS] IMAGE
• 别名
docker image history
• 关键参数
○ -H , --human :大小和日期采用人容易读的格式展现 ,这个是默认的开启
○ --no-trunc :显示全部信息,不要隔断; --》不隔断的话会很难看,很乱
○ -q, --quiet: 只显示镜像id信息;

docker history busybox:1.36.0
在这里插入图片描述
看的出来就盖了两层
第一列id
第二列创建时间
第三列创建命令
四列是大小
最后一列是注释

docker history nginx:1.24.0 -q
只显示id
在这里插入图片描述

docker image prune

功能
删除不使用的镜像。 —》第一容器没有使用的镜像,但是很危险,因为后面可能还会用,第二就是空悬镜像,就是这个镜像的某个层不被任何镜像使用
• 语法
docker image prune [OPTIONS]
• 关键参数
○ -a , --all : 删除全部不使用的镜像;
○ --filter filter:指定过滤条件; —》时间过滤或者标签过滤
○ -f, --force :不提示是否删除;

docker image prune
它会警告说这个会删除空悬镜像

在这里插入图片描述
docker image prune -a
会警告删除没有使用容器的镜像—》危险

在这里插入图片描述

镜像操作案例

通过busybox查看一个容器和启动ip,然后就是删除镜像

查找镜像 下载镜像

docker search busybox
在这里插入图片描述
但是我们这个没有tag就是没有版本
所有去网站上找
在这里插入图片描述
在这里插入图片描述
docker pull docker:1.36.0
如何查看呢
docker images
或者docker images busybox
在这里插入图片描述

查看镜像及列表存储位置

这些镜像的信息默认存在/var/lib/docker

在这里插入图片描述

这里是因为我改过了根目录

在这里插入图片描述

然后进入image里面

里面有overlay2
这个就是docker的存储驱动

在进去
在这里插入图片描述
里面有一个json文件
看一下
在这里插入图片描述
我们再把这个json在线格式化一下

在这里插入图片描述
这个就看出了我们下了busybox,centos
说明docker把我们的镜像列表存到了一个docker里面

查看镜像详细信息

docker image inspect busybox:1.36.0
在这里插入图片描述
在这里插入图片描述
这个是启动命令,就是sh
-it时候的启动命令就要在这里看

docker history busybox:1.36.0
这个是看楼
在这里插入图片描述
或者在官网也是可以看的

打标签 推送镜像

然后就是又要建仓库了
docker tag busybox:1.36.0 maxhou/mytest:v1.0
docker tag busybox:1.36.0 maxhou/mytest:v2.0
在这里插入图片描述
然后就是push上去—》官网下载
docker push maxhou/mytest -a

我们有没有登录怎么看呢
cart /root/.docker/config.json
在这里插入图片描述
当然也能拉取下来了
docker pull maxhou/mytest:v2.0

这里默认使用的是dockerhub上的

运行容器 删除镜像

这里我们运行的是自己从仓库远程拉取下来的
在这里插入图片描述

docker run -it maxhou/mytest:v1.0 sh

这样就运行起来了
再打开一个shell

docker ps
在这里插入图片描述

看的出来我们的容器跑起来了

我们要查看ip,直接输入ifconfig
还可以ping www.baidu.com
在这里插入图片描述
exit
就可以退出了
docker ps -a | grep maxhou/mytest就可以找到了

docker rmi maxhou/mytest:v1.0
在这里插入图片描述
但是这样并不是删除了镜像
只是untag了
并没有delete
说明只是删除了tag,并没有删除空间
在这里插入图片描述
docker run -it maxhou/mytest:v1.0 sh
然后我们运行已经rmi的tag
就会说本地没有这个镜像,会去远程拉取的
在这里插入图片描述
这样就又有了
但是这个容器是另一个容器,不是原来的容器
什么意思呢
意思就是原来的docker run -it maxhou/mytest:v1.0 sh会生成一个容器
rmi的时候只是删除了tag,没有删除空间,也没有删除对应容器
docker ps -a | grep maxhou/mytest:v1.0
在这里插入图片描述
查看一下就知道有两个了

然后我们再去删除这个镜像
在这里插入图片描述

还是只删除了标签

docker ps -a | grep maxhou/mytest:v1.0
我们再去过滤一下

在这里插入图片描述

结果什么都没有了
docker ps -a
在这里插入图片描述

我们发现了第二列本应该是tag的,但是变成了镜像id
在这里插入图片描述
而且这个镜像id就是busybox和maxhou/mytest的镜像id

意思就是把已经停止了的镜像的容器的tag变成了镜像的id
我们继续删除2.0
docker rmi maxhou/mytest:v2.0
在这里插入图片描述
还是只删除了id
在这里插入图片描述
然后就是消失了

再来删除
docker rmi busybox:1.36.0
在这里插入图片描述
这时候删除就报错了
因为这已经是最后一个id了,最后一个镜像,还有对应的容器,所以就会出错
在这里插入图片描述

我们通过镜像的名称已经过滤不出来了容器,因为删除了它本来的镜像的tag,tag变成了镜像的id
怎么过滤呢
我们通过id过滤就可以了

docker ps -a | grep 7cfbbec8963d
在这里插入图片描述
这样就找到了容器了
要删除镜像就要先删除容器了,,删除只能删除容器的id了,因为没有tag

第一列就是容器的id
第二列就是镜像的tag,现在变为id了

docker rm 容器id 容器id
直接删两个

在这里插入图片描述
最后才是docker rmi busybox:1.36.0
就可以了
因为还显示了delete的
所有成功了
容器的id是唯一的
tag1多样的

实战一、离线迁移镜像

就是断网的情况下
在ubuntu的环境中保存一个镜像,然后拷贝到centos的服务器上,然后加载起来运行
我们先来拉自己的镜像
docker pull maxhou/mytest:v2.0
然后保存为tar文件
docker save -o mytestv2.0.tar maxhou/mytest:v2.0

然后就是一个centos的环境
注意这个迁移的环境一定要安装docker,不然是迁移不了的

两个服务器之间的拷贝是scp
在ubuntu中
scp mytestv2.0.tar root@43.138.128.166:/data/maxhou
43.138.128.166是centos的ip,然后就是root账户,/data/maxhou就是拷贝到的目录
然后输入centos的密码
就可以了

在这里插入图片描述
然后centos就有这个文件了
docker load -i mytestv2.0.tar
就可以了
在这里插入图片描述
然后就是启动这个镜像成一个容器
docker run -it maxhou/mytest:v2.0 sh
这样就可以了
研发的操作系统是ubuntu,生产的是centos,说明docker是跨平台运行的

实战二、镜像存储的压缩与共享

拉取nginx镜像,如果本地没有,镜像是从仓库拉取,如果有会提示镜像已经存
在,并且是最新的。
先看镜像在远端和本地是怎么存储对的
然后就是看pull一千份镜像,会不会放一千份呢
在这里插入图片描述
在这里插入图片描述

远端存的是镜像是压缩过的
pull到本地的是解压过的
在这里插入图片描述
打了标签的镜像,只是tag不一样了,id还是一样的,而且打了tag也不会改变镜像的大小
然后就是本端的push到远端,只会自动进行压缩的

在这里插入图片描述
我们把同一个镜像打多个tag
然后push到仓库去

在这里插入图片描述
它发现nginx库里面有这个版本,所以直接就去nginx库里面导入到我们的仓库了
我们再导入一个
在这里插入图片描述
这个直接就告诉你我们的仓库里面已经有这个镜像了


在这里插入图片描述

然后仓库里面就只是存了一个tag,不是存了很多个镜像,镜像只存了一种

总结


http://www.kler.cn/a/584094.html

相关文章:

  • 51单片机——汇编工程建立、仿真、调试全过程
  • AI短视频流量获取方法(一)
  • 使用DMA进行ADC数据读取与USART数据发送与接收
  • 基于SpringBoot实现旅游酒店平台功能十一
  • SpringMVC——REST简介及入门案例
  • c++之STL库
  • 蓝桥杯嵌入式组第十二届省赛题目解析+STM32G431RBT6实现源码
  • 笔记:代码随想录算法训练营day43:LeetCode300.最长递增子序列、674. 最长连续递增序、 718. 最长重复子数组
  • 大模型在老年性白内障诊疗全流程中的应用研究报告
  • Android wgs84坐标系转CGCS2000坐标系
  • CentOS8+Zabbix7.2.4解决中文显示问题
  • rtsp在网页上显示(webrtc-stream)
  • Pytest自动化测试框架pytest-xdist分布式测试插件
  • JAVA面试_进阶部分_Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
  • 【Unity】在项目中使用VisualScripting
  • 计算机视觉算法实战——驾驶员分心检测(主页有源码)
  • 大模型开源的工具包有哪些特殊符号可以使用;SEP 是什么
  • HTML 表格的详细介绍与应用
  • [洛谷]P1123 取数游戏
  • rv1106 PWM控制