自建docker仓库
一、仓库安装
1、系统:CentOS7.9,采用yum安装方式
[root@master ~]# yum install docker-distribution -y
... ...
[root@master ~]# rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml
/usr/bin/registry
/usr/lib/systemd/system/docker-distribution.service
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry
[root@master ~]# systemctl start docker-distribution.service
[root@master ~]# systemctl enable docker-distribution.service
2、配置文件解读
vim /etc/docker-distribution/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /data/registry # 定义仓库镜像存储路径
http:
addr: 127.0.0.1:5000 # 定义监听端口
监听5000端口

3、nginx配置
upstream registry {
       server 127.0.0.1:5000;
}
server {
        listen       80;
        server_name  www.hello-word.vip hello-word.vip;
        location / {
            proxy_set_header Host $host;
	    proxy_pass http://registry;
        }
        access_log  logs/access.log  main;
        error_log   logs/error.log;
}
二、使用自建仓库
注意:以下操作均在树莓派4b上操作的,所以打出来的镜像只能用在arm64架构下;想在amd64架构下运行,需要将Dockerfile文件以及python文件复制到amd64架构的机器下打包;
1、准备Dockerfile文件和测试Python文件
Dockerfile
FROM alpine:3.9.5
RUN apk update && apk add --no-cache python3 net-tools
COPY ["app.py","/tmp"] ENV HOST="localhost"
ENV PORT="80" CMD python3 /tmp/app.py $HOST $PORT
测试Python文件
#!/usr/bin/env python3
#conding: utf-8
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import sys
import socket def hostname():
return socket.gethostname() def ipa():
return socket.gethostbyname(hostname()) data = {hostname(): ipa()} def httpserver(ipadd='127.0.0.1',sport=8888):
host = (ipadd, sport)
server = HTTPServer(host, Resquest)
server.serve_forever() class Resquest(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(data).encode()) if len(sys.argv) == 1:
httpserver()
elif len(sys.argv) == 3:
httpserver(sys.argv[1],eval(sys.argv[2]))
2、构建镜像
root@raspberrypi:~/dockerfile/alpine # docker build -t alpine:arm-v0.1 ./
Sending build context to Docker daemon 3.584kB
Step 1/6 : FROM alpine:3.9.5
3.9.5: Pulling from library/alpine
eb93038481dd: Pull complete
Digest: sha256:115731bab0862031b44766733890091c17924f9b7781b79997f5f163be262178
Status: Downloaded newer image for alpine:3.9.5
... ...
Successfully built 30068fd6c4af
Successfully tagged alpine:arm-v0.1
root@raspberrypi:~/dockerfile/alpine # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine arm-v0.1 30068fd6c4af About a minute ago 59.2MB
3、为镜像打tag
root@raspberrypi:~/dockerfile/alpine # docker tag alpine:arm-v0.1 hello-word.vip/alpine:arm64-v0.1
root@raspberrypi:~/dockerfile/alpine # docker images
REPOSITORY            TAG        IMAGE ID     CREATED       SIZE
alpine                arm-v0.1   30068fd6c4af   4 minutes ago    59.2MB
hello-word.vip/alpine                                              arm64-v0.1     30068fd6c4af   4 minutes ago    59.2MB
4、修改docker的daemon.json配置文件
因为docker私有仓库服务默认是基于https传输的,而我的自建仓库是http的,所以需要配置不使用https传输;配置路径:/etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://mirror.ccs.tencentyun.com"
    ],
"insecure-registries": ["http://hello-word.vip"]
}
配置完daemon.json文件之后,需要重启docker服务,使配置文件生效;
5、上传镜像到私有仓库
root@raspberrypi:~/dockerfile/alpine # docker push hello-word.vip/alpine:arm64-v0.1
The push refers to repository [hello-word.vip/alpine]
b0782aba8029: Pushed
5f6ff48124a4: Pushed
a73aeeee9177: Pushed
arm64-v0.1: digest: sha256:7de8ac1fb179c539e3c130d2c03196835af3a2eee51aa59ed75629c31a5d5d17 size: 947
三、自建仓库的常用操作
1、获取仓库镜像列表
root@pinode1:~ # curl -s http://hello-word.vip/v2/_catalog | jq
{
"repositories": [
"alpine",
"centos7/daemonapp",
"nginxdemos/hello",
"python-demo"
]
}
2、获取镜像的tag列表
root@pinode1:~ # curl -s http://hello-word.vip/v2/alpine/tags/list | jq
{
"name": "alpine",
"tags": [
"arm64-v0.1"
]
}
四、验证
1、下载镜像
root@raspberrypi:/home/pi/k8s # docker pull hello-word.vip/alpine:arm64-v0.1
arm64-v0.1: Pulling from alpine
eb93038481dd: Already exists
1b4529d08552: Pull complete
43b89475a0ed: Pull complete
Digest: sha256:7de8ac1fb179c539e3c130d2c03196835af3a2eee51aa59ed75629c31a5d5d17
Status: Downloaded newer image for hello-word.vip/alpine:arm64-v0.1
hello-word.vip/alpine:arm64-v0.1
root@raspberrypi:/home/pi/k8s # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-word.vip/alpine arm64-v0.1 30068fd6c4af 3 hours ago 59.2MB
2、运行镜像测试
root@raspberrypi:/home/pi/k8s # docker run --rm --env HOST=0.0.0.0 --env PORT=8085 -p 8888:8085 hello-word.vip/alpine:arm64-v0.1
开启另一个终端,访问宿主机的8888端口,返回了镜像的hostname以及ip地址;测试成功
root@raspberrypi:~ # ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:8888 0.0.0.0:*
... ...
root@raspberrypi:~ # curl 127.0.0.1:8888
{"8957ed456846": "172.17.0.2"}
自建docker仓库的更多相关文章
- docker简单介绍----docker仓库的应用
		docker hub:主要用来存储docker镜像的仓库 docker默认提供了一个docker仓库,我们也可以自建私有仓库或者使用第三方的docker仓库来pull或者push镜像 这里我们以阿里云 ... 
