docker仓库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker仓库相关的知识,希望对你有一定的参考价值。

docker仓库是一个无状态,高度可扩展的服务器端应用程序,可以存储和分发Docker镜像

你应该使用仓库,如果你想:
	严格控制您的镜像和存储位置
	完全拥有您的镜像分配管道
	将镜像存储和分发紧密集成到您的内部开发工作流中


运行本地仓库启动容器
	docker run -d -p 5000:5000 --restart=always --name registry registry:2
停止本地仓库
	要停止仓库,请使用docker stop 与其他容器相同的命令
		docker stop registry
	要卸下容器,请使用docker rm
		docker stop registry && docker rm -v registry

 

基本配置 要配置容器,可以向docker run命令传递附加或修改的选项

1、自动启动仓库
如果要将仓库用作永久基础架构的一部分,则应将其设置为Docker重新启动或退出时重新启动
		docker run -d 	 	 -p 5000:5000 	 	 --restart=always 	  	--name registry 	  	registry:2
2、自定义发布端口
如果您已经使用端口5000,或者想要运行多个本地仓库以分开关注的区域,则可以自定义注册表的
端口设置。此示例在端口5001上运行仓库,并将其命名 registry-test。请记住,-p值的第一
部分是主机端口,第二部分是容器内的端口。在容器内,5000默认情况下,仓库侦听端口
		docker run -d 	  	-p 5001:5000 	  	--name registry-test 	  	registry:2
如果要更改侦听容器内的端口,可以使用环境变量REGISTRY_HTTP_ADDR来更改它。此命令使注册表侦听容器内的端口5001:
		 docker run -d 		  -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 		  -p 5001:5001 		  --name registry-test 		  registry:2
3、自定义存储位置
默认情况下,仓库数据在主机文件系统作为Docker卷保留,我们可以将仓库内容存储在主机文件系
统的特定位置,示例将主机目录绑定/mnt/registry到仓库容器中/var/lib/registry/
		docker run -d 		  -p 5000:5000 		  --restart=always 		  --name registry 		  -v /mnt/registry:/var/lib/registry 		  registry:2

 

部署纯HTTP仓库

1、编辑daemon.json文件,其默认位置 /etc/docker/daemon.json, 如果daemon.json文件不存在,请创建它
	{
	  	"insecure-registries" : ["myregistrydomain.com:5000"]
	}
	将示例中的不安全注册表的地址替换为该安全注册表的地址
2、重新启动Docker以使更改生效

 

使用自签名证书

1、生成自己的证书:
	mkdir -p /data/certs
	openssl req   	-newkey rsa:4096 -nodes -sha256 -keyout /data/certs/docker.sellsa.com.key   	-x509 -days 365 -out /data/certs/docker.sellsa.com.crt

  	注意:Common Name需要填写域名,我这里写的是docker.sellsa.com


 2、使用TLS启动仓库
	docker run -d 	--restart=always 	-v /data/certs:/certs 	-v /mnt/registry:/var/lib/registry 	-e REGISTRY_HTTP_ADDR=0.0.0.0:80 	-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/docker.sellsa.com.crt 	-e REGISTRY_HTTP_TLS_KEY=/certs/docker.sellsa.com.key 	-p 80:80 	--name registry 	registry:2


3、指定每个docker守护进程信任该证书
	将docker.sellsa.com.crt文件复制到/etc/docker/certs.d/sellsa.com:80/ca.crt每个Docker主机上

4、我配置hosts解析docker.sellsa.com
	192.168.88.2 docker.sellsa.com

5、测试上传镜像到仓库
	docker pull centos   //从官方仓库下载一个镜像
	docker tag centos:latest docker.sellsa.com:80/centos:testv1    //配置一个标签
	docker push docker.sellsa.com:80/centos:testv1  //上传到仓库

 

本机基本认证

1、为用户创建一个密码文件testuser,密码为 testpassword:
	mkdir auth
	docker run 	--entrypoint htpasswd 	registry:2 -Bbn testuser testpassword > auth/htpasswd


2、使用基本身份验证启动注册表
	docker run -d 	-p 5000:5000 	--restart=always 	--name registry 	-v `pwd`/auth:/auth 	-e "REGISTRY_AUTH=htpasswd" 	-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" 	-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd 	-v /data/certs:/certs 	-v /mnt/registry:/var/lib/registry 	-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/docker.sellsa.com.crt 	-e REGISTRY_HTTP_TLS_KEY=/certs/docker.sellsa.com.key 	registry:2


3、我们把证书目录复制一份(因为这里我们改用凌端口5000)
	cd /etc/docker/certs.d/
	cp -r docker.sellsa.com:80 docker.sellsa.com:5000

4、配置一个镜像标签
	docker tag centos:latest docker.sellsa.com:5000/centos:testv1

5、尝试推送
	# docker push docker.sellsa.com:5000/centos:testv1
	The push refers to a repository [docker.sellsa.com:5000/centos]
	b362758f4793: Preparing 
	no basic auth credentials
	提示我们没有经过基本的认证,因为上面我们配置了认证

6、登录仓库,然后进行推送
	# docker login docker.sellsa.com:5000
	Username: testuser
	Password: 
	Login Succeeded
	
	# docker push docker.sellsa.com:5000/centos:testv1
	The push refers to a repository [docker.sellsa.com:5000/centos]
	b362758f4793: Pushed 
	testv1: digest: sha256:65daf092bcbca173a2fe9bb5c9fd445f0cc86e0054756e68694e98d6d39c219a size: 529

 

使用Compose文件部署仓库

如果您的仓库调用是高级的,那么使用Docker编写文件可能会更容易部署它,而不是依赖于特定的docker run 调用。使用以下示例docker-compose-yml作为模板。
	registry:
	  restart: always
	  image: registry:2
	  ports:
	    - 5000:5000
	  environment:
	    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
	    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
	    REGISTRY_AUTH: htpasswd
	    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
	    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
	  volumes:
	    - /path/data:/var/lib/registry
	    - /path/certs:/certs
	    - /path/auth:/auth


替换/path为包含 目录certs/和auth/目录的目录。

通过在包含该docker-compose.yml文件的目录中发出以下命令来启动您的:
docker-compose up -d

 

 

以上是关于docker仓库的主要内容,如果未能解决你的问题,请参考以下文章

docker--docker仓库

gitlab私人代码仓库搭建(docker)

Docker企业级私有仓库

百余 Docker 注册表配置出错,数千代码仓库遭暴露

Docker私有仓库Registry的搭建验证

docker学习11-上传本地镜像到镜像仓库