http://ask.loongnix.org/?/article/88
1. Docker registry简介
Docker registry作为一个镜像仓库,主要功能是通过网络存储和分发Docker镜像。
在本文中,Docker registry的编译结果是生成一个Docker镜像,可以方便的提供给管理员直接部署使用。
2. 谁需要部署Docker registry?
通常情况下,Docker用户会从Docker公有仓库(hub.docker.com)进行镜像的发行,即开发者提交镜像、使用者拉取镜像,对应于docker的命令push、pull。对于部分用户来说,只需要使用公有仓库上的镜像就完全能够满足需求了,但是很多情况下是不够的,比如用户自己开发的应用、不想公开代码到公有仓库,或者是公司开发的、面向特定用户的镜像,就需要维护一个私有仓库;或者对于一些项目,在开发、测试和持续整合阶段,也需要一个本地镜像仓库。
3. Docker registry部署过程
实验环境:3A3000+Loongnix(Fedora21-20170726);
准备条件:本机已经安装好Docker Engine平台,并且制作好一个 fedora21-base 镜像,
具体过程请参照http://ask.loongnix.org/?/article/81 。
3.1 下载源码
# git clone git://github.com/docker/docker-registry.git
若本机没有安装git命令,请首先执行yum install git。
3.2 编译registry镜像
编译命令如下:
# cd docker-registry # docker build -t fedora-registry:1 .
上面的命令中,fedora-registry:1为要编译成的镜像名称及tag号。
由于官方的docker-registry是适配X86平台,基础镜像也是X86平台的Ubuntu,因此直接在龙芯上进行编译会出现各种错误。
所以需要对源代码进行修改,按照下面各节的方法进行解决。
3.2.1 默认编译平台为x86_64,修改为mips64el
# cd docker-registry # grep x86_64 . -r
能找到4个文件,需要修改如下3个:
contrib/golang_impl/fixtures/index/images/e0acc43660ac918e0cd7f21f1020ee3078fec7b2c14006603bbc21499799e7d5/json contrib/golang_impl/fixtures/index/images/0e03f25112cd513ade7c194109217b9381835ac2298bd0ffb61d28fbe47081a8/json tests/data/511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158/json
将文件中”"architecture":"x86_64"”修改为“"architecture":"mips64el"”。
3.2.2 修改Dockerfile
问题类型和修改思路:
● 官方代码的Dockerfile中,基础镜像的名称是Ubuntu ,需要改成龙芯镜像的名称,fedora21-base:21(tag号若不是latest,则必须写明);
● docker-registry镜像的制作,需要编译源代码,依赖很多其它软件。这些软件在默认Ubuntu软件源是都能够提供的,但是Loongnix的yum源并不一定都提供。如果Loongnix的yum源没有提供,需要找替代的软件包,比如另一个相同功能、但是名称不同的软件包。如果仍然找不到合适软件包,可以尝试暂时去掉,绕过这个软件包,先保证编译成功。如果在编译或者运行时发现还是存在依赖问题,再回头找到依赖软件包的源代码进行编译以解决问题。
下面我们对修改前的Dockerfile文件进行逐条指令分析。
Step 1:
# Latest Ubuntu LTS
FROM ubuntu:14.04
默认依赖镜像从dockerhub获取Ubuntu,我们制作的镜像依赖于龙芯平台的fedora21-base,需要修改为
# Latest Loongnix
FROM fedora21-base:21
如果你遇到如下报错,那就需要检查你的基础镜像是否能够成功获取。