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自开源后受到广泛的关注和讨论,目前已有多个相关项目(包括Docker三剑客、Kubernetes等),逐渐形成了围绕Docker容器的生态体系,由于Docker在业界造成的影响力实在太大,dotCloud公司后来也直接改名为Docker Inc,并专注于Docker相关技术和产品的开发.

在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便,另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地私有镜像仓库,本小结将具体介绍两个私有仓库的搭建,其中包括Registry,以及Vmware的Harbor企业仓库.

Registry 仓库搭建

Docker Registry工具是Docker内置的私有仓库解决方案,新版本的Registry基于Golang进行了重构,提供更好的性能和扩展性,并且支持Docker 1.6+的API,非常适合用来构建私有的镜像注册服务器.官方仓库中也提供了Registry的镜像,因此用户可以通过容器运行和源码安装两种方
式来使用Registry.

实验规划Docker服务器:192.168.1.5,Docker客户端:192.168.1.25,请在服务端配置好网桥服务.

◆服务端配置◆

1.将本机配置成网桥,使之能够互相通信.

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
DEVICE=eno16777728
TYPE=Ethernet
BOOTPROTO=static
BRIDGE=br0
NM_CONTROLLED=yes
ONBOOT=yes

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
IPADDR=192.168.1.15
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
ONBOOT=yes

[[email protected] ~]# reboot

2.在服务端192.168.1.5上拉取registry镜像包.

[[email protected] ~]# docker pull registry:latest
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              2e2f252f3c88        3 months ago        33.3MB

3.在服务端192.168.1.5运行docker私有仓库成功执行,则我们的docker私有仓库搭建成功.

[[email protected] ~]# docker run -itd -p 5000:5000 -v /registry:/var/lib/registry --restart=always --privileged=true --name my_registry registry:latest

◆客户端上传◆

1.此处我们以hello-world为例,首先要先把它拉取下来.

