1. 程式人生 > >龍芯Fedora21 搭建docker-registry本地伺服器

龍芯Fedora21 搭建docker-registry本地伺服器

http://www.loongnix.org/index.php/%E9%BE%99%E8%8A%AFFedora21_%E6%90%AD%E5%BB%BAdocker-registry%E6%9C%AC%E5%9C%B0%E6%9C%8D%E5%8A%A1%E5%99%A8

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

1.png