基础教程
一.相关知识
今天来讲docker的第三个组成部分仓库(Registry)。仓库是用来保存用户创建的镜像,仓库分共有和私有两种。
- 公有仓库
Docker公司自己提供了最大的公有仓库docker hub,可以在Docker Hub上创建账户,保存分享自己创建的镜像,如下图所示。 - 私有仓库
可以部署在自己公司服务器,其原理性和gitlab相差无几,下面我们来进行私有仓库搭建实操
二.案例讲解
1. 创建镜像仓库
拉取私有仓库镜像文件registry ,并生成容器(Container),命令如下:
$ docker run -d -p 5000:5000 --restart always --name registry registry:2
docker run-- docker 命令
-p 5000:5000 -- 宿主机和容器的映射端口
--restart always -- 出错或重启物理机器后总是自动重启
--name registry -- 容器的名称
registry:2 -- 所需镜像及版本
到此,我们的私有镜像已经搭建完毕,非常简单。 此时,仓库只能本地访问,要想远程访问,接下来要做以下配置
2. 远程访问
所有安装docker的机器都要配置如下远程配置
$ vim /etc/docker/daemon.json
# docker 默认不允许向http推送,参考: https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry,
# 没有信任证书,通过配置daemon来跳过验证
{
"registry-mirrors":[
"https://8ov1n2lo.mirror.aliyuncs.com"
],
"insecure-registries":[
"192.168.1.152:5000"
]
}
重启docker 服务
$ systemctl restart docker
(1). 内存限制(选作,一般用不到)
如果想要控制容器的运行内存,在创建容器的时候可以添加以下选项
$ docker run --memory=500m nginx:alpine
(2). 安装界面(选作,一般用不到)
$ docker pull hyper/docker-registry-web
$ docker run -d --restart=always -p 5001:8080 --name registry-web --link registry -e REGISTRY_URL=http://192.168.1.152:5000/v2 -e REGISTRY_NAME=192.168.1.15:5000 hyper/docker-registry-web
3. 推送本地镜像到仓库中
(1). 给镜像打tag,并推送
我们以上个案例的nginx:v1 容器为例进行操作,推送到仓库可以是本地访问的镜像,亦可以是远程访问的镜像
- 本机访问
$ docker tag nginx:alpine localhost:5000/nginx:v1
$ docker push localhost:5000/nginx:v1
- 远程访问
$ docker tag nginx:alpine 192.168.1.152:5000/nginx:v1 # 打tag标签
$ docker push 192.168.1.152:5000/nginx:v1 #推送
(2). 查看仓库内镜像元素是否存在
$ curl -X GET http://localhost:5000/v2/_catalog
$ curl -X GET http://localhost:5000/v2/nginx/tags/list
通过上面的命令可以看出,仓库已经存在“nginx”,v1的版本的镜像文件。
------------------------------------------------------------------------------------------------------