docker基础实战

本文介绍了Docker,它是开源软件部署方案和轻量级应用容器框架,能打包、发布、运行应用,具有启动快、资源占用小等特点。还阐述了容器技术给开发和自动化测试带来的好处,如降低环境依赖风险等。此外,详细说明了Docker的安装和建立容器的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1 docker是什么?

docker是什么:

docker是一个开源的软件部署解决方案;

docker也是轻量级的应用容器框架;

docker可以打包、发布、运行任何的应用。

如果物理机是一幢住宅楼,虚拟机就是大楼中的一个个套间,而容器技术就是套间里的一个个隔断。不难理解,Docker 作为一种隔断,它并不能基于一种内核(Linux)提供另一种内核(Windows)的虚拟化运行环境。所以,基于 Linux 的 Docker 是不支持运行 Windows 应用的。docker相比KVM之类最明显的特点就是启动快,资源占用小

限制:linux 32位系统不支持docker,需64位系统支持

自动化测试如果已经运行在虚拟机中了,还有没有使用Docker改造它的必要需要具体去分析,并不是所有测试任务都需要使用Docker技术,当前虚拟机已经轻松满足测试需求就没有必要再投入成本改造了,如果自动化测试从安装部署到执行完毕这个过程耗费的时间成本较大,还是有必要研究下哪些方面耗时严重,是否是Docker能解决的。

容器技术给开发带来的好处:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。在容器技术面世以前,开发在开发环境调试正常的代码,可能在测试环境和生产环境上不一定能正常,经常会出现多种环境导致的问题,容器技术可以很好地解决这个问题:把代码放到容器中运行OK,将该容器又制作成镜像,在测试或生产环境将镜像pull下来制作成容器运行,则完全不会出现由于环境引起的问题。容器是作为一个进程级别的操作系统,与整体的外在环境隔离

方便回退版本,版本回退是一个很苦恼的事情,需要花上一些时间和精力,如果使用容器技术则不用担心版本回退,直接回退就好。

 

本宝宝总结了自动化测试引入容器技术的几点好处:

①降低环境依赖风险:

自动化环境下载自动化代码后,环境中缺少某些自动化代码的依赖包,有可能是python的某些模块也有可能是shell的某些应用工具还有可能是java的某些jar包,不同的测试代码依赖的资源都不相同(可能你们会选择把拉取相应包的步骤也写在了测试代码中,运行时先拉取一遍,但是这样并不能保证每次都拉取成功,不同的环境可能导致失败的原因不同)而docker可以改善这个问题,docker可将“装修”好的容器制作成镜像,到任何一个可安装docker的环境下都可以把镜像拉下来制作成之前“装修”好的容器。

②部署迅速:

不用担心运行环境,即一个有你曾经引入的依赖包或者工具的环境,而且这个环境可以复制多个,到任意一个支持docker的系统把镜像拉取下来生成容器

③用例脚本并发执行:

同一个镜像可创建多个容器,多个容器是进程隔离的,可在一台主机并发执行,提高CPU利用率。提高执行效率,环境释放清理依赖程序员的技能,在每个测试用例都有清理函数负责资源回收和环境恢复,如果程序员技术不高,就可能造成资源回收不彻底,测试环境受污染,如果使用docker,环境清理由docker接管,执行完任务后可删除容器,即使不写清理函数也可以实现资源清理(这里不是倡导抛弃优良的代码技能然后依赖容器技术,而是有多少成本做多少事情,在时间资源都有限的情况下选择一个高效的方法解决问题,如果头痛很久的环境问题可以转变下策略考虑下容器技术)

 

接下来进入正题。

2 docker的使用

一 安装docker

安装Docker的预备条件:

1、64位CPU架构的计算机。(暂不支持32位)

2、Linux3.8以上内核。

3、内核至少支持其中一种存储驱动:Device Manager(默认); AUFS; vfs; btrfs。

4、内核必须支持并开启cgroup和namespace功能。

 

 

 

 

