内容简介:Nexus是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven、npm、Docker、YUM、Helm等格式数据的存储和发布;并且能够与Jekins、SonaQube和Eclipse等工具进行集成。Nexus支持作为宿主和代理存储库的Docker存储库,可以直接将这些存储库暴露给客户端工具;也可以以存储库组的方式暴露给客户端工具,存储库组是合并了多个存储库的内容的存储库,能够通过一个URL将多个存储库暴露给客户端工具,从而便于用户的使用。通过nexus自建能
1、 安装Nexus
Nexus是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven、npm、 Docker 、YUM、Helm等格式数据的存储和发布;并且能够与Jekins、SonaQube和Eclipse等 工具 进行集成。Nexus支持作为宿主和代理存储库的Docker存储库,可以直接将这些存储库暴露给客户端工具;也可以以存储库组的方式暴露给客户端工具,存储库组是合并了多个存储库的内容的存储库,能够通过一个URL将多个存储库暴露给客户端工具,从而便于用户的使用。通过nexus自建能够有效减少访问获取镜像的时间和对带宽使用,并能够通过自有的镜像仓库共享企业自己的镜像。在本文中,采用Docker模式安装部署Nexus。
首先,通过mkdir创建一个目录,用于为Nexus提供存储的空间。
$ mkdir {path}/nexus-data && chown -R 200 {path}/nexus-data
接着,就可以通过sonatype/nexus3镜像启动nexus3的容器化应用了。通过如下命令启动的nexus将对外暴露8081端口,并容器的持久化数据通过会存储在上述创建的空间中。在容器运行后,用户将可以通过http://{host_ip}:8081访问nexus应用,其中{host_ip}为容器所部署的宿主机的IP地址。
$ docker run -d -p 8081:8081 --name nexus -v {path}/nexus-data:/nexus-data sonatype/nexus3
2、构建私有镜像仓库
在nexus部署成功后,在浏览器中通过http://{host_ip}:8081地址访问nexus应用。
1)通过管理员帐户登录nexus,并进入创建为docker的镜像仓库的主页:
2)在创建镜像仓库的页面中,设置镜像仓库的相关信息,包括名称、HTTP端口、是否允许匿名拉取镜像等信息。这里需要注意的是,此处的HTTP端口(此处的值为1008)很重要,后续拉取和推送进行是使用此端口进行的,而不是nexus本身对外暴露的端口。另外,如果允许设置通过匿名的方式拉取镜像。
这需要在Realms主页激活 Docker Bearer Token Reamlm ,如下图所示:
并对匿名方式进行设置,允许通过匿名方式访问服务器,如下图进行设置:
3)在客户端的/etc/docker/daemon.json文件中添加下面的内容:
在完成私有镜像仓库的设置后,由于使用的是HTTP协议,因此需要在客户端对docker进行配置。通过编译工具打开daemon.json:
$ vi /etc/docker/daemon.json
在文件中添加如下的内容,告诉客户端私有镜像仓库是一个安全的仓库:
{ "insecure-registries":["<nexus-hostname>:<repository-port>"] }
3、基本操作
3.1 登录认证
在通过nexus完成私有镜像仓库的构建后,首先需要进行登录认证才能进行后续的操作,私有镜像仓库登录认证的语法和格 式:docker login <nexus-hostname>:<repository-port> 。假设上述的nexus部署在IP地址为10.8.32.148主机上,私有镜像的端口为1008,则通过执行如下的命令登录私有镜像仓库:
$ docker login 10.8.32.148:1008
登录时,需要提供用户名和密码。认证的信息会被保存在 ~/.docker/config.json 文件,在后续与私有镜像仓库交互时就可以被重用,而不需要每次都进行登录认证。
3.2 推送镜像
要共享一个镜像,可以通过将其发布到托管存储库,然后其它人员就可以通过存储库获取自己需要的镜像。在将镜像推送到存储库之前,需要对镜像进行标记。当标记图像时,可以使用镜像标识符(imageId)或者镜像名称(imageName)。标识镜像的语法和格式: docker tag <imageId or imageName> <nexus-hostname>:<repository-port>/<image>:<tag> 。假设这里将mysql:5.7镜像标识为私有镜像仓库(10.8.32.148:1008)中的镜像,标识的执行命令如下:
$ docker tag mysql:5.7 10.8.32.148:1008/mysql:5.7
一旦镜像标识完成后,就可以通过的docker push命令将镜像推送到私有仓库中。推送镜像到私有镜像仓库的语法和格式为 docker push <nexus-hostname>:<repository-port>/<image>:<tag>, 通过下面的命令,将上述打完标签的镜像上传至私有镜像仓库:
$ docker push 10.8.32.148:1008/mysql:5.7
3.3 拉取镜像
Kunbernetes将会根据需要从私有镜像仓库中拉取镜像,在客户端可以通过手动拉取镜像,拉取的语法和格式:docker pull <nexus-hostname>:<repository-port>/<image>:<tag>。假设从本文构建的私有镜像仓库中拉取mysql:5.7,执行命令如下所示:
$ docker pull 10.8.32.148:1008/mysql:5.7
4、Kubernetes从私有镜像拉取镜像
4.1 生成密钥
在使用私有镜像拉取镜像时,需要为私有镜像仓库创建一个镜像仓库的密钥,并在创建容器中进行引用。创建镜像仓库的语法和格式: kubectl create secret docker – registry < regsecret-name> — docker – server =< your – registry – server > — docker – username =< your – name > — docker – password =< your – pword > — docker – email =< your – email >。
- <regsecret-name>:所创建的私有镜像仓库密钥的名称;
- <your-registry-server>:为镜像仓库的服务器地址;
- <your-name>:登录镜像仓库的用户名;
- <your-pword>:登录镜像仓库的密码;
- <your-email>:用户的邮箱地址。
假设登录私有镜像仓库的用户命名为admin、密码为admin、邮箱地址为admin@aliyun.com。则可以通过执行下面的命令创建私有镜像仓库的密钥:
$ kubectl create secret docker-registry myregsecret --docker-server=10.8.32.148:1008 \ --docker-username=admin --docker-password=admin --docker-email=admin@aliyun.com
4.2 定义拉取镜像的部署
在这里定义是一个名为nginx的YAML部署示例文件,此文件通过从私有镜像仓库拉取nginx,并使用 imagePullSecrets 字段来指定拉取镜像所使用的密钥:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx revisionHistoryLimit: 2 template: metadata: labels: app: nginx spec: # 指定从私有镜像仓库拉取镜像的密钥 imagePullSecrets: - name: myregsecret containers: # 所要拉取的镜像 - image: 10.8.32.148:1008/nginx:1.7.9 name: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 name: nginx80 volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data - mountPath: /etc/nginx name: nginx-conf volumes: - name: nginx-data nfs: path: /k8s-nfs/nginx server: 192.168.8.150 - name: nginx-conf nfs: path: /k8s-nfs/nginx/conf server: 192.168.8.150
通过执行kubectl create -f命令,在Kubernetes中基于所定义的YAML创建部署:
$ kubectl create -f {path}/nginx-deployment.yaml
执行上述命令后,Kubernetes将会从私有镜像仓库拉取nginx:1.7.9镜像,并基于此镜像启动容器。
参考资料
1.《Pushing Images》地址:https://help.sonatype.com/repomanager3/private-registry-for-docker/pushing-images
2.《Authentication》地址:https://help.sonatype.com/repomanager3/private-registry-for-docker/authentication
3.《Searching》地址:https://help.sonatype.com/repomanager3/private-registry-for-docker/searching
4.《Pulling Images》地址:https://help.sonatype.com/repomanager3/private-registry-for-docker/pulling-images
5. 《Pull an Image from a Private Registry》地址:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
作者简介:
季向远,北京神舟航天软件技术有限公司产品经理。本文版权归原作者所有。
来源: https://www.kubernetes.org.cn/4024.html
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 实战maven私有仓库三部曲之二:上传到私有仓库
- 实战maven私有仓库三部曲之三:Docker下搭建maven私有仓库
- docker私有仓库搭建
- 企业私有Harbor仓库
- Docker 私有仓库搭建
- Docker私有仓库搭建
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms + Data Structures = Programs
Niklaus Wirth / Prentice Hall / 1975-11-11 / GBP 84.95
It might seem completely dated with all its examples written in the now outmoded Pascal programming language (well, unless you are one of those Delphi zealot trying to resist to the Java/.NET dominanc......一起来看看 《Algorithms + Data Structures = Programs》 这本书的介绍吧!