- FW 配置一个私有的Docker仓库
		思维 66 3月1日 发布 建分支 0 分支 收藏 0 收藏 我们在本地开发时,如果内网能部署一台Docker服务器,无疑会极大的方便镜像的分享发布,有些私有镜像就是可以直接放到内网服务器上,省去了不 ... 
- 试用 Nexus OSS 3.0 的docker仓库 (二)
		试用 Nexus OSS 3.0 的docker仓库 (一) : http://www.cnblogs.com/wzy5223/p/5410990.html 三. 创建docker私有仓库,docke ... 
- 试用 Nexus OSS 3.0 的docker仓库 (一)
		Nexus 3.0 可以创建三种docker仓库: 1. docker (proxy) 代理和缓存远程仓库 ,只能pull 2. docker (hosted) 托管仓库 ,私有仓库, ... 
- Maven--构建企业级仓库(二)
		<Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)> 看到经历的两家公司 ... 
- 云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题
		我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭 ... 
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
		3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ... 
- 云计算之路-阿里云上-容器难容:优化自建 docker swarm 集群的部署
		在上周六遭遇阿里云容器服务 swarm 版的故障之后,我们决定还是走自建 docker swarm 之路,只要不是阿里云底层的问题,我们相信会找到办法解决或避开自建 docker swarm 不稳定的 ... 
- 使用 Nexus Repository Manager 搭建私有docker仓库
		使用容器安装Nexus3 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name nexus -- ... 
随机推荐
- 浅谈Java-String到底是值传递还是引用传递?
			参数传递 Java 中的参数传递分为 "值传递""引用传递" 如果你学过 C/C++应该很好理解,就是所谓的 "值传递" 和 "指 ... 
- 前端面试 -Vue2系列
			vue 1为啥用Vue? 1MVVM 数据的双向绑定 2指令系统 不需要操作DOM 3组件化 2v-show和v-if.v-for v-show 通过 display:none 隐藏元素,DOM还在. ... 
- 实战  target 选择器,解放生产力!
			大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ... 
- fedora访问win10共享
			sudo mount -t cifs -o username=user,password=123 //192.168.31.20/aa /home/liao/win 
- 【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
			问题描述 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connecti ... 
- spring-boot rest controller 使用枚举作为参数,重写反序列化实现任意值转枚举类型
			目录 BaseEnum MyEnum StringToEnumConverterFactory FormatterConfig DTO RestController 参考 BaseEnum packa ... 
- 安装Net-Tools到CentOS(YUM)
			Net-Tools是一个Linux系统中基本的网络工具集,其集成了常用的网络管理命令"ifconfig.netstat.arp.route等". 运行环境 系统版本:CentOS ... 
- Tarjan入门
			Tarjan系列!我愿称Tarjan为爆搜之王! 1.Tarjan求LCA 利用并查集在一遍DFS中可以完成所所有询问.是一种离线算法. 遍历到一个点时,我们先将并查集初始化,再遍历完一个子树之后,将 ... 
- CSS 技术
			浏览本篇文章前可以先看之前的前端网页介绍和html常用标签以便更容易理解 本文目录: 目录 CSS 技术介绍 CSS 语法规则 CSS 和 HTML 的结合方式 第一种: 第二种 第三种 CSS 选择 ... 
- Java JavaMail通过SMPT发送邮件
			概述 本讲讲述如何使用JavaMail工具包,通过SMPT协议,在Java代码中发送邮件. 一.JavaMail简介 JavaMail API提供了一个独立于平台且与协议无关的框架来构建邮件和消息传递 ... 
