其他分享
首页 > 其他分享> > 自建docker仓库

自建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"}

 

标签:word,自建,仓库,vip,docker,root,v0.1,alpine
来源: https://www.cnblogs.com/zhangzhide/p/16439117.html