Docker创建私有仓库

1.安装docker

docker私有库本身就是一个docker镜像,所以,首先要安装docker,然后启动这个镜像。关于安装docker的过程,参考另外一个文章:

安装docker过程记录

2.安装私有镜像库

首先,拉取私有镜像库

[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker pull registry:2
2: Pulling from library/registry
79e9f2f55bf5: Pull complete
0d96da54f60b: Pull complete
5b27040df4a2: Pull complete
e2ead8259a04: Pull complete
3790aef225b9: Pull complete
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:2
docker.io/library/registry:2
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
registry     2         b8604a3fe854   3 weeks ago   26.2MB

这里拉取标签为2的镜像

然后,启动私有镜像的容器

[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# mkdir -p /opt/data/registry
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker run --name local-regi -d  -p 5000:5000 --restart=always  -v /opt/data/registry:/var/lib/registry registry:2
cc672b3e0695adc0d1540ed46ae8253b6d32ed542560b8e8d3dbe1889dc1ef62
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
cc672b3e0695   registry:2   "/entrypoint.sh /etc…"   4 seconds ago   Up 3 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   local-regi

执行结果可以看到,容器被启动,并映射了5000端口到本地。后面就将自己的镜像提交到私有镜像库。

[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
my-proj      latest    2cfa024db852   6 seconds ago   643MB
registry     2         b8604a3fe854   3 weeks ago     26.2MB
java         8         d23bdf5b1b1b   4 years ago     643MB

这里我构建了一个私有镜像"my-proj"

3.提交镜像

要将镜像提交到私有仓库,首先需要对docker声明私有镜像服务。

[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:16:3e:01:6e:2a brd ff:ff:ff:ff:ff:ffinet 172.17.197.46/20 brd 172.17.207.255 scope global dynamic eth0valid_lft 315358174sec preferred_lft 315358174secinet6 fe80::216:3eff:fe01:6e2a/64 scope link valid_lft forever preferred_lft forever
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                                       NAMES
cc672b3e0695   registry:2   "/entrypoint.sh /etc…"   15 minutes ago   Up 15 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   local-regi

本机ip:172.17.197.46,已经启动了容器“local-regi”,映射端口5000

然后,在docker客户端注册私有镜像服务:

[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# tee /etc/docker/daemon.json <<-'EOF'
> {>   "insecure-registries":["172.17.197.46:5000"]
> }
> EOF
{"insecure-registries":["172.17.197.46:5000"]
}
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# systemctl daemon-reload
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# systemctl restart docker

此后,当客户端提交镜像到私有镜像库,分为两步:打标签和提交:

[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
my-proj      latest    2cfa024db852   14 minutes ago   643MB
registry     2         b8604a3fe854   3 weeks ago      26.2MB
java         8         d23bdf5b1b1b   4 years ago      643MB
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker tag my-proj 172.17.197.46:5000/my-proj:latest
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker push 172.17.197.46:5000/my-proj:latest
The push refers to repository [172.17.197.46:5000/my-proj]
35c20f26d188: Pushed
c3fe59dd9556: Pushed
6ed1a81ba5b6: Pushed
a3483ce177ce: Pushed
ce6c8756685b: Pushed
30339f20ced0: Pushed
0eb22bfb707d: Pushed
a2ae92ffcd29: Pushed
latest: digest: sha256:79d74b66dcb69e5b0facbf7a3c815167980ab9a3064c684cf68da01bba39abd8 size: 2000

经过上面的操作,镜像已经被提交到docker私有服务。

如果客户端像要下载这个镜像,首先需要像上面那个描述的,注册私有镜像服务。然后就用下面类似的操作即可:

[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
registry     2         b8604a3fe854   3 weeks ago   26.2MB
java         8         d23bdf5b1b1b   4 years ago   643MB
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker pull 172.17.197.46:5000/my-proj:latest
latest: Pulling from my-proj
7448db3b31eb: Already exists
c36604fa7939: Already exists
29e8ef0e3340: Already exists
a0c934d2565d: Already exists
a360a17c9cab: Already exists
cfcc996af805: Already exists
2cf014724202: Already exists
4bc402a00dfe: Already exists
Digest: sha256:79d74b66dcb69e5b0facbf7a3c815167980ab9a3064c684cf68da01bba39abd8
Status: Downloaded newer image for 172.17.197.46:5000/my-proj:latest
172.17.197.46:5000/my-proj:latest
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images
REPOSITORY                   TAG       IMAGE ID       CREATED          SIZE
172.17.197.46:5000/my-proj   latest    2cfa024db852   18 minutes ago   643MB
registry                     2         b8604a3fe854   3 weeks ago      26.2MB
java                         8         d23bdf5b1b1b   4 years ago      643MB

4.其他注意

这个私有docker镜像库有三个要注意的问题:

a.镜像存储

首先,如果没有特别的操作,私有镜像作为docker的容器,在重建后,存储的镜像就没有了,需要使用挂载命令,将私有镜像存储位置挂载到宿主机或者其他docker容器外部位置,命令如下:

docker run --name local-regi -d  -p 5000:5000 --restart=always  -v /opt/data/registry:/var/lib/registry registry:2

-v命令将镜像存储挂载到宿主机的/opt/data/registry目录

b.容器启动

私有镜像服务作为执行的容器,在重启后,需要手动启动,可以使用restart参数,在docker服务启动,自动启动这个容器,再将docker服务设置为随系统启动即可。

docker run --name local-regi -d  -p 5000:5000 --restart=always  -v /opt/data/registry:/var/lib/registry registry:2

上面的命令用了–restart=always,在docker服务启动后,自动启动这个容器

c.管理界面

还存在的问题就是,这个私有服务的容器,内部保存着很多私有镜像,管理起来非常不容器,这需要独立提供一套管理界面,通常,我们可以使用“harbor”进行这类操作。关于harbor的使用方法,稍后,另起文档记录。

Docker创建私有仓库相关推荐

  1. Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解

    目录 一.Docker私有仓库的操作 1.创建私有仓库 2.上传 3.获取私有仓库列表 4.测试私有仓库下载 二.Docker数据卷和数据卷容器 1.数据卷 2.数据卷容器 三.容器互联(使用cent ...

  2. Docker学习(5)——创建私有仓库,为私有仓库添加web界面

    一.什么是Docker 仓库? 仓库是集中存放镜像文件的场所.有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分.实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多 ...

  3. 一文搞定docker创建私有镜像仓库(配置启动http和https方式私有仓库服务,查询、删除私有仓库镜像)

    docker除了使用公共镜像仓库之外,也可以创建私有镜像仓库.对于内部开发.测试.部署环境来说,是很有必要的.        如何创建私有镜像仓库服务呢?当然是以容器的方式啦! 1.拉取官方regis ...

  4. docker安装各类软件以及创建私有仓库总结

    十一看了十次方的视频,特地对docker的操作进行了总结 前提docker安装完毕,docker安装https://www.cnblogs.com/yufeng218/p/8370670.html 里 ...

  5. Docker harbor私有仓库部署与管理

    Docker harbor私有仓库部署与管理. 前言 一.什么是Harbor 二.Harbor的特性 三.Harbor的构成 四.Harbor部署 4.1 环境准备 4.2 部署Docker Comp ...

  6. Windows系统用Docker搭建私有仓库

    Windows系统用Docker搭建私有仓库 一.安装Docker Desktop 二.创建私有仓库 三.验证私有仓库是否创建成功 一.安装Docker Desktop 1.1.可以在软件管家安装这个 ...

  7. Docker——docker-registry私有仓库集群构建

    摘要 随着docker使用的镜像越来越多,就需要有一个保存镜像的地方,这就是仓库.目前常用的两种仓库:公共仓库和私有仓库.最方便的就是使用公共仓库上传和下载,下载公共仓库的镜像是不需要注册的,但是上传 ...

  8. Docker容器私有仓库——Harbor私有仓库的搭建

    Docker容器私有仓库--Harbor私有仓库的搭建 一.Harbor介绍 1.Harbor概念 2.Harbor的核心组件 3.Harbor的优点 二.Harbor搭建的环境准备 1.当前Harb ...

  9. Docker login私有仓库报错:x509: cannot validate certificate for because it doesn‘t contain any IP SANs

    问题: docker login 私有仓库时报错 [01:18:02 root@node ~]#docker login 192.168.4.69 Username: admin Password: ...

最新文章

  1. HDU 4913 Least common multiple
  2. 报错解决:-bash: export: `g++11=g++': not a valid identifier
  3. 收藏起来,史上最全的 MySQL 高性能优化实战总结!
  4. 精选CSDN的ACM-ICPC五星博客
  5. 移动namenode、secondarynamenode和jobTracker的节点(使其成为独立节点)
  6. 批处理解决局域网共享打印机问题
  7. H.264编解码标准的核心技术(提供相关流程图)
  8. 安装 PyTorch C++ API libtorch 及一个最小例子
  9. Windows 10下 jupyter notebook 安装,打开,使用,关闭方法
  10. 萌新的Python练习菜鸟100例(十六)输出指定格式的日期。
  11. vuex commit 模块_分享一个Vuex的使用的新姿势
  12. eclipse 创建springboot 提示socket time超时问题
  13. B2C网站运营核心数据分析模型
  14. HDU4405(期望DP)
  15. cad上样条曲线上的点太多了_学习CAD,我总结了五个阶段,你是那个段位?
  16. 寻路算法 --- A星寻路算法
  17. PHP响应式营销型万能H5建站系统源码
  18. 西门子s300编程实例_几个西门子plc编程实例图解(含程序应用实例)
  19. Ubuntu 18.04 中Chrome浏览器安装与使用
  20. Windows 技术篇 - win10系统更新后切换应用一直自动切换为微软输入法解决方法,win10微软输入法卸载方法

热门文章

  1. 共享充电宝再涨价达每小时6元 客服:市场需求决定的
  2. RPG Maker MV 密码宝箱
  3. 报错SyntaxError: Unexpected token T in JSON at position 0 at JSON.parse (<anonymous>)的解决方法
  4. 十行代码完成公众号对话,VFP的能力就是这么强悍,你学会了吗?
  5. [todo] 如何高效工作
  6. 鸿蒙操作是基于安卓,华为鸿蒙系统终于发布,与安卓有何区别?随时可以应用在手机上...
  7. easypoi导入excel实践方法:
  8. Git上修改分支名称
  9. python列表原地交换nums[i], nums[nums[i]] = nums[nums[i]], nums[i]的解决方法
  10. Python中的交叉分析pivot_table