首页 > 其他分享 >使用Docker Registry快速搭建私有镜像仓库

使用Docker Registry快速搭建私有镜像仓库

时间:2022-12-30 15:33:38浏览次数:65  
标签:5000 nginx Registry 镜像 Docker root docker registry

1、Docker是什么?

Docker是Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。

Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。

Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。

总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

2、Docker概念

Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。使用Linux容器来部署应用程序称为集装箱化。使用docker轻松部署应用程序。

集装箱化的优点:

  • 灵活:即使是复杂的应用程序也可封装。
  • 轻量级:容器利用并共享主机内核。
  • 便携式:您可以在本地构建,部署到云上并在任何地方运行。
  • 可扩展性:您可以增加和自动分发容器副本。
  • 可堆叠:您可以垂直堆叠服务并及时并及时堆叠服务。

3、背景

在 Docker 中,当我们执行 docker pull xxx 的时候,可能会比较好奇,Docker 会去哪儿查找并下载镜像呢?

它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库,上面的镜像,大家都可以看到,也可以使用。所以,我们也可以带上仓库地址去拉取镜像,如:docker pull registry.hub.docker.com/library/alpine,不过要注意,这种方式下载的镜像的默认名称就会长一些。

如果要在公司中使用 Docker,我们基本不可能把商业项目上传到公共仓库中,那如果要多个机器共享,又能怎么办呢?

正因为这种需要,所以私有仓库也就有用武之地了。

所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。

下面我们用官方提供的registry镜像来搭建私有镜像仓库,当然还有其它很多方法。

4、环境准备

准备两台安装好docker的服务器:

服务端:docker私有仓库服务器,运行registry容器;

测试端:普通的docker服务器,在这台服务器上下载一个测试镜像nginx,然后上传到registry服务器进行测试;

IP地址

操作系统

备注

192.168.1.77

CentOS 7.4.1708 (Core)

服务端

192.168.1.79

CentOS 7.4.1708 (Core)

测试端

5、registry部署(服务端操作)

1)下载镜像registry

[root@localhost ~]# docker pull registry

Using default tag: latest

Trying to pull repository docker.io/library/registry ...

latest: Pulling from docker.io/library/registry

486039affc0a: Pull complete

ba51a3b098e6: Pull complete

8bb4c43d6c8e: Pull complete

6f5f453e5f2d: Pull complete

42bc10b72f42: Pull complete

Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7

Status: Downloaded newer image for docker.io/registry:latest

2)查看镜下是否pull下来

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/registry latest 708bc6af7e5e 3 months ago 25.8 MB

3)运行registry容器

[root@localhost ~]# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

2cba2cc0ca18d22686b05de30a80ae461c5f29cc10c15d3a5ea47e65238a5941

参数说明

-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;

-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;

-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;

--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;

--name registry:创建容器命名为registry,你可以随便命名;

registry:latest:这个是刚才pull下来的镜像;

4)测试镜像仓库中所有的镜像

[root@localhost ~]# curl http://127.0.0.1:5000/v2/_catalog

{"repositories":[]}

6、测试镜像仓库(测试端操作)

1)修改下镜像源并重启docker服务

[root@localhost ~]# vim /etc/docker/daemon.json

{

    "registry-mirrors": [ "https://registry.docker-cn.com"]

}

# 以下是镜像源地址,选择合适的镜像地址

Docker中国区官方镜像

​https://registry.docker-cn.com​

网易

​http://hub-mirror.c.163.com​

ustc

​https://docker.mirrors.ustc.edu.cn​

中国科技大学

​https://docker.mirrors.ustc.edu.cn​

阿里云容器服务

​https://cr.console.aliyun.com​

2)下载nginx镜像

[root@localhost ~]# docker pull nginx

Using default tag: latest

Trying to pull repository docker.io/library/nginx ...

latest: Pulling from docker.io/library/nginx

54fec2fa59d0: Pull complete

4ede6f09aefe: Pull complete

f9dc69acb465: Pull complete

Digest: sha256:86ae264c3f4acb99b2dee4d0098c40cb8c46dcf9e1148f05d3a51c4df6758c12

Status: Downloaded newer image for docker.io/nginx:latest

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/nginx latest 602e111c06b6 5 days ago 127 MB

3)镜像打标签

[root@localhost ~]# docker tag nginx:latest 192.168.1.77:5000/nginx:v1

格式说明:Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

nginx:lastest 这是源镜像,也是刚才pull下来的镜像文件;
192.168.1.77:5000/nginx:v1:这是目标镜像,也是registry私有镜像服务器的IP地址和端口;

4)查看已打好的标签镜像

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

192.168.1.77:5000/nginx v1 602e111c06b6 5 days ago 127 MB

docker.io/nginx latest 602e111c06b6 5 days ago 127 MB

5)上传到镜像服务器

[root@localhost ~]# docker push 192.168.1.77:5000/nginx:v1

The push refers to a repository [192.168.1.77:5000/nginx]

Get https://192.168.1.77:5000/v1/_ping: http: server gave HTTP response to HTTPS client

注意了,这是报错了,需要https的方法才能上传,我们可以修改下daemon.json来解决:

