龍芯Fedora21 搭建docker-registry本地伺服器
阿新 • • 發佈:2019-01-05
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映象
- 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