Linux docker7--私有镜像仓库registry和UI搭建及使用

一、对于开源的镜像,如redis,nginx等,可以通过官方仓库Docker Hub,或者国内的阿里云等共有仓库下载获取到镜像。但是企业内对于自己的研发产品不可能往公共仓库去发布镜像的,一般都会搭建私有的镜像仓库,保障内部研发的镜像对内可用,外部是无法获取的。Redistry是Docker官方提供的私有镜像仓库,本例搭建一下。

二、搭建Redistry和UI服务
1、创建registry_data数据卷
命令:
docker volume create registry_data
在这里插入图片描述

2、编写docker-compose.yml文件,配置私有仓库registry和可视化界面UI。
docker-compose.yml示例如下:

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - registry_data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8092:80
    environment:
      - REGISTRY_TITLE=weisian的私有镜像仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry
volumes:
  registry_data:

说明:
registry服务:
使用registry最新镜像,指定数据卷registry_data打通容器内的/var/lib/registry目录。
UI服务:
使用joxit/docker-registry-ui:static镜像,指定宿主机8092端口映射容器内的80端口,指定环境变量(标题,仓库服务的地址为仓库服务的5000端口),ui服务依赖于registry服务的运行。
volumes:为生明registry_data是一个数据卷,需要提前创建好。

3、运行配置,启动registry和ui
命令:
docker-compose -f docker-compose.yml up -d
在这里插入图片描述
4、查看是否启动成功
(1)、查看docker的进程
docker ps 可以看到两个进程都存在,端口也都为配置的端口
在这里插入图片描述
(2)、浏览器访问镜像仓库地址,可以正常访问

http://192.168.249.88:8092/在这里插入图片描述

以上完成了私有镜像仓库的搭建。

三、推送私有仓库,和私有仓库拉取镜像
1、推送到仓库前,目标镜像需要打tag,即指定仓库地址和镜像版本
(固定格式:私服ip:端口/镜像名称:版本)
命令:
docker tag nginx:latest 192.168.249.88:8092/nginx:1.1
说明:上命令将本地的nginx:latest镜像打成tag镜像(实际上tag镜像和源镜像的镜像id还是一致的,tag镜像指定了仓库地址),这样在推送tag的时候就知道往哪里推送了
在这里插入图片描述
2、推送tag镜像到远程仓库
命令:
docker push 192.168.249.88:8092/nginx:1.1
在这里插入图片描述
注:
如上图是推送失败的结果。原因就是docker使用https的请求去访问resistry的服务,但是服务器没有配置https证书,所以https请求就不能成功。解决办法:1、服务器配置https证书,2、修改docker的daemon.json信息,可以针对某些地址进行http访问

方法2步骤:
(1)、打开docker的daemon.json
vi /etc/docker/daemon.json
在这里插入图片描述
(2)、添加下面的配置(即请求http://192.168.249.88:8092时使用http请求方式),注意上一行需要添加英文逗号
“insecure-registries”:[“http://192.168.249.88:8092”]
在这里插入图片描述
(3)、# 重新加载deamon文件
systemctl daemon-reload
在这里插入图片描述
(4)、重启docker
systemctl restart docker
在这里插入图片描述
完成上诉daemon的配置后,再次推送tag,可以成功
在这里插入图片描述
3、查看推送的结果
浏览器访问私有镜像仓库http://192.168.249.88:8092/,可以看到有nginx的镜像了

在这里插入图片描述
4、拉取私有仓库的镜像
在浏览器上点击如下位置获取拉取该镜像的命令
在这里插入图片描述
执行命令
docker pull 192.168.249.88:8092/nginx:1.0
如下可以看出,已经拉取到仓库的镜像到docker容器中了。
在这里插入图片描述
5、拉取的nginx镜像,启动服务
docker run -d --name nginx_1 -p 8093:80 192.168.249.88:8092/nginx:1.0
在这里插入图片描述
6、查看nginx服务
http://192.168.249.88:8093/
在这里插入图片描述

如上完成了,私有镜像仓库的搭建,已经推送和拉取镜像的过程,验证了拉取到的镜像可以正常运行。

学海无涯苦作舟!!!

### 解决方案 为了在无序数组中高效地到第K,可以采用基于快速选择算法的方法。该方法源自快速排序的思想,在平均情况下具有线性时间复杂度O(n)[^1]。 #### 基本概念 快速选择是一种用于在线性时间内解决问题的选择算法。它通过分区操作来减少处理的据规模,直到定位到所需的元素位置为止。具体来说: - **分区函**:选定一个枢轴(pivot),通常可以选择第一个元素、最后一个元素或是随机选取; - **分割过程**:将所有小于等于枢轴的元素移动至其左侧,其余放置在其右侧; - **递归调用**:依据当前枢轴的位置决定下一步是在左半区还是右半区间继续执行相同的操作; 当目标索引正好对应于某个特定分界点时,则到了所的第K值[^3]。 #### Python 实现代码 下面给出了一段Python版本的具体实现方式: ```python import random def find_kth_largest(nums, k): """返回列表 nums 中第 k 字""" def partition(left, right, pivot_index): pivot_value = nums[pivot_index] # 将枢轴移到末尾 nums[pivot_index], nums[right] = nums[right], nums[pivot_index] store_index = left # 移动较小项到左边 for i in range(left, right): if nums[i] > pivot_value: # 寻第k而非第k小因此这里使用> nums[store_index], nums[i] = nums[i], nums[store_index] store_index += 1 # 放回枢轴 nums[right], nums[store_index] = nums[store_index], nums[right] return store_index def select(left, right, k_smallest): """ 返回列表 nums 的子集 [left:right+1] 中第 k_smallest 小的字, 即整个列表中的第 (len(nums)-k) 字。 """ if left == right: return nums[left] # 随机化枢轴以提高性能稳定性 pivot_index = random.randint(left, right) pivot_index = partition(left, right, pivot_index) if k_smallest == pivot_index: return nums[k_smallest] elif k_smallest < pivot_index: return select(left, pivot_index - 1, k_smallest) else: return select(pivot_index + 1, right, k_smallest) n = len(nums) return select(0, n - 1, n - k) # 测试案例 print(find_kth_largest([3, 2, 1, 5, 6, 4], 2)) # 输出应为5 ``` 此代码实现了上述提到的核心逻辑,并且加入了随机化的策略来增强实际应用中的表现效果。需要注意的是,这里的`find_kth_largest()`函接收两个参——待查询的整型列表以及表示所需排名小的一个正整k。最终输出的结果即为目标值所在处的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值