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裡面給出了下載地址。以本文為例,地址為:
以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 週日上午