龙芯Fedora21 搭建docker-registry本地服务器

docker registry实现了docker镜像的管理和迁移,没有registry,docker的功能是不完整的。官方的registry直接拉取下来又不能使用,
必须制作我们自己mips64el架构的registry镜像,笔者进行了艰苦的摸索,开创了一种下述正确的新方法。

需要2台机器,为便于描述,下文中分别称为dscn1、dscn3。其中,
dscn1(10.20.42.56):用于搭建docker的服务器
dscn3(10.20.42.189):用于最后拉取镜像时对docker-registry的测试
一、编译m2crypto依赖
docker-registry镜像的制作依赖m2crypto包,先编译好此包,待用。

下载m2crypto源码包,安装,编译
#wget ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/updates/21/SRPMS/m/m2crypto-0.22.5-2.fc21.src.rpm       ;下载rpm源码包
#rpm -ivh m2crypto-0.22.5-2.fc21.src.rpm    ;安装源码包
#cd ~/rpmbuild/SPECS                        ;进入SPECS目录
#rpmbuild -ba m2crypto.spec                 ;编译m2crypto文件

此时,会提示有依赖包错误
#yum install openssl swig                     ;安装依赖包

修改m2crypto.spec在global multilib_arches添加mips64el架构
%global multilib_arches mips64el
在48行处,添加如下三行
%ifarch %{mips64el}
basearch=mips64el
%endif
再次执行编译rpmbuild -ba m2crypto.spec,编译成功
#cd ~/rpmbuild/RPMS/mips64el/                ;进入RPMS目录,找到编译后的包
#rpm -ivh m2crypto-0.22.5-2.fc21.loongson.mips64el.rpm    ;安装编译之后的包

二、制作registry镜像
首先你的确保已经安装了docker,且已经制作了mips64el下的基本镜像(具体可参看笔者写的《上篇:龙芯Fedora21推出docker方案》)


#git clone https://github.com/docker/docker-registry/archive/0.9.1.tar.gz 
;下载docker-registry-0.9.1的官方镜像tar包
#tar xvf 0.9.1.tar.gz -C /home          ;解压tar包到home目录下
#cd /home/docker-registry-0.9.1        ;进入解压目录
#grep “x86” ./* -r        ;查找上诉目录下含有x86的所有文件,将x86改成mips64el

笔者修改了如下三个文件
#vim ./contrib/golang_impl/fixtures/index/images/e0acc43660ac918e0cd7f21f1020ee3078fec7b2c14006603bbc21499799e7d5/json
#vim ./contrib/golang_impl/fixtures/index/images/0e03f25112cd513ade7c194109217b9381835ac2298bd0ffb61d28fbe47081a8/json
#vim ./tests/data/511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158/json

#vim ./config/config.yml          ;修改config.yml的dev(210行)处添加如下内容:
storage:local
storage_path:/home/data/dockerImag
loglevel:debug
#vim requirements/main.txt     ;修改main.txt文件,删除带有m2crypto一行

[Dockerfile]
# change to your base image
FROM fedora-base
# Install pip
RUN yum  install -y \
        swig \
        python-pip \
        openssl \
        openssl-devel
RUN mkdir -p /docker-registry
COPY .  /docker-registry
COPY ./config/boto.cfg /etc/boto.cfg
#install pip
RUN easy_install pip
# Install core
RUN pip install file:///docker-registry/depends/docker-registry-core
# Install m2crypto registry
ADD ./m2crypto-0.22.5-2.fc21.loongson.mips64el.rpm /
RUN rpm -ivh /m2crypto-0.22.5-2.fc21.loongson.mips64el.rpm
RUN pip install file:///docker-registry#egg=docker-registry[bugsnag,newrelic,cors]
ENV DOCKER_REGISTRY_CONFIG /docker-registry/config/config_sample.yml
ENV SETTINGS_FLAVOR dev
EXPOSE 5000
CMD ["docker-registry"]

#docker build -t fc21/registry .        ;进行编译
#docker run -d -p 5000:5000 -v /home/data/dockerImg:/tmp/registry fc21/registry                          ;启动镜像fc21/registry镜像

#docker tag docker.io/hello-world 10.20.42.56:5000/hello-world       ;修改hello-world镜像的tag,出现CA相关错误,看下面问题4解决
#docker push 10.20.42.56:5000/hello-world    ;push上传到dscn1的注册服务器


如果上述操作成功,将会看到如下信息输出
push一个镜像到registry仓库







三、 验证registry仓库 方法1:在dscn1的浏览器中输入 http://127.0.0.1:5000/v1/search 将会看到

浏览器验证本地registry服务器是否成功









方法2:在测试机dscn3执行下述命令,pull拉取dscn1上传的hello-world镜像

  1. docker pull 10.20.42.56:5000/hello-world

将会看到类似下面的信息输出

dscn3客户机拉取dscn1上的hello-world镜像







四、错误总结
1.ValueError: ('Missing distribution spec', '/tmp/piyush/common_bundle')
因为pip install 必须指定类似http://的路径,如果是本地目录使用 file://+具体目录

2.swig -python -I/usr/include/python2.7 -I/usr/include -I/usr/include/openssl -includeall -modern -D__x86_64__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
/usr/include/openssl/opensslconf.h:34: Error: Unable to find 'opensslconf-x86_64.h'
error: command 'swig' failed with exit status 1 
手动编译m2crypto,注销requirements/main.txt中的m2crypto,添加如下两行在dockerfile文件中
ADD ./m2crypto-0.22.5-2.fc21.loongson.mips64el.rpm /
RUN rpm -ivh /m2crypto-0.22.5-2.fc21.loongson.mips64el.rpm

3.No non-localhost DNS nameservers are left in resolv.conf. Using default external servers : [nameserver 8.8.8.8 nameserver 8.8.4.4]
重启一下docker的服务。

4.Error response from daemon: v1 ping attempt failed with error: 
  Get https://10.20.42.56:5000/v1/_ping: EOF. If this private registry supports only HTTP or HTTPS with an unknown CA certificate
编辑测试机的文件 vim /etc/sysconfig/docker  更改如下内容
在启动守护进程的时候加入参数  docker -d --insecure-registry=10.20.42.56:5000      ip得根据具体情况更改

5.failure: repodata/repomd.xml from dockerrepo: [Errno 256] No more mirrors to try.
	https://yum.dockerproject.org/repo/main/fedora/21/repodata/repomd.xml:  
[Errno 14] curl#77 - "<Unknown>"
执行命令rpm --query --file  /etc/pki/tls/certs/ca-bundle.trust.crt 查看证书
//注销/etc/yum.repos.d/docker.repo里面所有的内容,重装证书,再恢复docker.repo内容yum reinstall ca-certificates-2014.2.1-1.5.fc21.loongson.noarch
6.FATA[0001] Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: failed to load system roots and no roots provided
重装证书,重启docker服务
7.pull拉取官方镜像失败
添加docker的repo源 vim /etc/yum.repos.d/docker.repo 
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/fedora/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

8.FATA[0000] Shutting down daemon due to errors: pid file found, ensure docker is not running or delete /var/run/docker.pid
删除/var/run/docker.pid ,重新执行docker -d

9.Error running DeviceCreate (createPool) dm_task_run failed
由于内核模块的缺失导致的,这也是自己编译内核来升级带来的风险,修改内核配置文件(./boot/config-3.10.84-8.fc21.loongson.mips64el)重新编译内核
CONFIG_DM_THIN_PROVISIONING=y
本页面最后修改于2016年12月21日 (星期三) 18:30。

© 2017 by 龙芯开源社区 • Powered by MediaWiki