离线服务器下docker的部署与应用

一分钟内形成docker的模糊概念

网上很多文章避免将docker与虚拟机混为一谈,但对于初学者来说,完全可以将docker当做一种虚拟机技术,只需要牢牢记住一点最重要的区别:docker依赖于物理机的内核,所以在linux下“生成的docker”,一般不能直接在windows下运行。(虚拟机是完完全全模拟了一台物理机,这是一个很大的区别)。
当你有了这样的一个模糊概念,接下来只需要快速了解docker的三个基础组成部分,仓库、镜像、容器,就可以快速的应用起来。类比虚拟机,镜像就相当于安装虚拟机时用的iso文件,仓库自然就是一个官方存放镜像的地方,方便用户直接“下载”,当你的虚拟机运行起来后,就相当于一个容器

离线服务器下docker的部署与应用

我为什么使用docker,需求是什么

在很多项目中,我们需要对一些url进行定时拨测,获取这些url的各种指标,例如响应时间、渲染时间等等,网上有许多开源的工具供我们挑选使用,sitespeed就是其中之一。sitespeed可以对访问过程进行度量,形成各种指标。访问过程进行录相、截图。指标分为浏览(体验)类指标、评分指标、DNS指标等几个维度。关于sitespeed更为详细的介绍可自行搜索。
然后由于其使用图形界面的浏览器,不太适合做为服务端程序运行,同时其各种依赖库的安装配置较为麻烦,故以docker的方式运行是比较合适的。https://www.sitespeed.io/在sitespeed.io的官方介绍上也指出所提供的docker镜像部署了所有的运行环境,对于用户只需直接使用即可。

离线安装docker:部署yum源或者rpm/deb包安装

对于某些特定环境,服务器是不允许访问互联网的,因此不能直接从软件源下载docker进行安装,这就造成了很多依赖包安装的麻烦。在此可以有几种不同的离线安装方式可供选择:

对于ubuntu系统,你只需一台联网的同环境的虚拟机就可以得到deb安装包和所有的依赖包
apt-get install --download-only docker这条命令的具体用法可以自行搜索,解决令人头疼的依赖问题简直舒服。

对于centos系统,同样可以搜索所有的依赖包,通过rpm包的方法安装。但更加推荐部署本地yum源的方式,简单高效一劳永逸,部署步骤可自行搜索。

镜像文件的导入导出

不能访问互联网,意味着docker提供的官方仓库也不可访问,因此需要我们在本地虚拟机docker pull sitespeed.io相应的镜像,可以简单测试是否可用。

[~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/hello-world latest e38bc07ac18e 7 weeks ago 1.85 kB docker.io/sitespeedio/sitespeed.io latest 38463a656de8 8 weeks ago 1.77 GB [~]$ docker run hello-world Hello from Docker!

通过docker images看到本地存放了两个镜像,docker run *命令可以简单的在某个镜像文件基础上启动一个容器。
接下来要做的就是将镜像文件使用save命令导出为tar文件:
docker save 38463a656de8> /root/sitespeed.tar
通过物理设备传输至离线服务器上,通过load命令导入镜像:
docker load < /root/sitespeed.tar
导入完成后,用docker images命令查看,惊奇的发现REPOSITORY和TAG列均为,所以save命令保存的并不是所有的信息,具体的区别自行搜索即可。不过不影响使用,我们只要修改一下就可以正常使用了。
docker tag 38463a656de8 docker.io/sitespeedio/sitespeed.io:latest

docker镜像是如何制作的

基于docker提供的服务,我们想要制作自己特定功能的docker镜像,只需要按照格式编写一个Dockerfile文件即可。一个简单的Dockerfile如下:

FROM ubuntu14.04 COPY start.sh /start.sh RUN apt-get install -y gcc CMD ENTRYPOINT ["/start.sh"]

FROM命令用于指定一个基础镜像(当然可以指定一个空镜像scratch),COPY和RUN都是字面意思,CMD和ENTRYPOINT 指定docker启动时的运行命令,关于二者的区别,在此不细说,推荐使用ENTRYPOINT。
编写完成后,运行命令:docker build -t my_name:my_tag
通过docker images命令就可以看到本地已经有了刚刚创建的镜像,通过
docker run my_name:my_tag就可以启动并运行。
不得不提的是,Dockerfile中的每一条命令都会创建一个临时层,(类似于套娃的感觉)所以要注意命令的书写方式,比如多条RUN命令合为一条书写。同时,减少不必要的操作。例如,新建一个文件,在后面步骤又删除了,这样两次操作都会存储在最终的docker镜像中,生成镜像的体积也会增大,这就是网上一些不成熟的镜像体积很大的原因。
关于docker启动时的很多参数都可以自己按需查找,个人觉得-v和--entrypoint参数结合使用,会对大家测试一些小东西很有帮助。

-v 指定一个本地目录挂载到容器中指定位置 --entrypoint 指定docker运行入口,覆盖Dockerfile中的CMD和ENTRYPOINT

例如:

docker run --entrypoint /app/start.sh -v /root/app:/app docker_img.io

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgdjj.html