docker搭建本地仓库(Docker仓库管理镜像 — 公共仓库【Docker Hub】和私人仓库【Registry】和【harbor】)
镜像仓库管理
docker仓库,用来管理镜像 。主要分为公共仓库和私人仓库 。下面介绍了公共仓库Docker Hub 、私人仓库Registry和harbor 。
DockerHUb仓库管理 什么是DockerHUb保存和分发镜像的最直接方法就是使用 Docker Hub 。
Docker Hub 是 Docker 公司维护的公共 Registry 。用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中 ,如果不希望别人访问自己的镜像 ,也可以购买私有 repository 。
账号注册和登陆一般 ,你需要先在docker中心创建一个账户(如果您尚未有) 。你可以直接在Docker Hub创建你的账户 。
如果有已有账号可以点击sign in 进行登录 ,登陆后是这个样子
Docker客户端登录使用docker login登录dockerhub
这将提示您输入用户名 ,这个用户名将成为你的公共存储库的命名空间名称 。如果你的名字可用 ,docker会提示您输入一个密码和你的邮箱 ,然后会自动登录到Docker Hub ,你现在可以提交和推送镜像到Docker Hub的你的存储库 。
docker login出现 Login Succeeded就说明我们登录成功
注:你的身份验证凭证将被存储在你本地目录的.dockercfg文件中
管理镜像通过docker images可以看到我们所有的镜像列表
docker images 删除镜像我们现在的learn-docker-storage有三个版本 ,现在我们把前两个有问题的版本删除,docker rmi 镜像ID可以删除镜像
docker rmi learn-docker-storage:0.0.1 learn-docker-storage:0.0.2这样我们就删除了我们没有用的镜像了 ,可以节省内存空间
修改镜像命名修改镜像的 repository 使之与 Docker Hub 账号匹配 。
Docker Hub 为了区分不同用户的同名镜像 ,镜像的 registry 中要包含用户名 ,完整格式为:[用户名]/镜像名:tag
我们通过 docker tag 命令重命名镜像
docker tag learn-docker-storage:0.0.3 baiyp/learn-docker-storage:0.0.3这样就将我们的镜像改名了,这个就符合我们的dockerhub的规范了
推送镜像 推送镜像现在我们要将我们的镜像推送到docker hub
推送镜像的规范是docker push 注册用户名/镜像名:tag,因为我们上面已经把镜像名字改正确了 ,所以可以直接推送 。
docker push baiyp/learn-docker-storage:0.0.3这样我们就将我们的数据推送到docker hub ,我们发现只有最顶层的镜像推送了,openjdk的镜像并没有推送 ,直接复用了仓库的 ,这就是分层的好处
检查镜像我们可以到docker hub检查我们的镜像
可以看到我们的镜像已经推送过来了 ,点开详情可以看到我们镜像的内容以及tag号
仓库镜像测试 删除本地镜像可以通过docker rmi 镜像ID删除本地镜像
docker rmi baiyp/learn-docker-storage:0.0.3 learn-docker-storage:0.0.3再次查看本地镜像 ,已经没有了我们的微服务的镜像
docker images 从仓库拉取镜像这个时候可以从docker hub拉取镜像
docker pull baiyp/learn-docker-storage:0.0.3这个时候已经将镜像拉取下来了 ,我们可以运行镜像了
运行镜像执行下面的命令进行创建镜像
docker run -d \ -v /tmp/data/logs:/logs \ -p 8003:8003 \ --name learn-docker-storage \ --network=learn-docker-network \ baiyp/learn-docker-storage:0.0.3 访问测试我们访问下 ,检查下是否可以正常运行
curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool到这里我们就完成dockerhub仓库的发布与拉取
直接运行测试在真实环境中 ,我们一般不会拉取在运行 ,一般都是直接运行 ,如果docker检查镜像不存在会自动拉取
停止服务并删除镜像
docker rm -f learn-docker-storage docker rmi baiyp/learn-docker-storage:0.0.3我们直接运行容器
docker run -d \ -v /tmp/data/logs:/logs \ -p 8003:8003 \ --name learn-docker-storage \ --network=learn-docker-network \ baiyp/learn-docker-storage:0.0.3这一个run命令就解决了容器的拉取以及容器运行的问题
registry仓库管理 registry简介 官方提供了Docker Hub网站来作为一个公开的集中仓库。然而 ,本地访问Docker Hub速度往往很慢 ,并且很多时候我们需要一个本地的私有仓库只供网内使用 。
Docker仓库实际上提供两方面的功能 ,一个是镜像管理,一个是认证 。前者主要由docker-registry项目来实现 ,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。
docker registry 就是管理 docker 镜像的服务 , Docker 公司维护的 registry 就是 http://hub.docker.com ,它可以让我们方便的下载预先做好的镜像 。
安装registry我们可以通过获取官方的 registry 镜像来运行 。
这将使用官方提供的 registry 镜像来启动私有仓库 ,默认情况下 ,仓库会被创建在容器的 /var/lib/registry 目录下 。我们可以通过 -v 参数将镜像文件存放在本地的指定路径 。
docker run -d \ -p 5000:5000 \ -v /tmp/data/registry:/var/lib/registry \ --restart=always \ registry这样我们的registry已经启动起来了
访问测试这时我们可以通过浏览器访问 http://ip:5000/v2/_catalog 查看仓库是否启动成功 。
curl http://192.168.64.152:5000/v2/_catalog 上传镜像registry 上传镜像的命名规范是 仓库IP:5000/镜像名称:tag
修改镜像名称将我们的镜像改成服务规范的名字
docker tag baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3 推送镜像使用命令推送镜像
docker push 192.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": ["仓库IP:5000"] }完整的配置如下
{ "insecure-registries": ["192.168.64.153:5000"], "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }执行以下命令重启重新加载配置并生效
systemctl daemon-reload service docker restart 再次进行推送执行命令再次推送
docker push 192.168.64.153:5000/learn-docker-storage:0.0.3我们发现这次推送成功了
再次访问registry访问测试检查是否已经推送
curl http://192.168.64.153:5000/v2/_catalog | python -m json.tool我们发现我们的镜像已经推送到了registry ,我们通过以下URL访问下tag列表
curl http://192.168.64.153:5000/v2/learn-docker-storage/tags/list | python -m json.tool registry镜像测试 删除本地镜像可以通过docker rmi 镜像ID删除本地镜像
docker rmi baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3 运行registry中的镜像 docker run -d \ -v /tmp/data/logs:/logs \ -p 8003:8003 \ --name learn-docker-storage \ --network=learn-docker-network \ 192.168.64.153:5000/learn-docker-storage:0.0.3我们发现自己的registry很快就拉取并且运行起来了
访问微服务测试 curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool 使用Harbor管理仓库 什么是Harborharbor是一个由vm公司开源的企业级容器镜像仓库 ,有以下功能
管理用户界面 基于角色的访问控制 LDAP/AD 集成及日志审计等基本运维操作 harbor是构建企业级私有docker镜像的仓库的开源解决方案 ,它是 Docker Registry的更高级封装 ,它除了提供友好的Web UI界面 ,角色和用户权限管理 ,用户操作审计等功能外 ,它还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载 ,管理 ,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库 。
另外它还整合了两个开源的安全组件 ,一个是Notary ,另一个是Clair ,Notary类似 于私有CA中心 ,而Clair则是容器安全扫描工具 ,它通过各大厂商提供的 CVE漏洞库来获取最新漏洞信息 ,并扫描用户上传的容器是否存在已知的 漏洞信息 ,这两个安全功能对于企业级私有仓库来说是非常具有意义的 。
Harbor的三种安装方式这里我们使用离线安装
在线安装:从Docker Hub下载Harbor相关镜像 ,因此安装软件包非常小 离线安装:安装包包含部署的相关镜像 ,因此安装包比较大 OVA安装程序(第三方):当用户具有vCenter环境时 ,使用此安装程序 ,在部署 OVA后启动Harbor 为什么使用私用仓库公司的项目一般不予许我们上传到 Docker Hub 这类的公共仓库中 ,所有学会创建一个私有仓库也是非常必要的
虽然hub.docker.com上可以保存镜像,但是网速相对较慢 ,在内部环境中搭建一个私有的公共仓库是个更好的方案 。
harbor 的基本组件 组件 功能 harbor-adminserver 配置管理中心 harbor-db 数据库 harbor-jobservice 镜像复制 harbor-log 日志操作 harbor-ui Web管理页面和API nginx 前端代理 ,负责前端页面和镜像上传/下载转发 redis 会话 registry 镜像存储 前置工作 下载安装包Harbor官方地址:https://github.com/goharbor/harbor/releases 下载最新版安装包
准备环境需要安装docker以及docker-compose的环境上面我们已提前安装了
安装Docker环境 安装docker-compose环境 离线安装 解压安装包解压harbor的安装包
tar -zxf harbor-offline-installer-v2.1.4.tgz进入目录 然后将harbor.yml.tmp复制一份并该命为harbor.yml
cd harbor cp harbor.yml.tmpl harbor.yml注意: 这里跟老版本不一样,没有了harbor.cfg文件 ,我们需要手动复制harbor.yml.tmpl在做修改即可
修改harbor.ymlharbor作为私有仓库作用在公司内网 ,一般都是信任关系 ,没多大必要做https,使用http即可!
所以 把https相关的已经注释掉并注意配置文件的用户名密码配置 ,默认是 用户名是:admin,密码是:Harbor12345 ,如果修改需要安装前修改
加载本地镜像使用docker load命令加载本地镜像 ,不用再从dockerhub下载了
docker load -i harbor.v2.1.4.tar.gz这样容器镜像就被加载到了本地 ,我们可以通过docker images命令查看导入的镜像
docker images 执行安装命令先执行预处理命令 ,会创建一些文件夹 ,初始化一些文件
./prepare然后开始真正的安装过程
./install.sh如果出现-Harbor has been installed and started successfully表示安装成功 ,并查看docker进程
docker ps可以看到很多服务已经起来了 。
启动和停止harbor在harbor的安装目录执行以下命令就可以启动和停止了
# 启动 docker-compose up -d # 停止 docker-compose stop # 重新启动 docker-compose restart harbor使用 访问harbor输入 http://harborIP就可以直接访问了,这里访问我们的地址http://192.168.64.153/
输入用户名密码就可以登录了 ,如果没有修改配置文件 默认是 用户名是:admin,密码是:Harbor12345
登录后就可以进行操作了
Docker登录harbor使用docker login命令就可以登录harbor了
docker login -u admin -p Harbor12345 192.168.64.153我们发现登录报错了 ,这和registry一样,docker模式使用https方式 ,而我们使用的是http的方式登录
修改Docker配置对于 Linux 系统 ,我们可以在 /etc/docker/daemon.json (daemon.josn 文件不存在则新建该文件)
vi /etc/docker/daemon.json添加下面的配置
{ "insecure-registries": ["harbor地址"] }完整的配置如下
{ #因为默认端口号是80 所以不需要加端口号 "insecure-registries": ["192.168.64.153"], "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }执行以下命令重启重新加载配置并生效
systemctl daemon-reload service docker restart 再次进行登录 docker login -u admin -p Harbor12345 192.168.64.153这次我们就成功登录了
到这里我们就已经登录成功了
修改镜像tag我们推送镜像我要把我们的镜像名称改成符合规范的格式
docker tag \ 192.168.64.153:5000/learn-docker-storage:0.0.3 \ 192.168.64.153/library/learn-docker-storage:0.0.3这里有一个library路径,是harbor默认的项目名称
推送镜像可以通过docker push进行推送镜像,注意需要先登录在进行推送
docker push 192.168.64.153/library/learn-docker-storage:0.0.3到这里我们已经推送到了harbor,我们可以登录library页面查看
harbor 测试 删除本地镜像可以通过docker rmi 镜像ID删除本地镜像
docker rmi \ 192.168.64.153:5000/learn-docker-storage:0.0.3 \ 192.168.64.153/library/learn-docker-storage:0.0.3 运行harbor 中的镜像执行运行命令
docker run -d \ -v /tmp/data/logs:/logs \ -p 8003:8003 \ --name learn-docker-storage \ --network=learn-docker-network \ 192.168.64.153/library/learn-docker-storage:0.0.3 访问微服务测试 curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool 查看harbor详情详情里面会显示拉取次数
HarBor用户权限说明HarBor用户角色在项目(项目-成员-新加成员)中为3类:项目管理员 、开发人员 、访客
项目管理员:增删改查 开发人员:上传和下载 访客:只允许下载 HarBor权限配置 新建用户点击创建用户可以创建一个用户
我们创建一个itcast的用户
用户授权创建用户后进入项目模块添加成员
选择成员后并选择权限
访客只能进行拉取不能推送和管理
用户登录测试我们用itcast用户通过web端登录测试下 ,我们发现用户是没有修改权限的
docker登录测试登录docker客户端
docker login -u itcast -p Qwert123 192.168.64.153尝试推送镜像
docker push 192.168.64.153/library/learn-docker-storage:0.0.3我们发现是无法进行推送镜像的
拉取镜像测试先删除本地的容器以及镜像
docker rm -f learn-docker-storage docker rmi 192.168.64.153/library/learn-docker-storage:0.0.3尝试拉取并启动本地镜像
docker run -d \ -v /tmp/data/logs:/logs \ -p 8003:8003 \ --name learn-docker-storage \ --network=learn-docker-network \ 192.168.64.153/library/learn-docker-storage:0.0.3微服务访问测试
curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool Harbor支持Https(扩展)为了支持微服务推送我们需要将HarBor设置为https ,可以让HarBor在任何地方使用以及推送
生成SSL证书前面说了怎么搭建harbor仓库 ,这里讲一讲harbor实现https访问 ,因为只需要内网访问 ,没必要去申请一个ssl证书 ,所以我就用openssl颁发自签名证书 ,实现https访问 。
创建证书目录 mkdir -p /tmp/data/cert && cd /tmp/data/cert && ll 创建 CA 根证书 openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=beijing/O=itcast/CN=harbor-registry"这里subj是主题的意思含义如下
C=国家 ,S=省(市) ,L=区(县 、市) ,O=组织机构 ,OU=组织单位 ,CN=通用名称 生成证书签名生成一个证书签名, 设置访问域名为itcastharbor.com
openssl req -newkey rsa:4096 -nodes -sha256 -keyout itcastharbor.com.key -out server.csr -subj "/C=CN/L=beijing/O=itcast/CN=itcastharbor.com" 生成主机证书 openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out itcastharbor.com.crt 操作步骤如下 配置harbor.yml然后进入harbor安装目录修改harbor.yml,修改下面几个选项
hostname,使用IP或域名 ,不要用回环地址 ,localhost等 certificate,yourdomain.com.crt的路径/tmp/data/cert/itcastharbor.com.crt private_key ,yourdomainr.com.key的路径/tmp/data/cert/itcastharbor.com.key 重新安装harbor服务 停止harbor停止运行中的服务
docker-compose down运行目录harbor下的prepare完成https的配置
./prepare 重新安装在harbor目录下运行安装命令
./install.sh 修改Docker推送配置我们需要将推送的IP改成域名
vi /etc/docker/daemon.json上文中我们对registry已经操作了 ,这里需要改用harbor ,需要重新配置
#因为默认端口号是80 所以不需要加端口号 { "insecure-registries": ["仓库IP或域名"] }完整的配置如下
{ "insecure-registries": ["itcastharbor.com"], "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }执行以下命令重启重新加载配置并生效
systemctl daemon-reload service docker restart 修改本地host文件为了让本机能够正常访问到harbor的web环境需要配置本地的hosts文件增加如下配置
192.168.64.153 itcastharbor.comwindows环境下host路径在C:\Windows\System32\drivers\etc
域名访问harbor通过域名访问harbor ,域名就是我们刚才配置的itcastharbor.com域名访
因为我们的证书是自签的 ,不是第三方认证的 ,素以有安全性提示 ,点击继续就可以访问
到这里登录后就可以访问了
本文由传智教育博学谷教研团队发布 。
如果本文对您有帮助 ,欢迎关注和点赞;如果您有任何建议也可留言评论或私信 ,您的支持是我坚持创作的动力 。
转载请注明出处!
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!