一、仓库安装

1、系统:CentOS7.9,采用yum安装方式

  1. [root@master ~]# yum install docker-distribution -y
  2. ... ...
  3. [root@master ~]# rpm -ql docker-distribution
  4. /etc/docker-distribution/registry/config.yml
  5. /usr/bin/registry
  6. /usr/lib/systemd/system/docker-distribution.service
  7. /usr/share/doc/docker-distribution-2.6.2
  8. /usr/share/doc/docker-distribution-2.6.2/AUTHORS
  9. /usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
  10. /usr/share/doc/docker-distribution-2.6.2/LICENSE
  11. /usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
  12. /usr/share/doc/docker-distribution-2.6.2/README.md
  13. /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

  1. version: 0.1
  2. log:
  3. fields:
  4. service: registry
  5. storage:
  6. cache:
  7. layerinfo: inmemory
  8. filesystem:
  9. rootdirectory: /data/registry # 定义仓库镜像存储路径
  10. http:
  11. addr: 127.0.0.1:5000 # 定义监听端口

监听5000端口

3、nginx配置

  1. upstream registry {
  2. server 127.0.0.1:5000;
  3. }
  4.  
  5. server {
  6. listen 80;
  7. server_name www.hello-word.vip hello-word.vip;
  8.  
  9. location / {
  10. proxy_set_header Host $host;
  11. proxy_pass http://registry;
  12. }
  13.  
  14. access_log logs/access.log main;
  15. error_log logs/error.log;
  16. }

二、使用自建仓库

注意:以下操作均在树莓派4b上操作的,所以打出来的镜像只能用在arm64架构下;想在amd64架构下运行,需要将Dockerfile文件以及python文件复制到amd64架构的机器下打包;

1、准备Dockerfile文件和测试Python文件

Dockerfile

  1. FROM alpine:3.9.5
  2. RUN apk update && apk add --no-cache python3 net-tools
  3. COPY ["app.py","/tmp"]
  4.  
  5. ENV HOST="localhost"
  6. ENV PORT="80"
  7.  
  8. CMD python3 /tmp/app.py $HOST $PORT

测试Python文件

  1. #!/usr/bin/env python3
  2. #conding: utf-8
  3. from http.server import HTTPServer, BaseHTTPRequestHandler
  4. import json
  5. import sys
  6. import socket
  7.  
  8. def hostname():
  9. return socket.gethostname()
  10.  
  11. def ipa():
  12. return socket.gethostbyname(hostname())
  13.  
  14. data = {hostname(): ipa()}
  15.  
  16. def httpserver(ipadd='127.0.0.1',sport=8888):
  17. host = (ipadd, sport)
  18. server = HTTPServer(host, Resquest)
  19. server.serve_forever()
  20.  
  21. class Resquest(BaseHTTPRequestHandler):
  22. def do_GET(self):
  23. self.send_response(200)
  24. self.send_header('Content-type', 'application/json')
  25. self.end_headers()
  26. self.wfile.write(json.dumps(data).encode())
  27.  
  28. if len(sys.argv) == 1:
  29. httpserver()
  30. elif len(sys.argv) == 3:
  31. httpserver(sys.argv[1],eval(sys.argv[2]))

2、构建镜像

  1. root@raspberrypi:~/dockerfile/alpine # docker build -t alpine:arm-v0.1 ./
  2. Sending build context to Docker daemon 3.584kB
  3. Step 1/6 : FROM alpine:3.9.5
  4. 3.9.5: Pulling from library/alpine
  5. eb93038481dd: Pull complete
  6. Digest: sha256:115731bab0862031b44766733890091c17924f9b7781b79997f5f163be262178
  7. Status: Downloaded newer image for alpine:3.9.5
  8. ... ...
  9. Successfully built 30068fd6c4af
  10. Successfully tagged alpine:arm-v0.1
  11. root@raspberrypi:~/dockerfile/alpine # docker images
  12. REPOSITORY TAG IMAGE ID CREATED SIZE
  13. 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

  1. {
  2. "exec-opts": ["native.cgroupdriver=systemd"],
  3. "registry-mirrors": [
  4. "https://docker.mirrors.ustc.edu.cn",
  5. "https://registry.docker-cn.com",
  6. "http://hub-mirror.c.163.com",
  7. "https://mirror.ccs.tencentyun.com"
  8. ],
  9. "insecure-registries": ["http://hello-word.vip"]
  10.  
  11. }

配置完daemon.json文件之后,需要重启docker服务,使配置文件生效;

5、上传镜像到私有仓库

  1. root@raspberrypi:~/dockerfile/alpine # docker push hello-word.vip/alpine:arm64-v0.1
  2. The push refers to repository [hello-word.vip/alpine]
  3. b0782aba8029: Pushed
  4. 5f6ff48124a4: Pushed
  5. a73aeeee9177: Pushed
  6. arm64-v0.1: digest: sha256:7de8ac1fb179c539e3c130d2c03196835af3a2eee51aa59ed75629c31a5d5d17 size: 947

