dokcer入门
背景:
由于最近在做基于Headless chrome + Robotframework + Docker +Jenkins架构的web自动化测试的预研工作,其中涉及到web自动化持续集成,需要搭建自动化测试环境;在经历了很多痛苦的尝试后,发现以前服务器上的Docker镜像不再适用,无法满足目前的web自动化测试环境,所以着手学习下Docker并部署适用于项目的web自动化测试的镜像。
Docker简介
一、什么是Docker
定义:Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。
功能:Docker可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布任何流行的Linux机器上,也可以实现虚拟化。
机制:容器完全是沙箱机制,相互之间不会有任何接口(类似于iPhone的app),更重要的是容器开销极低。
二、Docker的应用场景
1、web应用的自动化打包和发布
2、自动化测试和持续集成、发布
3、在服务型环境中部署和调整数据库或其他的后台应用
4、从头编译或者扩展现有的OpenShift或Cloud 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,比如VirtualBox、 Digital Ocean、Microsoft 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
Docker在1.13以后有两个版本,分别是CE和EE,CE是开源的社区版本、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默认的shell是bash
这里的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
Dockerfile:Dockerfile是描述镜像制作过程中的文件,记录了制作镜像的过程,方便以后更改或者镜像丢失后重新构建
一、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场景的同学有所帮助。
dokcer入门的更多相关文章
- Docker入门简明教程
Docker简介 概念 Docker是基于Go语言实现的云开源项目,是基于Linux的多项开源技术提供高效.敏捷和轻量级的容器方案.创建于2013年初.自从开源后就受到了广泛的关注,从长远的眼光来看, ...
- 学习 Docker - 入门
Docker简介 一种虚拟容器技术. 一种虚拟化分方案: 操作系统级别的虚拟化: 只能运行相同或相似内核的操作系统: 依赖与linux内核特性:Namespace和Cgroups(Control Gr ...
- Docker 入门实践
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法 ...
- 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World
操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...
- Docker入门基础(一)
Docker入门基础 Linux只存在文件目录,不存在“盘”的概念 Dockers优点:方便部署环境.资源占用少(微服务) Docker的三大概念 镜像:类似虚拟机的镜像.用俗话说就是安装文件.容器: ...
- Docker入门学习总结
1. 什么是Docker Docker是一种虚拟化技术,其在容器的基础上进一步封装了文件系统.网络互联.进程隔离等等,从而极大地简化了容器的创建和维护.Docker使用 Google 公司推出的 Go ...
- Docker系列之.NET Core入门(三)
前言 在Docker生态系统中除了上一节所讲解的基本概念,还有其他专业术语,本文我们将一笔带过,同时会开始陆续进入到在.NET Core中使用Docker. 专业术语 Docker Engine(Do ...
- docker入门实例(转载)
1.Docker 是什么?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上( 摘自百度 ) ...
- docker技术入门(2)
接上一篇文章 [容器技术]Docker容器技术入门(一) 今天接着上次聊一聊有关Docker网络.数据存储相关的技术点 Docker网络模式 01 Dokcer 通过使用 Linux 桥接提供容器之间 ...
随机推荐
- Win10桌面美化
捯饬了几个小时终于捯饬好了,没什么特效,就是看起来干净了许多. 用到的小软件: 链接:https://pan.baidu.com/s/1_PSTn0JZ22ZGiMDOdvdWEw提取码:329c 1 ...
- WFS: postgresql(postgis)和shp文件查询效率对比
对GeoServer上的WFS的各种数据源查询效率感兴趣,做个测试.本次测试了Postgresql.geopackage.shp文件三种数据源的查询效率,无论是本机还是服务器环境,pg存储查询效率都比 ...
- Scrapy爬虫框架(2)--内置py文件
Scrapy概念图 这里有很多py文件,分别与Scrapy的各个模块对应 superspider是一个爬虫项目 spider1.py则是一个创建好的爬虫文件,爬取资源返回url和数据 items.py ...
- mysql面试(1)
一一个 SQL 执行行行的很慢,我们要分两种情况讨论:1.大大多数情况下很正常,偶尔很慢,则有如下原因(1).数据库在刷新脏⻚页,例例如 redo log 写满了了需要同步到磁盘.(2).执行行行的时 ...
- JDK11的重要新特性
文章目录 JDK11发布啦 Oracle不再提供JRE和Server JRE下载 删除部署工具 JavaFX不再包含在JDK中 删除Java EE和CORBA模块 JDK11发布啦 JDK11 在20 ...
- MySQL简介和安装
一.关系型数据库初识 1.1 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我 ...
- Spring Boot 静态文件,请求不到,util文件夹
静态文件貌似对util文件夹有特殊处理static/js/test.js 可以请求到static/js/laydate/test.js 可以请求到static/js/util/test.js 请求不到
- 刚听完CSDN总裁蒋涛先生的学术报告
主题: 二十年程序人生和我的人才观 第一次参加所谓的"学术报告", 但感觉更多的是蒋总在跟我们分享他个人的成长经验. 按蒋总的话说, 他已经从2000年开始不碰怎么技术了, 所以个 ...
- 如何在Vue项目中优雅的使用swiper插件
个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 开始之前,请先确保有一个基于webpack模板的项目(vue-cli脚手架 ...
- USACO Training Section 1.1黑色星期五Friday the Thirteenth
题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...