镜像仓库管理docker仓库,用于管理镜像。主要分为公共仓库和私有仓库。下面分别介绍公共仓库DockerHub、私有仓库Registry和harbor。DockerHUb仓库管理什么是DockerHUb存储和分发镜像最直接的方式就是使用DockerHub。DockerHub是由DockerInc维护的公共注册表。用户可以将自己的镜像保存到DockerHub的免费存储库中,如果不想让其他人访问自己的镜像,也可以购买私有存储库。账户注册和登录一般情况下,您需要先在dockercenter创建一个账户(如果您还没有的话)。您可以直接在DockerHub上创建您的帐户。如果你已有账号,可以点击signin登录。登录后是这样的Dockerclientlogin使用dockerlogin登录dockerhub这会提示你输入一个用户名,这个用户名会成为命名空间您的公共存储库的名称。如果您的姓名可用,docker将提示您输入密码和电子邮件地址,并自动将您登录到DockerHub。您现在可以将图像提交并推送到DockerHub上的存储库。如果dockerlogin中出现LoginSucceeded,说明我们登录成功了。注意:你的认证凭证会保存在你本地目录下的.dockercfg文件中。管理图像。通过dockerimages可以看到我们所有的镜像列表。dockerimages删除图像。我们目前的learn-docker-storage有三个版本,现在我们删除前两个有问题的版本,dockerrmiimageID可以删除镜像dockerrmilearn-docker-storage:0.0.1learn-docker-storage:0.0.2所以我们可以把我们无用的图片删掉,这样可以节省内存空间。修改镜像名称,修改镜像的repository以匹配DockerHub账号。DockerHub为了区分不同用户的同名镜像,镜像的registry中必须包含用户名。完整格式为:[用户名]/镜像名称:tag我们使用dockertag命令重命名镜像dockertaglearn-docker-storage:0.0.3baiyp/learn-docker-storage:0.0.3这将重命名我们的image,符合我们的dockerhub规范。推送镜像推送镜像现在我们要推送我们的镜像到dockerhubpushimagespecification是dockerpush注册的用户名/镜像名:tag,因为我们把镜像的名字改对了,所以可以直接推送.dockerpushbaiyp/learn-docker-storage:0.0.3这样我们就把我们的数据push到dockerhub上了。我们发现只推送了最顶层的镜像,并没有推送openjdk镜像,直接复用了仓库。这就是分层的好处。查看镜像,我们可以去dockerhub查看我们的镜像,可以看到我们的镜像已经push过来了。点击详情可以看到我们镜像的内容和标签号。仓库镜像测试。删除本地镜像可以通过dockerrmi镜像ID删除本地镜像dockerrmibaiyp/learn-docker-storage:0.0.3learn-docker-storage:0.0.3再次查看本地镜像,没有镜像dockerimages对于我们的微服务此时从仓库拉取镜像可以从dockerhub拉取镜像dockerpullbaiyp/learn-docker-storage:0.0.3此时镜像已经拉取下来,我们可以运行镜像来运行镜像,执行如下命令创建镜像dockerrun-d\-v/tmp/data/logs:/logs\-p8003:8003\--namelearn-docker-storage\--network=learn-docker-network\baiyp/learn-docker-storage:0.0.3accesstestus访问查看curl是否可以正常运行http://192.168.64.153:8003/storage/employe/findByID/10001|python-mjson.tool到这里我们就完成了dockerhub仓库的发布和拉取,直接运行测试在真实环境下,我们一般不拉取和运行,一般直接运行,如果docker检查镜像不存在,会自动拉取停止服务并删除镜像dockerrm-flearn-docker-storagedockerrmibaiyp/learn-docker-storage:0.0.3我们直接运行容器dockerrun-d\-v/tmp/数据/日志:/logs\-p8003:8003\--namelearn-docker-storage\--network=learn-docker-network\baiyp/learn-docker-storage:0.0.3这个运行命令解决了容器拉取和容器运行的问题。Registry仓库管理Registry简介DockerHub官网提供了一个公共的集中式仓库,但是本地访问DockerHub往往很慢,很多时候我们需要一个本地的私有仓库,仅供内网使用。Docker仓库实际上提供了两个功能,一个是图像管理,另一个是认证。前者主要由docker-registry项目实现,通过http服务进行上传下载;后者可以通过docker-index(闭源)项目或者利用已有的认证方案(如nginx)实现http请求管理。dockerregistry是管理docker镜像的服务。Docker维护的注册中心是http://hub.docker.com,这让我们可以很方便地下载预制镜像。要安装注册表,我们可以通过获取官方注册表镜像来运行。这将使用官方注册表镜像来启动私有存储库。默认情况下,存储库将创建在容器的/var/lib/registry目录中。我们可以通过-v参数将镜像文件存放在本地指定路径。dockerrun-d\-p5000:5000\-v/tmp/data/registry:/var/lib/registry\--restart=always\registry这样我们的registry就开始接入测试了。这时候我们可以浏览访问http://ip:5000/v2/_catalog查看仓库是否启动成功。curlhttp://192.168.64.152:5000/v2/_catalog上传镜像注册中心上传镜像的命名约定为仓库IP:5000/镜像名称:tag修改镜像名称,将我们的镜像改为服务规范dockertag的名称baiyp/learn-docker-storage:0.0.3192.168.64.153:5000/learn-docker-storage:0.0.3推送镜像使用命令推送镜像dockerpush192.168.64.153:5000/learn-docker-storage:0.0.3我们发现推送错误是的,这是因为docker推送默认的https方式,而我们registry只支持http修改Docker推送配置。对于Linux系统,我们可以在/etc/docker/daemon.json(daemon.josn文件不存在新建一个文件)vi/etc/docker/daemon.json添加如下配置{"insecure-registries":["warehouseIP:5000"]}完整配置如下}执行如下命令重启并重新加载配置生效systemctldaemon-reloadservicedockerrestart再次推送再次执行推送命令dockerpush192.168.64.153:5000/learn-docker-storage:0.0.3我们发现推送那是成功的。再次访问registry访问测试,查看curl是否已经pushhttp://192.168.64.153:5000/v2/_catalog|python-mjson.tool发现我们的镜像已经push到registry了,我们通过下面的urlcurlhttp://192.168.64.153:5000访问标签列表/v2/learn-docker-storage/标签/列表|python-mjson.toolregistryimagetest删除本地镜像可以通过dockerrmi镜像ID删除本地镜像dockerrmibaiyp/learn-docker-storage:0.0.3192.168.64.153:5000/learn-docker-storage:0.0.3运行注册表中的图像dockerrun-d\-v/tmp/data/logs:/logs\-p8003:8003\--namelearn-docker-storage\--network=learn-docker-network\192.168.64.153:5000/learn-docker-storage:0.0.3我们发现我们的registry被快速拉取并运行。访问微服务测试curlhttp://192.168.64.153:8003/storage/employe/findByID/10001|python-mjson.tool使用Harbor管理仓库什么是HarborHarbor是vm公司开源的企业级容器镜像仓库,具有以下功能管理用户界面基于角色的访问控制LDAP/AD基本运维操作例如集成和日志审计Harbor是一个用于构建企业级私有docker镜像仓库的开源解决方案。它是DockerRegistry的一个更高级的包。除了提供友好的WebUI界面、角色和用户权限管理、用户操作审计等功能外,还集成了K8sAdd-ons仓库,即Helm通过图表下载、管理、安装K8s插件,而chartmuseum可以提供存储图表数据的仓库。另外,它还集成了两个开源的安全组件,一个是Notary,一个是Clair,Notary类似于一个私有的CA中心,而Clair是一个容器安全扫描工具,通过CVE漏洞库获取最新的漏洞信息由各大厂商提供,并扫描用户上传的容器是否存在已知漏洞,这两个安全特性对于企业级私有仓库来说意义重大。Harbor的三种安装方式这里我们采用离线安装和在线安装:从DockerHub下载Harbor相关镜像,所以安装包很小离线安装:安装包里面有部署相关镜像,所以安装包比较大OVA安装器(third-party):当用户有vCenter环境时,部署OVA后使用此安装程序启动Harbor。为什么要使用私有仓库?公司项目一般不允许上传到DockerHub等公共仓库,所以要学会创建私有仓库。也是很有必要的hub.docker.com虽然可以存镜像,但是网速比较慢,在内部环境搭建一个私有公共仓库是比较好的方案。harbor基本组件组件功能harbor-adminserver配置管理中心harbor-db数据库harbor-jobservice镜像复制harbor-log日志操作harbor-uiWeb管理页面和APInginx前端代理,负责前端页面和镜像上传/下载转发redissessionregistry镜像存储前期工作下载Harbor安装包官方地址:https://github.com/goharbor/harbor/releases下载最新版安装包准备环境需要安装docker和docker-compose环境上面我们已经提前安装好安装Docker环境安装docker-compose环境离线安装解压安装包解压harbor安装包tar-zxfharbor-offline-installer-v2.1.4.tgz进入目录然后复制一份harbor.yml.tmp并命名为harbor.ymlcdharborcpharbor.yml.tmplharbor.yml注意:这与旧版本不同。没有harbor.cfg文件。我们需要手动复制harbor.yml.tmpl并修改。是信任关系,没太大必要做https,直接用http就好了!所以把https相关的注释掉,注意配置文件的用户名密码配置。默认用户名:admin,密码:Harbor12345。如果修改需要在安装前修改,加载本地镜像。使用dockerload命令加载本地镜像,无需从dockerhub下载dockerload-iharbor.v2.1.4.tar.gz以便本地加载容器镜像。我们可以通过dockerimages命令查看导入的镜像。dockerimages执行安装命令,先执行预处理命令,会创建一些文件夹,初始化一些文件。/prepare然后开始真正的安装过程。安装成功,查看docker进程dockerps可以看到很多服务已经起来了。启动和停止harbor在harbor安装目录下执行以下命令启动和停止#启动docker-composeup-d#停止docker-composestop#重启docker-composerestartharbor使用访问harbor,输入http://harborIP可以直接访问。在这里访问我们的地址http://192.168.64.153/,输入用户名和密码登录,如果不修改配置文件,默认用户名为:admin,密码为:harbor12345登录后,您可以使用Docker登录harbor,使用dockerlogin命令登录harbor。dockerlogin-uadmin-pHarbor12345192.168.64.153发现报登录错误,和注册表一样。docker模式使用https方式,我们使用http方式登录修改Docker配置对于Linux系统,我们可以在/etc/docker/daemon.json中添加如下配置(如果daemon.josn文件不存在,新建一个)vi/etc/docker/daemon.json{"insecure-registries":["harboraddress"]}完整配置如下{#因为默认的端口号是80,所以不需要添加端口number"insecure-registries":["192.168.64.153"],"registry-mirrors":["https://xxxxx.mirror.aliyuncs.com"]}执行以下命令重启重新加载配置生效systemctldaemon-reloadservicedockerrestart重新登录dockerlogin-uadmin-pHarbor12345192.168.64.153这次我们已经成功登录到这里我们已经登录成功了。修改镜像标签,我们推送镜像。我需要将我们的图像名称更改为符合规范的格式。泊坞窗标签\192.168.64.153:5000/llearn-docker-storage:0.0.3\192.168.64.153/library/learn-docker-storage:0.0.3这里有个库路径,是harbor默认的项目名。推送镜像可以通过dockerpush来推送。注意需要先登录并推送dockerpush192.168.64.153/library/learn-docker-storage:0.0.3至此我们已经推送到了harbor,我们可以登录library页面查看harbor测试删除本地镜像可以通过dockerrmi镜像IDrmi\192.168.64.153:5000/learn-docker-storage:0.0.3\192.168.64.153/library/learn-docker-storage:0.0.3删除本地镜像docker在harbor和运行命令dockerrun-d\-v/tmp/data/logs:/logs\-p8003:8003\--namelearn-docker-storage\--network=learn-docker-network\192.168.64.153/library/learn-docker-storage:0.0.3访问微服务测试curlhttp://192.168.64.153:8003/storage/employe/findByID/10001|python-mjson.tool查看harbor详情详情中会显示pull次数HarBor用户权限说明HarBor用户角色在项目中(project-member-添加新成员)分3类:项目管理员,开发者,访客项目管理员:增删改查开发者:上传下载访问者:只允许下载HarBor权限配置创建新用户点击createuser创建用户我们创建一个itcast用户,授权用户创建用户,然后进入项目模块添加成员和选择权限。访问者只能pull不能push,管理用户登录测试。我们使用itcast用户通过web登录进行测试,发现用户没有被修改。权限dockerlogintestlogindockerclientdockerlogin-uitcast-pQwert123192.168.64.153尝试推送镜像dockerpush192.168.64.153/library/learn-docker-storage:0.0.3我们发现无法推送镜像拉取镜像测试先删除本地容器和镜像dockerrm-flearn-docker-storagedockerrmi192.168.64.153/library/learn-docker-storage:0.0.3尝试拉取并启动本地镜像dockerrun-d\-v/tmp/data/logs:/logs\-p8003:8003\--namelearn-docker-storage\--network=learn-docker-network\192.168.64.153/library/learn-docker-storage:0.0.3微服务访问测试curlhttp://192.168.64.153:8003/存储/员工/findByID/10001|python-mjson.toolHarbor支持Https(扩展)为了支持微服务推送,我们需要将HarBor设置为https,这样HarBor就可以在任何地方使用,推送生成SSL证书。前面说了如何搭建harbor仓库,这里说说Harbor实现https访问,因为只需要访问内网,不需要申请ssl证书,所以我使用openssl颁发自签名证书来实现https访问创建证书目录mkdir-p/tmp/data/cert&&cd/tmp/data/cert&&ll创建CA根证书opensslreq-newkeyrsa:4096-nodes-sha256-keyoutca.key-x509-days365-outca.crt-subj"/C=CN/L=beijing/O=itcast/CN=harbor-registry"其中subj是主语的意思如下C=country,S=province(city),L=district(county,city)),O=organization,OU=organizationunit,CN=commonname生成证书签名生成证书签名,设置访问域名为itcastharbor.comopensslreq-newkeyrsa:4096-nodes-sha256-keyoutitcastharbor.com.key-outserver.csr-subj"/C=CN/L=beijing/O=itcast/CN=itcastharbor.com"生成主机证书opensslx509-req-days365-inserver.csr-CAca.crt-CAkeyca.key-CAcreateserial-outitcastharbor.com.crt操作步骤如下配置harbor.yml然后进入harbor安装目录修改harbor.yml,修改如下选项hostname,使用IP或者域名,不要使用环回地址、localhost等证书,yourdomain.com.crt/tmp/data/cert/itcastharbor.com.crtprivate_key的路径,yourdomainr.com.key/tmp/data/cert/itcastharbor.com的路径.key重新安装harborservicestopharborstoptherunningservicedocker-composedown在harbor目录下运行prepare,完成https的配置。/prepare重新安装,在harbor目录下运行安装命令。/install.sh修改Docker推送配置,我们需要将推送的IP修改为成为域名vi/etc/docker/daemon.json上面我们已经操作了registry,这里需要改用harbor,需要重新配置#因为默认端口号是80,所以不用加端口号{"insecure-registries":["RepositoryIPordomainname"]}完整配置如下{"insecure-registries":["itcastharbor.com"],"registry-mirrors":["https://xxxxx.mirror.aliyuncs.com"]}执行以下命令重启并重新加载配置生效。systemctldaemon-reloadservicedockerrestart修改本地主机文件。为了让本地机器可以正常访问harborweb环境,需要配置本地的hosts文件。C:\Windows\System32\drivers\etc域名访问harbor通过域名访问harbor,域名就是我们刚才配置的itcastharbor.com域名,因为我们的证书是自签名的,不是第三方认证的,所以它有安全提示,点击这里继续访问,登录后可以访问这里。本文由传智教育博学谷教研组发布。如果本文对您有帮助,请关注并点赞;您的支持是我坚持创作的动力。转载请注明出处!
