Docker 之 私有仓库搭建

1  概述

本文将介绍两种方法搭建docker私有仓库:基于docker-distribution  和  基于 harbor 搭建

2  基于docker-distribution 的搭建

docker-distribution用于构建docker仓库私服,安装docker-distribution包,在extras仓库里

yum -y install docker-distribution

查看安装文件

[[email protected] ~]# rpm -ql docker-distribution

/etc/docker-distribution/registry/config.yml

/usr/bin/registry

/usr/lib/systemd/system/docker-distribution.service

/usr/share/doc/docker-distribution-2.6.2

/usr/share/doc/docker-distribution-2.6.2/AUTHORS

/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md

/usr/share/doc/docker-distribution-2.6.2/LICENSE

/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS

/usr/share/doc/docker-distribution-2.6.2/README.md

/var/lib/registry

[[email protected] ~]#

查看/etc/docker-distribution/registry/config.yml文件,有基础的配置,如默认镜像放置路径为rootdirectory: /var/lib/registry

默认不做修改,启动服务

[[email protected] ~]# systemctl start docker-distribution.service

启动成功后,服务监听在5000端口

默认docker不支持不安全的http协议,需要在docker的json配置文件写入 "insecure-registries":[]这个配置项。假设安装docker-distribution的服务器ip 为 10.10.10.72,如果能够解析主机名,也可以写 主机名:5000,如下

[[email protected] ~]# vim /etc/docker/daemon.json

{

"registry-mirrors": ["https://eyg9yi6d.mirror.aliyuncs.com"],

"bip":"172.17.0.1/16",

"insecure-registries":["10.10.10.72:5000"]

}

重启docker服务,此时该docker可以把10.10.10.72当做不安全的仓库使用,会使用http协议连接仓库10.10.10.72

[[email protected] ~]# systemctl restart docker.service

把镜像推送到10.10.10.72这台仓库

首先,把要推送到仓库的镜像打标签,如下

[[email protected] ~]# docker tag nginx:v1 10.10.10.72:5000/testdis_nginx:v1

然后把打完标签的镜像推送到仓库

[[email protected] ~]# docker push 10.10.10.72:5000/testdis_nginx:v1

如果出现如下的报错,registry有两个版本的接口,v1和v2,可能是docker-ce推送时调用的是v2版本接口,但是docker-distribution不支持版本v2,只支持v1,这里默认找v2版本。导致出现如下的报错

[[email protected] ~]# docker push 10.10.10.72:5000/testdis_nginx:v1

The push refers to repository [10.10.10.72:5000/testdis_nginx]

Get https://10.10.10.72:5000/v2/: http: server gave HTTP response to HTTPS client

[[email protected] ~]#

但是,默认distribution搭建的仓库没有安全认证机制,所以可以借助nginx来实现安全认证

Docker private Registry的Nginx反代配置方式:

# client_max_body_size对客户端上传的文件大小不做限制

vim nginx.conf

client_max_body_size 0;

location / {

proxy_pass  http://registrysrvs;

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

proxy_redirect off;

proxy_buffering off;

proxy_set_header        Host            $host;

proxy_set_header        X-Real-IP       $remote_addr;

proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

auth_basic "Docker Registry Service";

auth_basic_user_file "/etc/nginx/.ngxpasswd";

}

Docker-distribution配置文件格式详细信息:

https://docs.docker.com/registry/configuration/#list-of-configuration-options

distribution没有web页面,管理起来不方便,还有一个解决办法是vmware harbor,路径为https://github.com/vmware/harbor  关于harbor的安装文档,可以见链接 https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

 3  基于harbor 仓库搭建

安装包:harbor-offline-installer-v1.5.2.tgz, 这个包很大,有1G左右

注意,harbor依赖docker-compose,因此要提前安装好docker-compose,而且不同版本的harbor依赖的docker-compose不一样,如果没有安装,执行

yum -y install docker-compose

同时也要安装docker软件,并启动docker服务

yum -y install docker-ce

systemctl start docker.service

是一个编译好的包,展开就可以启动

tar xf  harbor-offline-installer-v1.5.2.tgz  -C /usr/local

cd /usr/local/harbor

vim  /usr/local/harbor/harbor.cfg

#注意,这个配置文件,如果不更改,里面的选项都是会自动创建,所以要看清楚,包括路径是否和本地其他文件有冲突

#主要修改以下三个配置,其他配置可使用默认

hostname=docker.ghbsubby.cn

db_password=root123

#管理登录密码

harbor_admin_password = Harbor12345

运行install.sh

. /usr/local/harbor/install.sh

安装过程,[Step 1]: loading Harbor images … 这一步比较慢,需要下载很多镜像,来实现相关的服务

停止docker harbor服务,通过docker-compose来实现,所有harbor服务会被停止,命令如下

注意,命令必须在/usr/local/harbor/路径下执行

docker-compose stop

启动服务

docker-compose start

但是这里有个问题,推送打过标签的镜像到harbor是遇到了问题

docker tag  testrun:latest  10.10.10.72/lnmp/testrun:v1

