你好 我是懂java的测试
前言
当前容器已被广泛使用,很多公司都会用docker用来部署测试环境和生产环境;求职面试中,面试官对docker情有独钟;
学好docker这门技术,一方面可以在面试中体现自己的知识广度,另一方面使用docker技术在工作中处理一些棘手问题就会变得得心应手;
由于docker技术涉及到的东西很多,所以本系列文章不会面面俱到,只会分享在面试或工作中能使用到的技术;
文章分为上下两篇,主要讲述docker的基本概念、基本命令的使用和一些常用的高阶知识。
docker是什么?
任何一门技术肯定是为了解决某个问题而出现的,学习一门技术之前,可以先想想这门技术的出现解决了什么问题,因此在理解docker之前,可以先想想用docker之前怎么部署项目的?
这里以部署java的spring框架项目为例,找一台物理机、安装虚拟软件以后,再虚拟一个虚拟机出来,在虚拟机中搭建jdk、maven、tomcat(springboot内部镶嵌了tomcat)、redis等基础环境,然后打包项目成一个war包丢入Tomcat中,启动tomcat。
一切看着很方便,但是假如生产环境并发量很大,急需扩容几台虚拟机,是不是还得重复上述过程?扩容的同时,既要保证基础软件版本一致,又要保证大量配置文件正确,太耗时耗力。
不知道大家有没有遇到一种场景,就是在开发中,一般都会遇到相同的代码在自己的电脑上可以运行,但是当把项目打包发送给其他人的时候,相同的代码在别人的电脑上却不能运行,为啥?这是因为项目中使用到的一些技术的的版本不同的原因,例如mysql数据库的版本,java、jdbc等技术驱动包的不同,都会导致项目无法运行。
除此之外,虚拟机资源成本很高的,每个项目都独立使用一个虚拟机资源,空闲期有点浪费,另外虚拟机启动一次真的很耗时。
那么怎么解决上述问题呢?docker可以,首先我们可以使用docker,把项目打成镜像(image),包含了运行环境和配置,上传到仓库中,然后其他虚拟机使用的时候拉取镜像,运行容器即可,速度极快,资源利用率得到极大提升,真正做到“一次镜像,处处运行”。
那么docker和虚拟机有什么区别?
docker 架构是什么样的?
如下截图,Docker 使用的是 C/S 架构,Docker Client 用于和 Docker 的守护进程通信(守护进程就是 Server),守护进程可以用来构建、运行和分发 Docker 容器等操作。Docker Client 和守护进程可以在同一系统上运行,或者将 Docker Client 远程连接到守护进程。使用 REST API
协议,并通过 UNIX
套接字或网络接口进行通信。另一个 Docker Client 是 Docker Compose(允许我们将一组容器组成的应用程序)
docker 三大核心是什么?
这里要说的 Docker 三大核心,分别是 image
镜像container
容器,repository
仓库;这可以说是 Docker 最重要的部分。
1)镜像
Docker 镜像是 Docker 容器运行时的只读模板,镜像可以用来创建 Docker 容器(每一个镜像都由一系列的层组成)
2)容器
Docker 主要就是利用容器来运行应用,一个 Docker 容器内可以说包含了某个应用运行所需要的环境。每一个 Docker 容器都是从镜像创建出来的。可以说容器就是镜像创建的运行实例,它可以被启动,停止,删除等。而且每个容器都是互相隔离的,保证安全的平台。
3)仓库
Docker 仓库主要就是 用来集中保存镜像的地方,当我们创建了自己的镜像后,可以使用 push
命令将它上传到公共仓库(Public)或者私用仓库(Private),这样的好处是,当我们需要在另外的服务器上使用这个镜像时,可以直接从仓库进行拉取(速度相对较快)。
docker 镜像操作命令有哪些?
docker images
查看本地已有镜像
docker pull mysql
拉取一个mysql的镜像到本地,不加版本号,默认拉取最新的,如果想指定版本号可以这样用 docker pull mysql:5.7
docker search mysql
搜索 mysql镜像,
docker rmi -f mysql
docker rmi mysql,删除mysql镜像,加上 -f是指强制删除mysql镜像,删除多个镜像呢?可以这么玩,docker rmi mysql hadoop hive,删除mysql、hadoop、hive三个镜像。
docker rmi $(docker images | grep “hub” | awk ‘{print $3}’)
上面这条命令,可以删除所有名字中带 “hub” 关键字的镜像。
总结
docker 上篇文章就分享到这里,鉴于文章篇幅有限,本文主要讲述了docker基本概念和操作镜像的基本命令。下篇文章会着重讲解docker 容器和仓库的相关操作命令和dockerfile等高阶知识。
加我微信,免费简历指导、面试助攻、也可免费获取学习资料和简历模板。
关注公众号,测试干货及时送达
懂Java的测试
软件测试技术分享,包括功能、自动化、性能、测试开发等,简历指点、面试助攻等
24篇原创内容
公众号
懂Java的测试精品文章