[root@localhost ~]# vim /etc/docker/daemon.json

{

    "registry-mirrors": [ "https://registry.docker-cn.com"],

    "insecure-registries": [ "192.168.1.77:5000"]

}

# 重启Docker服务

[root@localhost ~]# systemctl restart docker

# 再次上传镜像

[root@localhost ~]# docker push 192.168.1.77:5000/nginx:v1

The push refers to a repository [192.168.1.77:5000/nginx]

b3003aac411c: Pushed

216cf33c0a28: Pushed

c2adabaecedb: Pushed

v1: digest: sha256:cccef6d6bdea671c394956e24b0d0c44cd82dbe83f543a47fdc790fadea48422 size: 948

6)测试下载镜像

# 上传测试没问题了,我们接下来测试一下从registry服务器上下载刚才上传的nginx镜像,先删除测试端主机上的镜像:

[root@localhost ~]# docker rmi -f $(docker images -aq)

Untagged: 192.168.1.77:5000/nginx:v1

Untagged: 192.168.1.77:5000/nginx@sha256:cccef6d6bdea671c394956e24b0d0c44cd82dbe83f543a47fdc790fadea48422

Untagged: docker.io/nginx:latest

Untagged: docker.io/nginx@sha256:86ae264c3f4acb99b2dee4d0098c40cb8c46dcf9e1148f05d3a51c4df6758c12

Deleted: sha256:602e111c06b6934013578ad80554a074049c59441d9bcd963cb4a7feccede7a5

Deleted: sha256:81eaddad75aaa517b4a597912da28c2f5b905f6e9789dce3aea874b040aad201

Deleted: sha256:73cafa8418003ecfaa02360f181c132b2cf4b61433e1bd5c84012941105865c8

Deleted: sha256:c2adabaecedbda0af72b153c6499a0555f3a769d52370469d8f6bd6328af9b13

# 查看一下测试端主机上的镜像删除情况

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

7)从registry服务器上下载nginx镜像

[root@localhost ~]# docker pull 192.168.1.77:5000/nginx:v1

Trying to pull repository 192.168.1.77:5000/nginx ...

v1: Pulling from 192.168.1.77:5000/nginx

54fec2fa59d0: Pull complete

4ede6f09aefe: Pull complete

f9dc69acb465: Pull complete

Digest: sha256:cccef6d6bdea671c394956e24b0d0c44cd82dbe83f543a47fdc790fadea48422

Status: Downloaded newer image for 192.168.1.77:5000/nginx:v1

[root@localhost ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

192.168.1.77:5000/nginx v1 602e111c06b6 5 days ago 127 MB

# 列出所有镜像

[root@localhost ~]# curl http://192.168.1.77:5000/v2/_catalog

{"repositories":["nginx"]}

# 列出nginx镜像tag标签

[root@localhost ~]# curl http://192.168.1.77:5000/v2/nginx/tags/list

{"name":"nginx","tags":["v1"]}

至此,Docker搭建私有仓库完毕。

  • 输入编号:6893,直达文章
  • 输入m|M,直达目录列表

标签:5000,nginx,Registry,镜像,Docker,root,docker,registry
From: https://blog.51cto.com/u_12018693/5980298

相关文章

  • Docker 安装 CentOS
    Docker安装CentOSCentOS(CommunityEnterpriseOperatingSystem)是Linux发行版之一,它是来自于RedHatEnterpriseLinux(RHEL)依照开放源代码规定发布的源代码所编译而......
  • Docker 安装 Nginx
    Docker安装NginxNginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文......
  • Docker 安装 PHP
    Docker安装PHPPHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及......
  • Docker 安装 Python
    Docker安装PythonPython简介Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由GuidovanRossum于1989年底发明,第一个公开发行版发行于19......
  • Docker 安装 Node.js
    Docker安装Node.jsNode.js是一个基于ChromeV8引擎的JavaScript运行环境,是一个让JavaScript运行在服务端的开发平台。Node.js使用了一个事件驱动、非阻塞式I/O的模型......
  • Docker 安装 Redis
    Docker安装RedisRedis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的NoSQL数据库,并提供多种语言的API。Redis是一个开源(BSD许......
  • Docker 容器连接
    容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。下面我们来实现通过端口连接到一个docker容器。 网络端口映射......
  • docker基础之centos安装和设置加速镜像(一)
    使用yum安装Docker要求CentOS系统的内核版本高于3.10,查看本页面的前提条件来验证你的CentOS版本是否支持Docker。通过 uname-r 命令查看你当前的内核版本......
  • 在线安装docker 脚本
    #!/bin/bashenv(){echo-e"\e[1;33mperparingenv!!!\e[0m"yuminstall-yyum-utilsyum-config-manager\--add-repo\https://downl......
  • 用Dockerfile制作一个java应用镜像,ubuntu基础篇
    内容介绍:(1)本章目的,将一个自行开发的java程序webpay-api,制作为docker自定义镜像,并且进行部署。(2)实验环境:物理机:VMware虚拟机+CentOS7.8x64Docker:Doc......