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.rhkb.cn/news/33635.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue/react/vite前端项目打包的时候加上时间最简单版本,防止后端扯皮

如果你是vite项目,直接写一个vite的插件,通过这个插件可以动态注入环境变量,然后当打包的时候,自动注入这个时间到环境变量中,然后在项目中App.vue中或者Main.tsx中打印出来,这就知道是什么时候编译的项目了…

Linux中Gdb调试工具常用指令大全

1.gdb的安装 如果你是root用户直接用指令 :yum install gdb ;如果你是普通用户用指令:sudo yum install gdb; 2.gdb调试前可以对你的makefile文件进行编写: 下面展示为11.c文件编写的makefile文件: code…

go 安装swagger

1、依赖安装: # 安装 swag 命令行工具 go install github.com/swaggo/swag/cmd/swaglatest# 安装 gin-swagger 和 swagger 文件的依赖 go get -u github.com/swaggo/gin-swagger go get -u github.com/swaggo/files 2、测试 cmd中输入: swag -v 如果…

数据库---sqlite3

数据库: 数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer …

go的gmp

参考链接:https://www.bilibili.com/video/BV19r4y1w7Nx Golang的GMP调度模型(协程调度器)是其并发编程的核心。GMP代表Goroutine、Machine和Processor三个关键组成部分。Goroutine是Go语言中的轻量级线程,Machine是操作系统的线程,Processor…

标贝自动化数据标注平台推动AI数据训练革新

随着人工智能(AI)技术的快速发展,数据标注作为AI模型训练的关键环节,其重要性日益凸显。传统的人工数据标注方式虽然能够提供高质量的标注数据,但存在效率低、成本高、一致性差等问题。为了解决这些问题,标…

从传统制动到线控制动:技术变革与挑战

随着汽车产业从传统机械时代迈向电动化、智能化时代,车辆底盘的“线控化”已经成为重要发展趋势。其中,线控制动系统(Brake-by-Wire,简称BBW)是该趋势的核心一环。传统的制动系统主要依赖真空助力或液压传动&#xff0…

Java---JavaSpringMVC解析(1)

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC" 1.MVC MVC是Model View Controller的缩写&#…

VSTO(C#)Excel开发8:打包发布安装卸载

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

地下停车场调频广播覆盖:破解地下车库无线广播收听孤岛,技术赋能地下停车场FM调频无线广播覆盖

地下停车场调频广播覆盖:破解地下车库无线广播收听孤岛,技术赋能地下停车场FM调频无线广播覆盖 北京海特伟业科技有限公司任洪卓于2025年3月14日发布 地下停车场调频广播覆盖系统建设背景 随着城市化进程的加速,地下停车场已成为现代建筑不…

kettle的转换中sql不按设计顺序执行原因分析与解决办法

1.问题描述 如图,通过箭头指定多个SQL脚本的先后顺序,实际各个sql没有阻塞,没有等待,几乎是并行,与预期不符。 2.原因 转换文件(.ktr) 用于控制数据的流量,比如表输入指向表输出节…

P1259 黑白棋子的移动【java】【AC代码】

有 2n 个棋子排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为 n5 的情况: 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但…

P6772 [NOI2020] 美食家

训练角度:图上的状态转移,倍增 → \rightarrow → 优化状态转移; ▍ 题意 精灵王国共有 n n n 座城市,城市从 1 1 1 到 n n n 编号,其中城市 i i i 的美食能为小 W 提供 c i c_i ci​ 的愉悦值。精灵王国的城市…

51c大模型~合集7

我自己的原文哦~ https://blog.51cto.com/whaosoft/11519481 #MTMamba 王座易位?香港科技大学MTMamba,超越 ViT与CNN! 本文作者提出了MTMamba,一种新型的多任务架构,具有基于Mamba的解码器,在多任务场…

sap 内存管理与数据共享方式

SAP内存管理 内存是程序之间为了传递数据而使用的共享存储空间 SAP内存分类:1、SAP内存,2、ABAP内存 这两种内存都是针对同一登录用户实现数据共享。 SAP内存(SAP Memory)和ABAP内存(ABAP Memory)&…

Manus邀请码申请全流程指南(2025最新版)——申请Manus体验资格

🌟引言: 近期,号称“全球首个通用AI智能体”的Manus引爆科技圈,其自主执行复杂任务的能力颠覆了传统AI工具仅能输出文本的局限。然而,由于内测阶段采用邀请制,一码难求的现状让用户直呼“门槛太高”。 名人…

Linux 命名管道

文章目录 🚀 深入理解命名管道(FIFO)及其C实现一、命名管道核心特性1.1 🧩 基本概念 二、💻 代码实现解析2.1 📁 公共头文件(common.hpp)2.2 🖥️ 服务器端(s…

Python 与 sklearn 库:轻松构建 KNN 算法双版本

引言​ k 最近邻(kNN)算法是一种简单而强大的机器学习算法,常用于分类和回归任务。在 Python 中,借助 scikit - learn(sklearn)库,我们可以轻松实现 kNN 算法。本文将为大家介绍两种使用 sklea…

分享vue好用的pdf 工具实测

vue3-pdf-app: 带大纲,带分页,带缩放,带全屏,带打印,带下载,带旋转 下载依赖: yarn add vue3-pdf-appornpm install vue3-pdf-app 配置类: 创建文件 pdfConfig.ts /…

android 调用wps打开文档并感知保存事件

需求场景 在项目开发中会碰到需要调用WPS打开Word,Excel,Ppt等Office系列文档的情况,网上目前少有正式介绍如何调用相关API打开文档,并实现文档编辑后回传给三方应用,本人在逛WPS社区时发现 解锁WPS二次开发新世界:Android开发用…