dokcer入门

背景:

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

Docker简介

1、什么是Docker

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

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

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

2、Docker的应用场景

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

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

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

四、从头编译或者扩展示有的OpenShiftCloud Foundry平台来搭建本身的PAAS环境编程

Docker架构

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

·Docker容器经过Docker镜像来建立bash

·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安装

1、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

 

2、前置条件

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

命令:uname -r

 

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

 

3、使用脚本安装Docker

一、获取最新版本的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 命令,而后从新登录,不然会报错

二、启动Docker后台服务

命令:sudo service docker start

部署属于本身的镜像

1、操做步骤

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

一、获取基础镜像(docker pull

二、基于基础镜像制做所需的镜像

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

2、制做镜像的方法

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

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

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

1、Docker commit制做镜像
一、基于基础镜像建立容器

·获取基础镜像:能够从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

 

二、在容器中安装须要的应用

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

这里主要用到apt这个命令

如:安装python软件:

命令:apt install python

固然须要安装的东西比较多,并且有些软件还有本身的依赖包,在安装主软件的同时优先进行依赖包的安装不然没法安装主软件,这里有个强制安装依赖包的命令供你们参考:apt -f install。

 

三、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能够随便写,可是若是想推到网络上去就须要按照规定的格式来编辑,这里提供两种方法:

一、修改已有本地镜像的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

 

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

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

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

 

 

 

 

四、将本地镜像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

对镜像进行重命名

 

 

2、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

三、进入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场景的同窗有所帮助。

相关文章
相关标签/搜索