1. 程式人生 > >docker實踐錄1:使用dockerhub中轉站下載k8s安裝壓縮包

docker實踐錄1:使用dockerhub中轉站下載k8s安裝壓縮包

最近,領導讓我重新搞k8s,我想後臺服務進入了除錯階段,沒多少新的功能添加了,就決定重新部署。k8s版本更新太快了,最新穩定的版本是1.11.2,以前部署的是1.9版本,現在要使用最新的版本部署。
不過,第一步下載安裝包就沒法正常進行了,因為眾所周知的原因,對於一些外面的網站是無法正常訪問的。在下班路上,突發奇想,可以嘗試用dockerhub做中轉,將下載的壓縮包放到docker映象裡,然後再拉取映象,這樣就可以達到目的了。於是利用週末時間研究一下。

問題

k8s下載頁面為:https://github.com/kubernetes/kubernetes/releases。但是提供下載的kubernetes.tar.gz只是下載真正安裝包的指令碼而已,執行指令碼才會下載安裝包。而真正安裝包在CHANGELOG-1.11.md裡面給出了下載地址。以本文為例,地址為:

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#v1112
以server端為例,下載地址為:https://dl.k8s.io/v1.11.1/kubernetes-server-linux-amd64.tar.gz,實際為https://storage.googleapis.com/kubernetes-release/release/v1.11.1/kubernetes-server-linux-amd64.tar.gz,無論是哪個,都無法正常下載。

原理

dockerhub伺服器位於國外,能訪問google相關的網站,而其支援Dockerfile自動構建,因此使用ubuntu基礎映象,再用wget下載壓縮包,如果成功,壓縮包就在docker映象裡面了,然後用docker pull命令拉取下來,執行容器,就能拿到壓縮了。
下面給出實現方式。

實現

首先,編寫Dockerfile,內容如下:

FROM ubuntu:16.04

LABEL maintainer Late Lee([email protected].org)

RUN apt-get update || true && \
    apt-get install -y \
    curl wget \
    pkg-config && \
    rm -rf /var/lib/dpkg/info/* /var/lib/apt/lists/*

RUN wget -c https://storage.googleapis.com/kubernetes-release/release/v1.11.2/kubernetes-server-linux-amd64.tar.gz

RUN wget -c https://storage.googleapis.com/kubernetes-release/release/v1.11.2/kubernetes-client-linux-amd64.tar.gz

RUN wget -c https://storage.googleapis.com/kubernetes-release/release/v1.11.2/kubernetes-node-linux-arm64.tar.gz

CMD ["/bin/bash"]

內容十分簡單,安裝wget,然後用wget下載,預設情況下,檔案下載到根目錄,即“/”目錄。
將Dockerfile提交到github上,然後在hub.docker建立自動構建專案,關聯Dockerfile後,手動構建,再次提交Dockefile進行自動構建,等待其完成。

驗證

本文構建成功的映象地址為:https://hub.docker.com/r/latelee/k8s/。已經構建成功,下面拉取這個映象。

$ docker pull latelee/k8s:1.11.2
Using default tag: latest
latest: Pulling from latelee/ubuntu-google
3b37166ec614: Pull complete 
504facff238f: Pull complete 
ebbcacd28e10: Pull complete 
c7fb3351ecad: Pull complete 
2e3debadcbf7: Pull complete 
95389de21fec: Pull complete 
07837e23aeae: Pull complete 
6c17d9f343d5: Pull complete 
f04501ba251e: Pull complete 
Digest: sha256:47550e700d17c586763e25759938847308f855367924dc5a3cc5e76c03f172a1
Status: Downloaded newer image for latelee/k8s:1.11.2

再執行這個映象:

$ docker run -it -v /home:/home --rm latelee/k8s:1.11.2 bash
root@8fa1786a1f5a:/# ls
bin   etc                                   kubernetes-node-linux-arm64.tar.gz    lib64  opt   run   sys  var
boot  home                                  kubernetes-server-linux-amd64.tar.gz  media  proc  sbin  tmp
dev   kubernetes-client-linux-amd64.tar.gz  lib                                   mnt    root  srv   usr

拷貝這些映象到宿主機目錄,然後退出。

root@8fa1786a1f5a:/# cp *.gz /home/latelee/docker/k8s/kubernetes
kubernetes/        kubernetes.tar.gz  
root@8fa1786a1f5a:/# cp *.gz /home/latelee/docker/k8s/          
root@8fa1786a1f5a:/# exit
exit

為了驗證其準確性,託關係找網友幫忙下載,然後進行md5sum校驗,結果如下:

latelee@ubuntu:~/docker/k8s$ md5sum kubernetes-server-linux-amd64.tar.gz 
89fa567b0e20bb2ac952512a985419fe  kubernetes-server-linux-amd64.tar.gz
latelee@ubuntu:~/docker/k8s$ md5sum other/kubernetes-server-linux-amd64.tar.gz 
89fa567b0e20bb2ac952512a985419fe  other/kubernetes-server-linux-amd64.tar.gz

md5一致,說明方法可行。

擴充套件

github可免費託管程式碼,其提供github pages功能,可以構建自己的網站,如果擁有自己的域名,可以將域名通過CNAME指向github,這樣不需要購買主機。再利用jekyll或hexo,使用markdown寫部落格,然後提交到github上,通過CI將自動生成網站文章。
travis CI作為免費的CI網站,與github結合,達到CICD的目的,通過personal key或ssh金鑰,可以訪問github或自己主機。
dockerhub可免費託管自己的映象,其與github或bitbucket可以很好結合,這樣,就可以使用github託管Dockerfile檔案,配置正確後,每次更新github,都會自動構建映象。dockerhub伺服器位於國外,可以正常訪問google。

以上,都與github有密切關係,這些都是公開的,任何人可訪問,因此,涉密的內容不可上傳。原則堅持涉密不上網,上網不涉密。

小結

接觸了docker將近一年,發現視野開闊了很多,思路也活躍了不少,很多東西應用docker後十分方便簡單。另外現在有很多網站提供PaaS或SaaS服務。如果能好好利用,則會讓自己技能大大提升。

隔了幾天的PS:過後使用瀏覽器和wget下載文中的檔案,能正常下載。因此,本文的方法僅供參考。

李遲 2018.9.9 週日上午