docker push 10.10.10.72/lnmp/testrun:v1

出现报错,超时了。

目前添加了以下两个配置

如果是协议上不支持v1和v2,加入配置insecure-registries可能可以解决,尤其docker版本是docker而不是docker-ce时可以解决。

这里docker没有实现安全访问,因此需要把harbor的主机写入insecure-registries配置段

[[email protected] harbor]# vim /etc/docker/daemon.json

{

"registry-mirrors": ["https://eyg9yi6d.mirror.aliyuncs.com"],

"bip":"172.17.0.1/16",

"insecure-registries":["10.10.10.72"]

}

[[email protected] ~]# vim /etc/sysconfig/docker

OPTIONS='--insecure-registry 10.10.10.72'

推送还是不成功,估计也跟版本有关系。操作步骤是没问题的,应该是哪些配置没启用。这个问题还在解决中~~

原文地址:http://blog.51cto.com/ghbsunny/2155048

时间: 2024-11-06 07:21:11

Docker 之 私有仓库搭建的相关文章

Centos7 Docker私有仓库搭建

Centos7 Docker私有仓库搭建 仓库:集中存放镜像的地方,可分为公共仓库和私有仓库(公共仓库"http://hub.docker.com"或国内的"http://www.daocloud.io") 注册服务器才是存放仓库具体的服务器(Registry),每个服务器上都可以放置多个仓库,而每个仓库上可以放置多个镜像,每个镜像上可以运行多个容器,每个容器上可以跑一个应用或应用组 原文地址:http://blog.51cto.com/13043516/21202

拥抱 Android Studio 之四:Maven 仓库使用与私有仓库搭建

使用.创造和分享 笔者曾经不思量力的思考过『是什么推动了互联网技术的快速发展?』这种伟大的命题.结论是,除了摩尔定律之外,技术经验的快速积累和广泛分享,也是重要的原因. 有人戏称,『写 Java,首先要学会选包』,在这里不好评论对错.不过这句话里面,至少包含两层意思:首先 Java 有大量的现成的依赖包,不必要自己造轮子:其次,Java 的包存放较为集中,集成方式也方便. 笔者从事 Android 和 Java 开发以来,经历了几个阶段: 闭门造轮子 > 使用别人的轮子 > 开门造轮子 >

Docker 构建私有镜像仓库(6)

title: Docker 构建私有镜像仓库(6) date: 2018-12-18 08:47:27 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.

docker创建私有仓库

1.查看远程仓库中的列表$ sudo docker search registry    //会列出你所需要的仓库 2.获取registry仓库$ sudo docker pull registry   //最新 3.运行 $ sudo docker run -p 5000:5000  docker.io/registry   //-p映射端口 3.1查看容器运行情况[[email protected] docker]# docker psCONTAINER ID        IMAGE   

Docker的私有仓库

学习Docker的过程中Docker的私有仓库一直没能成功,就是因为CentOS 6.x和CentOS 7默认引入了支持https认证,每次在push和pull的时候都会报错,今天是周末,利用一天的时间反复测试和网上案列的整合,总算是成功了,也借此机会对学习Docker的朋友有所帮助. 个人的愚见:博友在练习的时候建议用CentOS 7.x系统,不建议用CentOS 6.x系统 一.准备 地址规划: Docker私有仓库地址:192.168.0.109 Docker客户端地址:192.168.0

docker-ce私有仓库搭建

说明:本文中私有仓库的ip地址为10.10.172.203:5000,操作系统为CentOS7.2: 服务端:10.10.172.203/24 1.从Docker官方仓库里下载registry镜像 # docker pull registry 2.docker images命令查看本地镜像: [[email protected] ~]# docker images   REPOSITORY          TAG                 IMAGE ID            CREA

docker 创建私有镜像仓库

docker 创建私有镜像仓库1创建配置文件 {"insecure-registries":["192.168.1.10:5000"] //本地仓库地址}2.重启动docker服务systemctl restart docker3.启动私有仓库docker run -d -p 5000:5000 registry:latest4.上传镜像到私有仓库给镜像打标签后上传 docker tag nginx:latest 192.168.1.10:5000/nginx:la

.NETCore 实现容器化Docker与私有镜像仓库管理

原文:.NETCore 实现容器化Docker与私有镜像仓库管理 一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技术,它隔离了应用程序对基础架构(操作系统等)的依赖.相较于虚拟机而言,Docker共享的是宿主机的硬件资源,使用容器来提供独立的运行环境来运行应用.虚拟机则是基于Supervisor(虚拟机管理程序)使用虚拟化技术来提供隔离的虚拟机,在虚拟机的操作系统上提供运行环境!虽然两者都提供了很好的资源隔离,

docker 配置私有仓库、打开TCP管理端口

docker配置私有仓库.打开TCP管理端口 该机器主要用于jenkins在编译打包镜像时使用.需要能push镜像到私有仓库,需要开通tcp管理端口作为docker远程机器. 安装docker # vi /etc/resolv.conf nameserver 114.114.114.114 # yum update # yum install -y yum-utils device-mapper-persistent-data lvm2 # yum-config-manager --add-re