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

Posted leemouren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了离线服务器下docker的部署与应用相关的知识,希望对你有一定的参考价值。

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

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

我为什么使用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

    首先通过-v将本地的/root/app目录挂载到镜像中的/app目录,之后再通过--entryponit指定运行入口为/app/start.sh。
    有了这样的用法,我们可以通过Dockerfile建立一个包含各种运行环境的基础镜像,通过这样的方式,测试我们自己的小程序(虽然应用场景有限)。当然还是要牢记文章开头所说的,docker是需要基于物理机的内核。

本文主要叙述了一些简单的docker使用场景,若果个别地方有错误,请不吝指出。

以上是关于离线服务器下docker的部署与应用的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7.3服务器内网离线部署docker和容器

离线手动部署docker镜像仓库——harbor仓库

离线手动部署docker镜像仓库——harbor仓库

微服务架构 - CentOS7离线部署docker

精简docker镜像的建议

Docker构建和Web应用部署