[[email protected] ~]# docker pull hello-world:latest
[[email protected] ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              4ab4c602aa5e        3 months ago        1.84 kB

2.其次给hello-world镜像打个tag表示新的版本,过程中指定服务器IP地址.

[[email protected] ~]# docker tag hello-world 192.168.1.5:5000/hello-world:latest
[[email protected] ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
192.168.1.5:5000/hello-world   latest              4ab4c602aa5e        3 months ago        1.84 kB
docker.io/hello-world          latest              4ab4c602aa5e        3 months ago        1.84 kB

3.由于docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端192.168.1.25做相关设置,禁止使用https传输.

[[email protected] ~]# vim /etc/docker/daemon.json
{
        "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
        "insecure-registries":["192.168.1.5:5000"]
}

4.依次执行下面两条命令,重新启动docker让其加载我们的配置文件.

[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl restart docker
[[email protected] ~]# systemctl enable docker

5.执行推送命令,将我们的hello-world推送到服务器上.

[[email protected] ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
192.168.1.5:5000/hello-world   latest              4ab4c602aa5e        3 months ago        1.84 kB
docker.io/hello-world          latest              4ab4c602aa5e        3 months ago        1.84 kB

[[email protected] ~]# docker push 192.168.1.5:5000/hello-world:latest
The push refers to a repository [192.168.1.5:5000/hello-world]
428c97da766c: Pushed
latest: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524

6.在服务器端查看刚刚提交的一个请求.

[[email protected] ~]# ls -l /registry/docker/registry/v2/repositories
total 0
drwxr-xr-x 5 root root 55 Dec 17 20:23 hello-world

[[email protected] ~]# curl http://192.168.1.5:5000/v2/_catalog
{"repositories":["hello-world"]}

◆客户端拉取◆

1.客户端修改一下配置文件,指定以下服务器地址.

[[email protected] ~]# cat /etc/docker/daemon.json
{
        "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
        "insecure-registries":["192.168.1.5:5000"]
}

2.修改Docker配置文件,开启局域网模式.

在/etc/default/docker添加一行:

DOCKER_OPTS="--insecure-registry 192.168.1.5:5000"

或在/etc/sysconfig/docker文件中添加

OPTIONS='--selinux-enabled --insecure-registry 192.168.1.5:5000'

3.重新启动Docker,加载配置文件.

[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl restart docker
[[email protected] ~]# systemctl enable docker

4.通过命令下载测试镜像.

[[email protected] ~]# docker pull 192.168.1.5:5000/hello-world:latest

Harbor 企业仓库搭建

Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为https://github.com/vmware/harbor.其目标是帮助用户迅速搭建一个企业级的DockerRegistry服务,它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role BasedAccess Control),AD/LDAP集成、以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文.Harbor的每个组件都是以Docker容器的形式构建的,使用DockerCompose来对它进行部署.用于部署Harbor的DockerCompose模板位于/Deployer/docker-compose.yml,由5个容器组成,这几个容器通过Dockerlink的形式连接在一起,在容器之间通过容器名字互相访问.对终端用户而言,只需要暴露proxy即Nginx的服务端口.

Proxy:由Nginx服务器构成的反向代理
Registry:由Docker官方的开源 registry 镜像构成的容器实例
UI:即架构中的core services,构成此容器的代码是 Harbor项目的主体
MySQL:由官方MySQL镜像构成的数据库容器
Log:运行着rsyslogd的容器,通过log-driver的形式收集其他容器的日志

Harbor特性

a、基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限
b、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制
c、支持LDAP:Harbor的用户授权可以使用已经存在LDAP用户
d、镜像删除,垃圾回收:Image可以被删除并且回收Image占用的空间,绝大部分的用户操作API方便用户对系统进行扩展
e、用户UI:用户可以轻松的浏览、搜索镜像仓库以及对项目进行管理
f、轻松的部署功能:Harbor提供了online、offline安装,除此之外还提供了virtualappliance安装
g、Harbor和 dockerregistry 关系:Harbor实质上是对 dockerregistry 做了封装,扩展了自己的业务模块

Harbor认证过程

a、dockerdaemon从dockerregistry拉取镜像
b、如果dockerregistry需要进行授权时,registry将会返回401Unauthorized响应,同时在响应中包含了docker
client如何进行认证的信息
c、dockerclient根据registry返回的信息,向auth server发送请求获取认证token
d、auth server则根据自己的业务实现去验证提交的用户信息是否存符合业务要求
e、用户数据仓库返回用户的相关信息
f、auth server将会根据查询的用户信息,生成token令牌,以及当前用户所具有的相关权限信息.上述就是
完整的授权过程.当用户完成上述过程以后便可以执行相关的pull/push操作.认证信息会每次都带在请求头中

Harbor认证流程

a、首先,请求被代理容器监听拦截,并跳转到指定的认证服务器
b、如果认证服务器配置了权限认证,则会返回401.通知dockerclient在特定的请求中需要带上一个合法的token,而认证的逻辑地址则指向架构图中的core services
c、当dockerclient接受到错误code.client就会发送认证请求(带有用户名和密码)到coreservices进行basic
auth认证
d、当C的请求发送给ngnix以后,ngnix会根据配置的认证地址将带有用户名和密码的请求发送到core
serivces
e、coreservices获取用户名和密码以后对用户信息进行认证(自己的数据库或者介入LDAP都可以).成功以后,返回认证成功的信息

◆服务端配置◆

在服务端安装之前,请确保你的环境里面已安装好了Docker.

1.下载Docker-Compose工具,并移动到/usr/local/bin目录下.

[[email protected] ~]# wget https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m`
[[email protected] ~]# mv docker-compose /usr/local/bin/
[[email protected] ~]# chmod 777 -R /usr/local/bin/docker-compose
[[email protected] ~]# docker-compose --version
docker-compose version 1.9.0, build 2585387

2.下载HarBor解压并修改配置文件.

[[email protected] ~]# wget https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-offline-installer-v1.2.0.tgz

[[email protected] ~]# tar -xzvf harbor-offline-installer-v1.2.0.tgz
[[email protected] ~]# cd harbor
[[email protected] harbor]# ls
common                     docker-compose.yml     harbor.v1.2.0.tar.gz  NOTICE
docker-compose.clair.yml   harbor_1_1_0_template  install.sh            prepare
docker-compose.notary.yml  harbor.cfg             LICENSE               upgrade

[[email protected] harbor]# vim harbor.cfg

hostname=192.168.1.5  #本机IP地址
ui_url_protocol=https

3.创建目录并到制定目录生成加密https证书.

[[email protected] ~]# mkdir -p /data/cert
[[email protected] ~]# chmod 777 /data/cert
[[email protected] ~]# cd /data/cert

[[email protected] ~]# openssl genrsa -des3 -out server.key 2048
[[email protected] ~]# openssl req -new -key server.key -out server.csr
[[email protected] ~]# cp server.key server.key.org
[[email protected] ~]# openssl rsa -in server.key.org -out server.key
[[email protected] ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

4.安装并拷贝相关配置文件,最后进入测试页测试效果.

[[email protected] ~]# cd /root/harbor
[[email protected] harbor]# ./install.sh
[[email protected] ~]# curl https://192.168.1.5
#用户名:admin  密码:Harbor12345

◆客户端上传◆

1.客户端需要指定镜像仓库地址(也就是服务器的地址).

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

{
"insecure-registries": ["192.168.1.5"]
}

[[email protected] ~]# systemctl restart docker

2.下载一个hello-world镜像,并给镜像重新打标签.

[[email protected] ~]# docker pull hello-world:latest
[[email protected] ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              4ab4c602aa5e        3 months ago        1.84 kB

[[email protected] ~]# docker tag hello-world:latest 192.168.1.5/library/hello-world:latest
[[email protected] ~]# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
192.168.1.5/library/hello-world   latest              4ab4c602aa5e        3 months ago        1.84 kB
docker.io/hello-world             latest              4ab4c602aa5e        3 months ago        1.84 kB

3.登陆进行上传测试.

[[email protected] ~]# docker login 192.168.1.5
Username: admin
Password: Harbor12345
Login Succeeded

[[email protected] ~]# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
192.168.1.5/library/hello-world   latest              4ab4c602aa5e        3 months ago        1.84 kB
docker.io/hello-world             latest              4ab4c602aa5e        3 months ago        1.84 kB

[[email protected] ~]# docker push 192.168.1.5/library/hello-world:latest
The push refers to a repository [192.168.1.5/library/hello-world]
428c97da766c: Pushed
latest: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524

◆客户端拉取◆

1.指定镜像仓库地址,指定镜像仓库地址.

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

{ "insecure-registries": ["192.168.1.5"] }         #指定服务器地址

2.下载测试镜像,这里下载刚刚上传的试一下.

[[email protected] ~]# docker pull 192.168.1.5/library/hello-world:latest

Trying to pull repository 192.168.1.5/library/hello-world ...
latest: Pulling from 192.168.1.5/library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812
Status: Downloaded newer image for 192.168.1.5/library/hello-world:latest

[[email protected] ~]# docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
192.168.1.5/library/hello-world   latest              4ab4c602aa5e        3 months ago        1.84 kB

原文地址:https://www.cnblogs.com/LyShark/p/10872335.html

时间: 2024-08-26 03:34:29

Docker 构建私有镜像仓库(6)的相关文章

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

手动搭建Docker本地私有镜像仓库

实验环境:两个Centos7虚拟机,一个是Server,用作客户端,另一个是Registry,用作Docker私有镜像仓库. 基础配置 查看一下两台虚拟机的IP地址 Server的IP地址是192.168.134.151. Registry的IP地址是192.168.134.150. 使用setenforce 0临时关闭SElinux. 打开Server和Registry的内核转发功能 编辑配置文件/etc/sysctl.conf,添加下面的内容: net.ipv4.ip_forward = 1

使用Nexus3构建Docker私有镜像仓库

一.安装Nexus3 Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并且能够与Jekins.SonaQube和Eclipse等工具进行集成.Nexus3支持作为宿主和代理存储库的Docker存储库,可以直接将这些存储库暴露给客户端工具:也可以以存储库组的方式暴露给客户端工具,存储库组是合并了多个存储库的内容的存储库,能够通过一个URL将多个存储库暴露给客户端工具,从而

可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI

上一篇文章搭建了一个具有基础功能,权限认证.TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是缺失的,还有什么 Docker 镜像仓库管理工具呢?这里有一个简单好用的企业级 Registry 服务器 - Harbor,推荐在生产环境上使用. Harbor 简介 Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker registry服务. 它以Docker公司

使用docker Registry快速搭建私有镜像仓库

当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作.这类的镜像仓库就是docker默认的公共仓库,所有人都可以直接查看或下载.使用,但是呢,基于网络原因,下载速度有限制比较慢.因此,我们在公司内部内网环境中使用dokcer,一般不会将镜像文件上传到公网公共库中.但内部共享使用就是个问题,所以,私有仓库就由此产生了. 什么是私有仓库? 私有仓库,就是本地(内网环境)组建的一个与公网公共库功

【Docker】(4)搭建私有镜像仓库

[Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先进入阿里云创建镜像仓库: https://dev.aliyun.com/search.html-->点击管理中心(初次使用会提示开通,然后设置密码) 然后创建命名空间和镜像仓库: 有关docker拉取和推送指令,点击上图的中管理,就能看到. 1.登录阿里云 docker login [email p

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

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

私有镜像仓库Harbor基础介绍与部署

企业级私有镜像仓库Harbor 一:介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理.所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务. Registry是Docker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中.企业可以根据自己的需求,使用Dokcerf

k8s使用阿里云的私有镜像仓库

k8s使用阿里云的私有镜像仓库 如果从private register中拉取image:也可以参考这个地址:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials 1.在阿里云的容器镜像服务安装使用文档见如下:镜像仓库的创建:参考下边的这些文档https://help.aliyun.com/document_