三、自建仓库的常用操作

1、获取仓库镜像列表

  1. root@pinode1:~ # curl -s http://hello-word.vip/v2/_catalog | jq
  2. {
  3. "repositories": [
  4. "alpine",
  5. "centos7/daemonapp",
  6. "nginxdemos/hello",
  7. "python-demo"
  8. ]
  9. }

2、获取镜像的tag列表

  1. root@pinode1:~ # curl -s http://hello-word.vip/v2/alpine/tags/list | jq
  2. {
  3. "name": "alpine",
  4. "tags": [
  5. "arm64-v0.1"
  6. ]
  7. }

四、验证

1、下载镜像

  1. root@raspberrypi:/home/pi/k8s # docker pull hello-word.vip/alpine:arm64-v0.1
  2. arm64-v0.1: Pulling from alpine
  3. eb93038481dd: Already exists
  4. 1b4529d08552: Pull complete
  5. 43b89475a0ed: Pull complete
  6. Digest: sha256:7de8ac1fb179c539e3c130d2c03196835af3a2eee51aa59ed75629c31a5d5d17
  7. Status: Downloaded newer image for hello-word.vip/alpine:arm64-v0.1
  8. hello-word.vip/alpine:arm64-v0.1
  9. root@raspberrypi:/home/pi/k8s # docker images
  10. REPOSITORY TAG IMAGE ID CREATED SIZE
  11. hello-word.vip/alpine arm64-v0.1 30068fd6c4af 3 hours ago 59.2MB

2、运行镜像测试

  1. 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地址;测试成功

  1. root@raspberrypi:~ # ss -ntl
  2. State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
  3. LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
  4. LISTEN 0 4096 0.0.0.0:8888 0.0.0.0:*
  5. ... ...
  6. root@raspberrypi:~ # curl 127.0.0.1:8888
  7. {"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. Centons7最小化安装报错:ping: baidu.com: Name or service not know

    在这之前,centos7最小化安装默认是不能联网的,首先必须切换到root用户,再解决网络问题 一.      切换到root用户 二.      解决网络问题  一.切换到root用户 Linux下 ...

  2. 手把手教你 bash中给变量赋值时 ' 和 " 和 ` 和 $() 的使用

    1.赋值指令 var='变量内容' var="变量内容" var=`command` var=$(command) var=变量内容 2.格式要求 =两边不能有空白字符 错误示例 ...

  3. Java 统计新客户

    上周做了一个订单数据统计的任务,统计的是订单的新客户数量,本文做一个解题过程的记录和整理. 新客户的定义 新客户指的是选取时间段有订单,时间段之前没有订单. 比如下面的订单数据: 时间段 2月1日之前 ...

  4. hive从入门到放弃(六)——常用文件存储格式

    hive 存储格式有很多,但常用的一般是 TextFile.ORC.Parquet 格式,在我们单位最多的也是这三种 hive 默认的文件存储格式是 TextFile. 除 TextFile 外的其他 ...

  5. 513. Find Bottom Left Tree Value - LeetCode

    Question 513. Find Bottom Left Tree Value Solution 题目大意: 给一个二叉树,求最底层,最左侧节点的值 思路: 按层遍历二叉树,每一层第一个被访问的节 ...

  6. 好客租房48-组件的props(基本使用)

    组件是封闭的 要接受外部数据应该通过props来实现 props的作用:接受传递给组件的数据 传递数据:给组件标签添加属性 接收数据:函数组件通过参数props接收数据 类组件通过this.props ...

  7. 词云图value传递数据不显示(已解决)

    问题描述: 今天在做词云图时,虽然词云图能够展现出来,但是后台传递过来的数据(每个词出现的次数)却不显示. 错误原因: 错误的将tooltip写在了series内部,如图: 解决方案: 将toolti ...

  8. SmartIDE v0.1.17 已经发布 - 模版库远程模式和插件市场公测

    SmartIDE v0.1.17 已经发布,本次同步更新了CLI (Build 3332) 的稳定版通道和Server (Build 3333) 生产环境(内测中).请参考对应的 安装说明 获取最新版 ...

  9. 『忘了再学』Shell基础 — 22、主要的环境变量配置文件说明

    目录 1.source命令 2.Linux系统中环境变量配置文件 (1)登录时生效的环境变量配置文件 (2)/etc/profile环境变量配置文件 (3)/etc/profile.d/*.sh环境变 ...

  10. java基础题(3)

    5.面向对象 5.1封装 5.1.1修改Data类的定义 描述 现有一个Data类,内部定义了属性x和y,在main方法中实例化了Data类,并计算了data对象中x和y的和.但是,Data类的定义存 ...