自建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 -- ...
随机推荐
- 使用本地自签名证书为 React 项目启用 https 支持
简介 现在是大前端的时代,我们在本地开发 React 项目非常方便.这不是本文的重点,今天要分享一个话题是,如何为这些本地的项目,添加 https 的支持.为什么要考虑这个问题呢?主要有几个原因 如果 ...
- k8s入门之Secret(十)
Secret与ConfigMap都是用来存储配置信息的,不同之处在于ConfigMap是明文存储的,而Secret用来保存敏感信息,如:密码.OAuth令牌,ssh key等等.Secret常用有三种 ...
- jenkins插件Role-based添加账号后显示红色"No type prefix"
jenkins插件Role-based添加账号save后,前面显示红色"No type prefix",不影响使用. 查了下原因,网上很少正解,我这里记录下正确的方法: 添加用户: ...
- React 与 Hooks 如何使用 TypeScript 书写类型?
React 与 Hooks 如何使用 TypeScript 书写类型? 本文写于 2020 年 9 月 20 日 函数组件与 TS 对于 Hooks 来说是不支持使用 class 组件的. 如何在函数 ...
- ElasticSearch7.3学习(二十六)----搜索(Search)参数总结、结果跳跃(bouncing results)问题解析
1.preference 首先引入一个bouncing results问题,两个document排序,field值相同:不同的shard上,可能排序不同:每次请求轮询打到不同的replica shar ...
- Fail2ban 命令详解 fail2ban-client
Fail2ban的客户端操作命令,用于控制服务端. root@ubuntu:~# fail2ban-client --help Usage: /usr/bin/fail2ban-client [OPT ...
- 『忘了再学』Shell基础 — 17、预定义变量
目录 1.预定义变量$? 2.预定义变量$$和$! 我们之前说过,Shell中的变量不是按照变量值的类型来进行分类的,而是按照Linux系统中定义的变量类别来分类的. 预定义变量就是,事先把变量的名称 ...
- Eureka服务下线太慢,电话被告警打爆了
某年某月的某一天,就像一张破碎的脸... 错了,重来. 某天,忽然发现大量的告警,经过多番调查研究考察(此处省略3000字),发现是由于 Eureka 服务下线太慢,而仍然有大量的请求打进来导致的报错 ...
- 2020 CSP-J 初赛游记
估分 预估 85 分,一是怕选错,而是最后真的错了一些 考点 排列组合:论临时抱佛脚的作用 靠前看了一下捆绑法和插板法,果然考了. 2.算法常识,和复杂度分析 冒泡排序最小交换次数 = n-1 , G ...
- Django-使用nginx部署
本地部署 uWSGI 在部署之前,我们得先了解几个概念 wsgi web应用程序之间的接口.它的作用就像是桥梁,连接在web服务器和web应用框架之间. uwsgi 是一种传输协议,用于定义传输信息的 ...