下载docker:

网上有教程使用了该指令:yum install docker-io,这句话是用源安装docker,这个源是国外的源,如果用这个命令GFW被墙,无法安装,如果没有翻墙,则用以下的地址(没有yum的系统可以用wget,或者先装个yum):

 

$ yum install https://get.docker.com/rpm/1.7.1/centos-7/RPMS/x86_64/docker-engine-1.7.1-1.el7.centos.x86_64.rpm

 

显示安装好了,

启动docker使用指令:

$ service docker start

启动docker 成功:

查看docker版本使用指令:

$ docker version

 

可以使用docker --help查看使用docker都有哪些指令。

 

二 建立docker容器:

Image文件--即镜像文件

Docker把应用程序及其依赖打包在一个image文件里面,可以理解为一个容器的说明书. 通过这个image文件可以生成容器的实例.同一个image文件可以生成同时运行的多个实例.

image文件是一个二进制文件,实际上,一个image文件往往继承自另外一个image文件,加上一些个性化设置而成.举例来说:你可以在ubuntu的image基础上加上Apache服务器,形成你自己的image.

 

列出本机的所有 image 文件:

$ docker images

可以看到当前是没有任何一个镜像文件的

image文件是通用的,一台机器上的image文件拷贝到另一台机器上,照样可以使用.一般来说,我们往往是使用别人制定好的image文件,及时要定制,也可以对已有的image文件进行加工,而不是从头制作,这样可以节省很多时间。

我们通过最简单的 image 文件“hello world”,感受一下 Docker,首先,运行下面的命令,将 image 文件从仓库抓取到本地:

$ docker pull library/hello-world

上面的代码中,docker pull 是抓取image文件的命令,library/hello-world是image文件在仓库里面的位置,其中library是image文件所在的组,hello-world是image文件的名字。由于Docker官方提供的文件都放在library组里面,所以他是默认组,可以省略.因此上面的命令可以写成下面这样:

$ docker pull hello-world

抓取成功后就可以看到本地的image文件了:

 

docker images 查看下:

运行这个容器:

$ docker run hello-world

 

docker run 会从一个镜像文件中生成一个容器实例并且运行它.注意,具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker pull命令并不是必需的步骤。待上面那段提示输出后,hello-world就会停止运行,容器就会终止。有些容器不会终止,因为提供的是服务,比如安装unbuntu的image,就可以在命令行体验unbutu系统。

对于那些不会自动终止的容器,须使用docker kill [container_id]来终止。

 

https://hub.docker.com/

可以注册一个自己的docker帐号,其实就是仓库,和GitLab一样的道理,只不过GitLab仓库托管的是代码,docker仓库托管的是docker镜像,两个作用:

  1. 这个镜像到任何装了docker的环境都可以拉下来制作成容器

2、自己的容器经过“装修”后可以制成新的镜像push到docker镜像仓库

 

我们从https://hub.docker.com/找一个ubantu镜像pull下来玩一玩:

 

 

就选这个好了。

$ docker pull boystar/ubantu

 

docker run -it boystar/ubantu /bin/bash

这个表示使用这个boystar/ubantu 镜像启动容器,并开启了一个终端。

-i, –interactive=false Keep STDIN open even if not attached

-t, –tty=false Allocate a pseudo-TTY

可以看到执行run以后 已经

 

 

 

 

 

 

 

 

 

 

目标:

查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息。

提示:

可以使用镜像id的前面部分,不需要完整的id。

正确的命令:

$ docker inspect efe

 

 

Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS 会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多 个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。

那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker commit 命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git commit命令。 

 

 

 

发布自己的镜像

目标:

把learn/ping镜像发布到docker的index网站。

提示:

1. docker images命令可以列出所有安装过的镜像。

2. docker push命令可以将某一个镜像发布到官方网站。

3. 你只能将镜像发布到自己的空间下面。这个模拟器登录的是learn帐号。

预期的命令:

$ docker push learn/ping

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Riven_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值