作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:
Docker基本情况
Docker基本命令
Dockerfile
Docker镜像
Docker仓库(本小节属于)
Docker原理
Docker网络&存储&日志
Docker-Compose
Docker番外篇
前面我们无论是从公网仓库下载的镜像还是通过Dockerfile编写的镜像,在绝大多数的情况下,都需要上传到仓库里面,然后再通过仓库分发到其他需要使用的节点,那么仓库是怎么创建的呢?
Docker的官方给我们提供了一个仓库,这个仓库也是以容器方式运行的,这个仓库的镜像名字是registry。
1.下载仓库镜像
bash
#这个地址不一定持续可用
docker pull m.daocloud.io/docker.io/library/registry
2.运行仓库容器
首先这里需要注意就是磁盘挂载,要确保用户上传的数据持久化保存在对应的服务器,不会因为容器删除或者故障而丢失数据。其次就是要尽可能包括在他的可用性,需要需要确保服务或者机器重启这个容器会自动启动。再次就是要保证他5000端口对外暴露和容器的名字要方便识别。
bash
#当然你还可以根据需要添加其他参数
docker run -d \
-v /data:/var/lib/registry \
--restart=always \
-p 5000:5000 \
--name registry \
m.daocloud.io/docker.io/library/registry
3.修改容器tag
ip路径和名字以现场实际为准。
bash
[root@localhost ~]# docker tag \
> m.daocloud.io/docker.io/library/registry \
> 192.168.31.205:5000/registry
4.上传镜像
yaml
#上传镜像需要先修改daemon.json,并重启docker服务
{
"insecure-registries": ["192.168.31.43:5000"]
}
[root@localhost ~]# docker push \
> 192.168.31.205:5000/registry
Using default tag: latest
The push refers to repository [192.168.31.205:5000/registry]
7827cbf539f4: Pushed
d28d4e94d6f3: Pushed
028476fc17e0: Pushed
96a01afdff54: Pushed
f9fc769d3350: Pushed
latest: digest: sha256:2e3dacd68b23ae633b4e46e2702f7c4fcfc1e6bd0469935f5fdc9d8ef630179a size: 1363
5.查看仓库有哪些镜像
csharp
# 当然这里只有一个镜像,如果有多个镜像则在[]里面可以到具体的名字
[root@localhost ~]# curl 192.168.31.205:5000/v2/_catalog
{"repositories":["registry"]}
6.查看镜像有哪些tag
csharp
#这里的rgistry就是容器的名字,具体以现场路径和名字为准
#下面的latest 和2.8.3 就是他有的tag
[root@localhost ~]# curl 192.168.31.205:5000/v2/registry/tags/list
{"name":"registry","tags":["latest","2.8.3"]}
7.镜像&tag删除
一般而言,默认情况下是不能删除镜像和tag,后面我们会讲一个开源的仓库:Harbor他可以通过web平台进行操作,就可以删除。
总结
这个仓库,相对还是很简单的,需要理解就2个地方:仓库的ip+端口就是他上传的服务器;后面的路径和名字则是需要上传的路径和镜像名字。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。