docker实践录1:使用dockerhub中转站下载k8s安装压缩包

版权声明:本文为迟思堂主人李迟原创文章,版权所有。可随便任意使用(包括学习研究商用),但由此带来的成果或后果,概与作者无关。胡乱修改的,不注明出处的,概不负责。 https://blog.csdn.net/subfate/article/details/82555870

最近,领导让我重新搞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(li@latelee.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 周日上午

猜你喜欢

转载自blog.csdn.net/subfate/article/details/82555870