自建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 -- ...
随机推荐
- Centons7最小化安装报错:ping: baidu.com: Name or service not know
在这之前,centos7最小化安装默认是不能联网的,首先必须切换到root用户,再解决网络问题 一. 切换到root用户 二. 解决网络问题 一.切换到root用户 Linux下 ...
- 手把手教你 bash中给变量赋值时 ' 和 " 和 ` 和 $() 的使用
1.赋值指令 var='变量内容' var="变量内容" var=`command` var=$(command) var=变量内容 2.格式要求 =两边不能有空白字符 错误示例 ...
- Java 统计新客户
上周做了一个订单数据统计的任务,统计的是订单的新客户数量,本文做一个解题过程的记录和整理. 新客户的定义 新客户指的是选取时间段有订单,时间段之前没有订单. 比如下面的订单数据: 时间段 2月1日之前 ...
- hive从入门到放弃(六)——常用文件存储格式
hive 存储格式有很多,但常用的一般是 TextFile.ORC.Parquet 格式,在我们单位最多的也是这三种 hive 默认的文件存储格式是 TextFile. 除 TextFile 外的其他 ...
- 513. Find Bottom Left Tree Value - LeetCode
Question 513. Find Bottom Left Tree Value Solution 题目大意: 给一个二叉树,求最底层,最左侧节点的值 思路: 按层遍历二叉树,每一层第一个被访问的节 ...
- 好客租房48-组件的props(基本使用)
组件是封闭的 要接受外部数据应该通过props来实现 props的作用:接受传递给组件的数据 传递数据:给组件标签添加属性 接收数据:函数组件通过参数props接收数据 类组件通过this.props ...
- 词云图value传递数据不显示(已解决)
问题描述: 今天在做词云图时,虽然词云图能够展现出来,但是后台传递过来的数据(每个词出现的次数)却不显示. 错误原因: 错误的将tooltip写在了series内部,如图: 解决方案: 将toolti ...
- SmartIDE v0.1.17 已经发布 - 模版库远程模式和插件市场公测
SmartIDE v0.1.17 已经发布,本次同步更新了CLI (Build 3332) 的稳定版通道和Server (Build 3333) 生产环境(内测中).请参考对应的 安装说明 获取最新版 ...
- 『忘了再学』Shell基础 — 22、主要的环境变量配置文件说明
目录 1.source命令 2.Linux系统中环境变量配置文件 (1)登录时生效的环境变量配置文件 (2)/etc/profile环境变量配置文件 (3)/etc/profile.d/*.sh环境变 ...
- java基础题(3)
5.面向对象 5.1封装 5.1.1修改Data类的定义 描述 现有一个Data类,内部定义了属性x和y,在main方法中实例化了Data类,并计算了data对象中x和y的和.但是,Data类的定义存 ...