zoukankan      html  css  js  c++  java
  • dokcer入门

    背景:

    由于最近在做基于Headless chrome + Robotframework + Docker +Jenkins架构的web自动化测试的预研工作,其中涉及到web自动化持续集成,需要搭建自动化测试环境;在经历了很多痛苦的尝试后,发现以前服务器上的Docker镜像不再适用,无法满足目前的web自动化测试环境,所以着手学习下Docker并部署适用于项目的web自动化测试的镜像。

    Docker简介

    一、什么是Docker

    定义Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。

    功能Docker可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布任何流行的Linux机器上,也可以实现虚拟化。

    机制:容器完全是沙箱机制,相互之间不会有任何接口(类似于iPhoneapp),更重要的是容器开销极低。

    二、Docker的应用场景

    1、web应用的自动化打包和发布

    2、自动化测试和持续集成、发布

    3、在服务型环境中部署和调整数据库或其他的后台应用

    4、从头编译或者扩展现有的OpenShiftCloud Foundry平台来搭建自己的PAAS环境

    Docker架构

    ·Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器

    ·Docker容器通过Docker镜像来创建

    ·Docker中的镜像和容器类似于面向对象编程中的类和对象

     

     

     

    Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。

    Docker 容器(Container):容器是独立运行的一个或一组应用。

    Docker 客户端(Client):Docker客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) Docker 的守护进程通信。

    Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

    Docker 仓库(Registry):Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。

    Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用

    Docker Machine:Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBoxDigital OceanMicrosoft Azure

    Docker安装

    一、Docker支持以下的Ubuntu版本:

    ·Ubuntu Precise 12.04 (LTS)

    ·Ubuntu Trusty 14.04 (LTS)

    ·Ubuntu Wily 15.10

    ·Xenial 16.04 (LTS)

    ·其他更新的版本

    注:如需安装Docker CE需要16.04以上(不包含16.14)的版本

    使用以下命令可以查看你的Ubuntu系统的版本:

    命令:cat etc/issue

    Docker1.13以后有两个版本,分别是CEEECE是开源的社区版本、EE是收费企业版本

    查看Docker版本:

    命令:docker --version

    二、前置条件

    Docker要求Ubuntu系统的内核版本高于3.10,首先得验证你的Ubuntu系统内核版本是否支持Docker

    命令:uname -r

    如上在终端上敲入相应命令查询到我的Ubuntu系统的内核版本是4.13版本

    三、使用脚本安装Docker

    1、获取最新版本的Docker安装包

    命令:wget -qO- https://get.docker.com/ | sh

    Sh命令的作用是执行.sh脚本或是切换到sh这个bash里,Linux默认的shellbash

    这里的sh就是后面这个用处

    输入当前用户密码后,系统会自动下载脚本并安装Docker及依赖包

    安装完成后有个提示:

     If you would like to use Docker as a non-root user, you should now consider

        adding your user to the "docker" group with something like:

     

        sudo usermod -aG docker runoob

       Remember that you will have to log out and back in for this to take effect!  

    当要以非root用户可以直接运行docker时,需要执行 sudo usermod -aG docker name 命令,然后重新登陆,否则会报错

    2、启动Docker后台服务

    命令:sudo service docker start

    部署属于自己的镜像

    一、操作步骤

    前言:镜像的制作主要分为三个部分

    1、获取基础镜像(docker pull

    2、基于基础镜像制作所需的镜像

    3、将镜像推送到制品库进行保存(docker push

    二、制作镜像的方法

    制作镜像主要有两种方法,第一种使用commit命令制作,第二种使用dockerfile制作,下面来简单的谈一谈这两种方法的优缺点。

    Commit:使用此方法方便开发者调试,但不方便过程的记录,可复制性远差于dockerfile

    DockerfileDockerfile是描述镜像制作过程中的文件,记录了制作镜像的过程,方便以后更改或者镜像丢失后重新构建

    一、Docker commit制作镜像
    1、基于基础镜像创建容器

    ·获取基础镜像:可以从docker hub或第三方网站拉取镜像到本地

    命令:docker pull [options] <dir_name>.<realm_name>:<tag>

    Options说明:

    -a:拉取所有tagged镜像

    --disable-content-trust:忽略镜像的校验,默认开启

    实例:docker pull docker hub xxxx:v1

    从网上拉取基础镜像后使用docker images命令,查看本地服务器是否有已拉取的

    基础镜像:

    ·基于基础镜像创建容器

    基于上面已经pull下来的镜像制作一个容器

    命令:docker run [options] image [command]

    实例:docker run --privileged --name=qinjiaxi_web_test --net=host -it -v ~:/share docker hub xxxx:v1

    2、在容器中安装需要的应用

    关于这一块每个项目或者说每个人的需求都不一样,因此安装的应用程序和环境必然不会想相同,这里无法统一的进行硬性规定,只进行简单的说明。

    这里主要用到apt这个命令

    如:安装python软件:

    命令:apt install python

    当然需要安装的东西比较多,而且有些软件还有自己的依赖包,在安装主软件的同时优先进行依赖包的安装否则无法安装主软件,这里有个强制安装依赖包的命令供大家参考:apt -f install。

    3、commit容器创建镜像到本地

    命令:docker commit [opions] containerid <repository>:<tag>

    Options说明:

    -a:提交的镜像作者

    -m:提交时的说明文字

    -p:在commit时,将容器暂停

    实例:docker commit -a “qinjiaxi” -m “web_ci_test” qinjiaxi_web_ci:web_ci_20190822

    通过以上命令创建完成后,使用docker images命令查看本地镜像,就可以看到上面的镜像被commit到本地了。

    注:保存在本地的镜像repository可以随便写,但是如果想推到网络上去就需要按照规定的格式来编辑,这里提供两种方法:

    1、修改已有本地镜像的repository和tag名称(镜像重命名):

    命令:docker tag <image id> <new repository>:<new tag>

    实例:docker tag 2d440113d507 zxxxxxx-xxxx-docker.xxxx.com.cn/webci/qinjiaxi_web_ci:web_ci_20190822

     

    2、commit的时候就按照规定格式来创建镜像

    在上面第三部中就按照以下格式来commit:

    实例:docker commit -a “qinjiaxi” -m “web_ci_test”  zxxxxxx-xxxx-docker.xxxx.com.cn/webci/qinjiaxi_web_ci:web_ci_20190822

     

     

    4、将本地镜像push到制品库

    命令:docker pull [options] <dir_name>.<realm_name>:<tag>

    Options说明:

    --disable-content-trust:忽略镜像的校验,默认开启

    实例:docker push zxxxxxx-xxxx-docker.xxxx.com.cn/webci/qinjiaxi_web_ci:web_ci_20190822

    至此:commit方式制作镜像已经完成。

    下面附上docker commit中常用的dokcer命令:

    command

    describe

    docker images

    查看本地所有镜像(可加上grep分支来筛选,如:docker images|grep qinjiaxi)

    docker ps

    查看正在运行的容器(加上-a查看全部的容器,也可加上grep分支来筛选)

    docker start

    启动一个容器(后面必选项为container_name or container_id)

    docker attach

    运行一个容器(后面必选项为container_name or container_id)

    docker pull

    从制品库中下载基础镜像

    docker push

    将本地镜像推送到制品库中

    docker rm

    移除本地已有容器(后面的必选项为container_name or container_id)

    docker rmi

    移除本地已有镜像(后面的必选项为image_name or image_id)

    docker tag

    对镜像进行重命名

    二、dockerfile方式制作镜像(强烈推荐)
    dockerfile常用命令:

    COMMAND

    FROMAT

    DESCRIPTION

    FROM

    FROM <REPOSITORY>:<TAG>

    指定基础镜像,必须为第一个命令

    MAINTAINER

    MAINTAINER <NAME>

    维护者信息

    RUN

    RUN <COMMAND>

    镜像容器中运行命令

    ADD

    ADD <SCR> <DEST>

    将本地文件添加到容器中,tar格式自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

    COPY

    COPY <SCR> <DEST>

    复制本地文到容器中,压缩格式文件不会进行解压

    CMD

    RUN <COMMAND>

    指定在容器启动时所有执行的命令

    ENV

    ENV <KEY> <VALUE>

    设置环境变量

    WORKDIR

    WORKDIR <WORK_DIR>

    工作目录,类似于cd命令

    Dockerfile实例:

    1本机创建一个新目录,取名dokcer_build

    命令:mkdir docker_build

    2、将dockerfile文件复制到dokcer_build目录

    命令:cp  dockerfile.txt /docker_build

    3、进入docker_build目录执行创建命令

    命令:cd docker_build

      docker build -f dockerfile.txt -t web_ci_test:v1 -q .

    para

    description

    f

    指向任何路径下的dockerfile文件

    t

    指定生成镜像的名称,包含仓库名称和标签名称

    q

    quiet模式减少无用的打印

    .

    制作镜像时资源文件的路径,即当前目录,需要将制作镜像中用到的资源放入当前目录下

    执行docker build命令后,如果未报错,即镜像制作成功。
    过程详解:
    执行docker build命令后,首先上传dockerfile文件到docker进程,因为所有的操作都要依据dockerfile来进行。然后dockerfile中指令被一条条的执行,每一步都创建了一个新的容器,在容器中执行命令并提交修改(跟之前的commit制作镜像是一样的过程)。当dockerfile文件中的所有指令执行完毕后,返回最终的镜像ID,所有中间步骤产生的容器都被删除和清理。
    附上dockerfile中的相关指令的图表解释:

     

    总结

    学到这里大家应该也忘记的差不多了,是时候该放弃docker学习(开个玩笑),最后对以上的知识进行一个总结:本文从docker的基本概念、架构、安装调试、以及镜像制作四个维度进行了讲解和说明,期间有涉及到部分实例,实践和理论的相结合更容易让大家接受和运用,相信对后期开发中应用到docker场景的同学有所帮助。

  • 相关阅读:
    POJ 3140 Contestants Division (树dp)
    POJ 3107 Godfather (树重心)
    POJ 1655 Balancing Act (树的重心)
    HDU 3534 Tree (经典树形dp)
    HDU 1561 The more, The Better (树形dp)
    HDU 1011 Starship Troopers (树dp)
    Light oj 1085
    Light oj 1013
    Light oj 1134
    FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
  • 原文地址:https://www.cnblogs.com/qinlangsky/p/11422560.html
Copyright © 2011-2022 走看看