仓库
1 | # 登陆/注销docker |
镜像
1 | # 查找镜像 |
本地镜像
1 | # 查看本地镜像 |
本地容器
1 | # 查看本地运行中的容器 |
一个创建+启动tensorflow容器的例子
1 | # 下载镜像 |
Q1
根本不存在“镜像名”这个东西吧,只有“镜像所在的仓库名”、“标签”、“镜像ID”吧!==所说的“镜像名”是指镜像所在的仓库名称吗??== 这样很不合理吧。。
A1
在一个教程上看到:
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
按这意思应该是 [ REPOSITORY : TAG ] 这样就表示一个镜像了,也就是所谓的镜像名。
Q2
我在自己的账户下新建了一个仓库,里面没有什么镜像的名字,只有tag,意思是这个==仓库的所有镜像都是同一个名字?只有tag的不同?==
A2
不是的,[ REPOSITORY : TAG ]表示的应该是某个镜像的名字,同一个镜像(同一个ID)会有多个名字,同一个仓库的不同标签表示的镜像可能是同一个ID也可能是不同的ID。
Q3
docker ps -a 列出容器列表的时候,容器会有真正自己的“name”也有“ID”,但是第二个属性是“Image”,里面是镜像的仓库名称。。。???所以真的就是仓库名称就代表了镜像名称了??但是==没有tag怎么知道是哪一个image??== 另:在新建容器的时候确实是需要tag的,没有写默认latest。
A4
未知。
Q4
当某指令要写[ 镜像名or镜像ID ]时,==当ID有重复的时候,可以用镜像名,就是指仓库名吗?还是指[ 仓库名 ]:[ tag ]这样?==
A4
经过尝试,镜像名就是指[ REPOSITORY : TAG ]。
Q5
当我使用docker tag [ 镜像名 or 镜像 id ] [ 新镜像名 ]:[ 新 tag ],==是新建了一个image还是只是多指定了一个“指向这个ID”的tag而已?==
实际操作的时候会在docker images里面多生成一行记录,原本的不变,而且在我镜像ID有重复、存在多个的时候这条指令并不会报错,==说明这些ID相同、仓库和tag不同的images根本就是同一个image??==
另外,这条指令中的[ 新镜像名 ]似乎是可以随意取的,命令完成之后再查看,这个[ 新镜像名 ]成为了一个新的仓库名,这是什么意思?
A5
经过多次尝试这条指令
1 | >> docker tag [ 镜像名 or 镜像 id ] [ 新镜像名 ]:[ 新 tag ] |
有一些结论:
- 这条指令里的 [ 镜像名 or 镜像 id ] 可以是[ REPOSITORY : TAG ],也可以写ID,没有报错,因此确实这些ID相同、仓库和tag不同的images根本就是同一个image。
- 这条指令只是一个修改镜像名(即[ REPOSITORY : TAG ])的指令,并不会生成一个新的image,原来的名字也依然存在。
- 另外,当我尝试两次执行这条指令, [ 新镜像名 ]:[ 新 tag ]完全相同, [ 镜像名 or 镜像 id ] 采用不同的,再docker images查看,结果是新生成两行images,但是第一条指令的tag变为none,第二条指令的正常。
在删除镜像指令
1
>> docker rmi [ REPOSITORY : TAG ]
执行的时候也不是删除这个镜像,只是删除[ REPOSITORY : TAG ]指向这个镜像的关系,当某镜像ID确认唯一的时候使用指令
1
>> docker rmi [ 镜像ID ]
才是删除这个镜像。
关于这个[ 新镜像名 ],又把我搞混乱了。。镜像名应该是[ REPOSITORY : TAG ]啊,那这个新取的名字变成了一个仓库名,是新建了一个仓库的意思?
是的,这个[ 新镜像名 ],如果是之前不存在的,那么是新建了一个仓库名,标准的应该是[ 用户名 / 仓库名 ],这样推送的时候就会在用户下新建这个仓库,也可以使用原来的仓库,新的标签。
自问自答结束=_=