一、仓库安装

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仓库的更多相关文章

  1. docker简单介绍----docker仓库的应用

    docker hub:主要用来存储docker镜像的仓库 docker默认提供了一个docker仓库,我们也可以自建私有仓库或者使用第三方的docker仓库来pull或者push镜像 这里我们以阿里云 ...

  2. FW 配置一个私有的Docker仓库

    思维 66 3月1日 发布 建分支 0 分支 收藏 0 收藏 我们在本地开发时,如果内网能部署一台Docker服务器,无疑会极大的方便镜像的分享发布,有些私有镜像就是可以直接放到内网服务器上,省去了不 ...

  3. 试用 Nexus OSS 3.0 的docker仓库 (二)

    试用 Nexus OSS 3.0 的docker仓库 (一) : http://www.cnblogs.com/wzy5223/p/5410990.html 三. 创建docker私有仓库,docke ...

  4. 试用 Nexus OSS 3.0 的docker仓库 (一)

    Nexus 3.0 可以创建三种docker仓库: 1. docker (proxy)      代理和缓存远程仓库 ,只能pull 2. docker (hosted)    托管仓库 ,私有仓库, ...

  5. Maven--构建企业级仓库(二)

    <Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)>              看到经历的两家公司 ...

  6. 云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题

    我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭 ...

  7. 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

    3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...

  8. 云计算之路-阿里云上-容器难容:优化自建 docker swarm 集群的部署

    在上周六遭遇阿里云容器服务 swarm 版的故障之后,我们决定还是走自建 docker swarm 之路,只要不是阿里云底层的问题,我们相信会找到办法解决或避开自建 docker swarm 不稳定的 ...

  9. 使用 Nexus Repository Manager 搭建私有docker仓库

    使用容器安装Nexus3 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name nexus  -- ...

随机推荐

  1. socket模块和黏包问题

    socket套接字简介 编写cs架构的程序 实现数据交互 OSI七层相当复杂 socket套接字是一门技术 socket模块>>>:提供了快捷方式 不需要自己处理每一层 " ...

  2. pytorch入门--土堆深度学习快速入门教程

    工具函数 dir函数,让我们直到工具箱,以及工具箱中的分隔区有什么东西 help函数,让我们直到每个工具是如何使用的,工具的使用方法 示例:在pycharm的console环境,输入 import t ...

  3. JavaScript 单线程之异步编程

    Js 单线程之异步编程 先了解一个概念,为什么 JavaScript 采用单线程模式工作,最初设计这门语言的初衷是为了让它运行在浏览器上面.它的目的是为了实现页面的动态交互,而交互的核心是进行 Dom ...

  4. sqlalchemy模块介绍、单表操作、一对多表操作、多对多表操作、flask集成.

    今日内容概要 sqlalchemy介绍和快速使用 单表操作增删查改 一对多 多对多 flask集成 内容详细 1.sqlalchemy介绍和快速使用 # SQLAlchemy是一个基于 Python实 ...

  5. JavaMetaweblogClient,Metaweblog的java实现-从此上传博客实现全平台

    目录 1. 什么是Metaweblog? 2. Metaweblog的应用 3. 如何使用Metaweblog 4. 本项目介绍 4.1 metaweblog与java之间的关系映射 4.2 使用Ja ...

  6. Python 中的内存管理

    Python 中一切皆对象,这些对象的内存都是在运行时动态地在堆中进行分配的,就连 Python 虚拟机使用的栈也是在堆上模拟的.既然一切皆对象,那么在 Python 程序运行过程中对象的创建和释放就 ...

  7. SpringBoot实现基于token的登录验证

    一.SpringBoot实现基于token的登录验证 基于token的登录验证实现原理:客户端通过用户名和密码调用登录接口,当验证数据库中存在该用户后,将用户的信息按照token的生成规则,生成一个字 ...

  8. 安装Speedtest到Python

    Speedtest模块可以测试主机的网络带宽大小. 运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:无 硬件要求:无 安装过程 1.安装Spee ...

  9. Tensorboard SummaryWriter()

    import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvi ...

  10. 记录bug的贴子

    这个贴子用来记录一些,平时关注新闻,暴露出来的bug,引以为戒. 2019/01/21 - 拼多多出现大量100元无门槛券 关键词: 风险控制:羊毛党: https://www.zhihu.com/q ...