摘要
Docker 是世界上最大的容器映像库,为开发人员和系统管理员提供了使用容器构建,运行和共享应用程序的平台;而Habor在docker之上,又提供了用户、同步等诸多特性。而作为既可以从docker直接拉取镜像,也可以从harbor拉取镜像的kubernetes ,harbor给它们提供了怎样的便利呢?docker 和 harbor 的区别以及 kubernetes 从 docker和harbor拉取镜像
Docker 是世界上最大的容器映像库,为开发人员和系统管理员提供了使用容器构建,运行和共享应用程序的平台;而Habor在docker之上,又提供了用户、同步等诸多特性。而作为既可以从docker直接拉取镜像,也可以从harbor拉取镜像的kubernetes ,harbor给它们提供了怎样的便利呢?docker 和 harbor 的区别以及 kubernetes 从 docker和harbor拉取镜像
Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使用户能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,用户可以以与管理应用程序相同的方式来管理基础架构。通过Docker来快速交付、测试和部署代码,用户可以大大减少编写代码和在生产环境中运行代码之间的延迟。
Docker是供开发人员和系统管理员 使用容器构建,运行和共享应用程序的平台。相比会产生大量超出了应用程序逻辑所消耗的开销的VM来说,Docker容器具有无可比拟的优点
1、灵活:即使最复杂的应用程序也可以容器化。
2、轻量级:容器利用并共享主机内核,在系统资源方面比虚拟机效率更高。
3、可移植性:您可以在本地构建,部署到云并在任何地方运行。
4、松散耦合:容器是高度自给自足并封装的容器,使您可以在不破坏其他容器的情况下更换或升级它们。
5、可扩展:您可以在数据中心内增加并自动分布容器副本。
6、安全:容器将积极的约束和隔离应用于流程,而无需用户方面的任何配置。
我们通过下图就能明了的看到它们的区别:
Habor是由VMWare公司开源的容器镜像仓库。Habor是在Docker Registry基础上上进行了相应的企业级扩展,它提供合规性,性能和互操作性,以帮助使用者跨Kubernetes和Docker等云原生计算平台持续、安全地管理映像,从而获得了更加广泛的应用。这些新的企业级特性包括:基于项目管理镜像、管理用户界面、基于角色的访问控制等。
有意思的是,Harbor的目标就是是成为Kubernetes受信任的本地镜像云存储库。目前,Harbor可以安装在任何Kubernetes环境或具有Docker支持的系统上。
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。kubernetes在部署集群应用时,可以从docker或者harbor中拉取镜像。
一句话总结,Habor在Docker的诸多功能之上,又提供了用户、同步、权限、项目控制等诸多特性。
harbor提供了以下扩展特性
1、多用户
2、可扩展的API和Web UI
3、跨多个Harbor实例的映像同步
4、身份集成和基于角色的访问控制
5、安全和漏洞分析
6、内容签名和验证
基于以上原因,我们还有什么理由不使用harbor呢?
但是还得吐槽一下,像Harbor这样和docker强依赖的业务组件,真的很担心会不会很快被其他组件替代呢 ^_^
使用示例如下:
apiVersion: v1 # 描述RC对象的版本是v1 kind: ReplicationController # 我现在在声明RC对象 metadata: # metadata中的是对此RC对象描述信息 name: myweb-tomcat # 此RC对象在gpf-first命名空间中名为myweb-tomcat-1,同一个命名空间中的命名一定是不同的 namespace: gpf-first # 使用gpf-first命名空间 spec: # spec中是对RC对象的具体描述 replicas: 1 # 我要创建1个副本,单位当然是pod selector: # 选择器,用来选择对象的 app: myweb # 我选择了标签为app: myweb的pod template: # 模版,以下用来描述创建的pod的模版 metadata: # 对pod模版描述的元数据 labels: # 给以下的东西打上标签,以让selector来选择 app: myweb # 给pod模版打上app: myweb这样的标签 spec: # 对pod模版的具体描述 containers: # 以下就是要放入pod模版中的容器了 - image: docker.io/my-jdk-tomcat:v8 # 选择镜像 name: myweb # 容器名 imagePullPolicy: Never #不使用远程镜像 resources: # 给该容器分配的资源大小 limits: cpu: "0.5" memory: 1Gi ports: # 容器端口号 - containerPort: 8080 env: # 给该容器设置环境变量,这里就可以将mysql与我们的tomcat连接 - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306'
重点在于
- image: docker.io/my-jdk-tomcat:v8 # 选择镜像
此时,k8s将会从docker中拉取镜像进行部署
注意:如果您使用的非本机的docker镜像,请修改下面的命令为alway
imagePullPolicy: Never #不使用远程镜像
首先kubernetes要登录harbor
kubectl create secret docker-registry registry-secret --namespace=gpf-first --docker-server=demo.goharbor.io --docker-username=guopf --docker-password=Gpf18253594233 --docker-email=1028743130@qq.com
使用示例如下:
apiVersion: v1 # 描述RC对象的版本是v1 kind: ReplicationController # 我现在在声明RC对象 metadata: # metadata中的是对此RC对象描述信息 name: myweb-tomcat # 此RC对象在gpf-first命名空间中名为myweb-tomcat-1,同一个命名空间中的命名一定是不同的 namespace: gpf-first # 使用gpf-first命名空间 spec: # spec中是对RC对象的具体描述 replicas: 1 # 我要创建5个副本,单位当然是pod selector: # 选择器,用来选择对象的 app: myweb # 我选择了标签为app: myweb的pod template: # 模版,以下用来描述创建的pod的模版 metadata: # 对pod模版描述的元数据 labels: # 给以下的东西打上标签,以让selector来选择 app: myweb # 给pod模版打上app: myweb这样的标签 spec: # 对pod模版的具体描述 containers: # 以下就是要放入pod模版中的容器了 - image: demo.goharbor.io/guopfbj/jdk-tomcat:8u45 # 选择镜像 name: myweb # 容器名 imagePullPolicy: Never #不使用远程镜像 resources: # 给该容器分配的资源大小 limits: cpu: "0.5" memory: 1Gi ports: # 容器端口号 - containerPort: 8080 env: # 给该容器设置环境变量,这里就可以将mysql与我们的tomcat连接 - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306' imagePullSecrets: - name: registry-secret # 用户加密信息
重点是:
- image: demo.goharbor.io/guopfbj/jdk-tomcat:8u45
和
imagePullSecrets: - name: registry-secret
image要指向你的harbor的镜像,imagePullSecrets要使用kubernetes登录harbor时的名称
docker登录harbor
docker login demo.goharbor.io # (Harbor地址,harbor.cfg文件中的hostname项)
运行此命令,会要求您输入您在harbor中注册的用户名和密码
docker 给docker中镜像打标签
docker tag my-jdk-tomcat:v8u45 demo.goharbor.io/guopfbj/jdk-tomcat:8u45
docker 推送镜像到harbor
docker push demo.goharbor.io/guopfbj/jdk-tomcat:8u45