测试必会 Docker 实战(一):掌握高频命令,夯实内功基础

news2025/1/16 15:07:12

在 Dokcer 横空出世之前,应用打包一直是大部分研发团队的痛点。在工作中,面对多种服务,多个服务器,以及多种环境,如果还继续用传统的方式打包部署,会浪费大量时间精力。

在 Docker 出现后,它以更高效的利用系统资源、更高效的利用系统资源、一致的运行环境、持续交付和部署、更轻松的迁移、更轻松的维护和拓展,6 大优点迅速火了起来。

Docker 的基础命令,堪称 Docker 的内功,只有把内功修炼好了,我们在 Docker 的学习路上才会更加顺畅,不会导致“走火入魔”。

接下来我将从与虚拟机的对比开始,以实战的方式,带大家更加了解,更会“玩” Docker。

1080×552 44.9 KB

– 左边为虚拟机,右边为docker环境 –

Server:物理机服务器

Host OS:构建的操作系统

Hypervisor:一种虚拟机软件,装了之后才能虚拟化操作系统

Guest OS:虚拟化的操作系统

Bins/Libs:执行命令、工具

App A:构建的软件

Docker Engine:跳过虚拟化内核的步骤,直接使用宿主机内核

从图片中我们可以清楚的了解到,相比于 Docker,虚拟机更加的臃肿。

虚拟机和容器都需要物理机以及操作系统,但是虚拟机有 Hypervisor 层以及 Guest OS 层。但是 Docker 是没有这两个部分的,只有一层 Docker Engine。

并且每个容器都和宿主机共享计算机的硬件资源以及操作系统。那么由Hypervisor带来的资源耗损,在容器这边是不存在的。所以Docker与虚拟机对比,是有很强大的优势的,当然,也会有一定的缺点。

优势(省去了虚拟化内核的步骤)

  1. 节省资源(CPU、内存)

  1. 秒级启动

  1. 轻量级方案(同样一台服务器可以启动几百个docker,但是不能启动几百个虚拟机)
    劣势

  1. 隔离性、安全性相比虚拟机更弱(比如,如果其中一个容器将内核给"搞坏了",那所有的容器就都无法正常工作了)

  1. 某些情况下服务器会挑内核(eg.编译c++)

而对于测试人员,Docker又为我们带来了什么样的便利呢?

  1. 搭建测试环境

  1. 搭建各类基础服务

  1. 搭建测试执行环境(自动化测试脚本执行环境)
    在刚开始的时候,由于网络的原因,我们在下载的镜像的时候,常常速度是非常慢的。所以如果下载镜像很慢的同学,可以尝试配置国内的加速器加速镜像下载

  1. 登录阿里开发者平台:
    开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

  1. 点击“创建我的容器镜像”

  1. 注册/登录后,进入Docker 镜像仓库,选中加速器 Tab
    阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

  1. 根据个人需要, 选择运行Docker 的OS,按照要求修改Docker配置文件。

步骤如下:

修改配置文件 :

添加红色部分到

保存文件

好记性不如烂键盘,单单只背下来Docker的命令是不够的,还要自己多敲多去练习,才能更熟练、更深刻的掌握Docker。

下载镜像

查看已下载的镜像

我们可以看到刚刚下载的Jenkins镜像

那么,其中的每个字段又是什么意思呢?

删除镜像

我们可以看到,Jenkins镜像已经被成功删除了

下载指定版本的镜像

此时我们可以发现,镜像的TAG不再是latest而是我们所指定的版本号

将镜像打包成一个tar包

将打包的镜像加载出来

给镜像加tag号

打了tag之后,会发现多了一个3.6.0 tag版本的镜像,但是image ID和原本的保持一致

然后我们删掉这个镜像,发现提示untagged,且这个镜像被成功删除

给镜像改名称

然后我们就可以看到,多了一个叫做testjenkins的镜像,但是image ID和原本的保持一致

push镜像到镜像仓库

容器运行命令参数

容器管理命令参数

接下来我们继续使用Jenkins进行一个实战的演练

docker ps也是我们常用的一个命令,下面是docker ps后显示的启动容器信息,其中每个字段都有自己的含义

CONTAINER ID:容器ID(和image ID无关)

如何删除这个启动的容器呢?是否可以和镜像一样,直接rm呢?

从图中我们可以看到,如果直接删除运行中的容器会报错,需要先stop然后删除

或者直接

我们从图片中可以看出,虽然这个容器是启动的状态,但是使用docker rm -f依然可以直接删除

在docker ps 的时候我们可以看到,PORTS字段下面显示了两个端口号,这两个端口号是做什么的呢?

其实呀,这两个端口号,是容器故意对外暴露的端口号,我们可以通过端口映射的方式,使容器内部的端口号与宿主机的某个端口号产生链接。这样我们就可以通过端口号,去访问或者操作容器啦

如何指定端口号呢?就是使用 -p 参数

将宿主机的8080端口指向容器的8080端口,这样我们在宿主机的8080端口就可以访问到Jenkins啦

在启动的过程中,我们可能会碰到各种各样的问题,我们如何定位问题呢?

当然是使用查看log大法

学到这里,可能有同学会有疑虑啦,如果docker挂掉,在docker内产生的数据应该怎么办呢,这些数据应该如何保存呢

接下来,我们要了解的,docker是如何进行数据持久化的呢?

当我们启动容器时,添加了数据挂载的参数-v 宿主机_path:container_path,docker就可以通过数据挂载的方式,使容器和宿主机的数据进行同步保存,

接下来我们通过实战的方式,就可以看到docker是如何实现这一功能的

1.启动Jenkins,要增加-v挂载卷参数

注意:挂载权限:sudo chown -R 1000:1000 /home/docker/jenkins

2. 使用docker exec -it myjenkins bash进入刚启动的jenkins容器,并cat /var/jenkins_home/secrets/initialAdminPassword这一步是为了找到jenkins的启动密码

3.输入密码,进入Jenkins页面创建一个job。

4.删掉容器,重新执行之前的命令,重启Jenkins,进入页面,发现job没有因为容器被删而丢失

注意:如果容器无法成功启动,且log提示权限问题,则在启动命令中添加-u 0

docker exec -it {容器名称} bash

进入容器,exec的意思是在容器中运行一个命令。如果使用bash 并且指定了-it 就会打开容器的shell 交互

docker cp {container:name}:{container_path} {host_path}把宿主机上的一个文件copy到容器中

有一些容器启动时,我们需要给他添加一些初始的参数,比如mysql,我们需要给他添加一些初始的账号和密码,docker如何操作这种情况呢?让我们动动小手,演练一下吧

  1. 启动mysql容器,注意要加-e传递参数

  1. 通过数据库连接工具连接数据库
    host要填写宿主机的ip地址,Password是我们一开始设定的
    端口号填写映射的宿主机的端口号

  1. 在数据库中创建一个表

  1. 删掉容器,然后重启

  1. 进入刚刚创建的容器内的mysql路径下,发现有刚刚添加的表,这个就是容器的数据持久化的功能啦

我们接下来再思考一个问题,因为容器是有隔离性的。

如果容器之间互相链接可以用什么方式?

这里就要引入另外一个参数啦 --link,这个参数的作用就是把一台容器的网络信息,注入到另外一台容器中

老方法,我们还是通过testlink实战,体验一下这个功能吧

2.启动mariadb

3.启动tesklink,mariadb的信息注入到testlink容器中

4.查看日志,可以看到成功连接到mariadb

一个思考题,如果是三个容器需要连接呢,使用什么样的方式?

答案是:–env因为在docker中,–link就是通过环境变量的方式配置的。

现在很多网站的架构都是前后端分离,在这种情况下,我们应该如何使用docker分别启动前端和后端,且能互相通信呢?我们可以使用下面的命令

–net=container:conan:这样创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

查看docker 的信息

获取容器/镜像的元数据

以上,我们通过实战的方式了解了docker的概念,熟悉了docker的一部分基础命令,看完文章后,就要熟悉练习了哦。下一次,将带大家通过3个实战练习selenium、prometheus+grafana、mysql的监控,带大家了解docker的招式法门,学会之后,我们就可以真正的带入工作,进行实战了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java设计模式-外观模式Facade

介绍 外观模式(Facade),也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用外观模式通过定义一个一致的接口,用以…

回溯法--n皇后问题

回溯法有两个模板--子集树、排列树,他们有回溯法的共同特点:深度优先搜索,如果一条路走不通,再退回来(类似递归)问题描述八皇后问题的历史八皇后问题最早是由国际象棋棋手马克斯贝瑟尔(Max Bezz…

常用的字符串与内存操作函数(2)

Tips 1. 2. strerror() 1. C语言的库函数在运行的时候,如果发生错误,就会将错误码存在一个变量里面。这个变量就是:errno(全局变量)。 2. 这个函数的功能在于把错误码转化为对应的错误信息,错误信息…

macOS 13.2 开发者预览版 Beta2(22D5038i)发布

黑果魏叔 1 月 11 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.2 开发者预览版 Beta 2 更新(内部版本号:22D5038i),本次更新距离上次发布隔了 27 天。macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接…

纯CSS输入区域下划线

使用纯CSS实现文本输入的下划线&#xff0c;简洁有效&#xff0c;实现效果&#xff1a; 实现方式 实现方式也很简单&#xff1a; background: linear-gradient(#999 1px, transparent 0) 0 -1px/100% 2em; 例子代码&#xff1a; <!DOCTYPE html> <html lang"e…

【C语言航路】第十站:指针(三)深刻理解指针运算

目录 一、深刻理解指针和数组 1.一维数组 2、字符数组 &#xff08;1&#xff09;字符变量存放到数组中 &#xff08;2&#xff09;字符串存放到字符数组 &#xff08;3&#xff09; 字符串存放到一个指针中 3.二维数组 二、指针与数组经典笔试题 1.题1 2.题2 3.题3…

MCU-51:单片机之红外遥控(外部中断)

目录一、红外遥控简介二、硬件电路三、基本发送与接收四、NEC码五、代码演示5.1 红外遥控5.2 红外遥控电机调速注意&#xff1a;一定要看一、红外遥控简介 红外发射装置 也就是通常我们说的红外遥控器是由键盘电路、红外编码电路、电源电路和红外发射电路组成。红外发射电路的…

爬虫逆向之字体反爬(一)、镀金的天空-字体反爬-1

题目地址&#xff1a;http://www.glidedsky.com/level/crawler-font-puzzle-1 写一下之前处理过的几个字体反爬实战&#xff0c;也是很常见的一种反爬类型&#xff0c;这是第一篇 先来看一下题目 源码拿到的数字&#xff0c;和实际显示在网页的数字&#xff0c;明显不一样的 …

相见恨晚的 IDEA 使用技巧,能让你的代码飞起来

Live Templates 是什么&#xff0c;听上去感觉挺玄乎的。有的同学用过之后觉得简直太好用了&#xff0c;不能说大大提高了开发效率吧&#xff0c;至少也是小小的提高一下&#xff0c;节省了很多敲重复代码的时间。有的同学用过之后说&#xff1a;没什么用&#xff0c;奇技淫巧罢…

C语言_程序环境和预处理

目录 1. 程序的翻译环境 2. 程序的执行环境 3. C语言程序的翻译链接 4. 预编译过程详解 4.1 预定义符号介绍 4.1.1 __FILE__ //进行编译的源文件 4.1.2 __LINE__//文件当前的行号 4.1.3 __DATE__//文件被编译的日期 4.1.4 __TIME__//文件被编译的时间 4.1.5 __STDC__…

基于python的学生信息管理系统

《学生信息管理系统》程序使用说明在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&#xff0c;有两种方法&#xff0c;一种是输入1&#xff0c;另一种是按下键盘上的↑或↓方向键进…

【Javascript】高阶函数,JSON,forEach,map,filter,reduce函数

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录高阶函数箭头函数apply函数JSONfilter函数map函数总结reduce函数find/findIndex函数every/some函…

线缆行业单绞机控制算法(详细图解)

在了解单绞机之前需要大家对收放卷以及排线控制有一定的了解,不清楚的可以参看下面几篇博客,这里不再赘述,受水平和能力所限,文中难免出现错误和不足之处,诚恳的欢迎大家批评和指正。 收放卷行业开环闭环控制算法 PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博…

知识难懂到什么程度

爱因斯坦相对论&#xff0c;诺贝尔评委会都看不懂&#xff0c;到底说的是什么1905年&#xff0c;爱因斯坦发布狭义相对论&#xff1b;1916年&#xff0c;发布广义相对论&#xff1b;2年后&#xff0c;英国的汤姆逊教授通过实验验证了广义相对论的正确&#xff0c;同时也把爱因期…

容器适配器中stack queue priority_queue的介绍及模拟实现

文章目录容器适配器的概念deque的介绍及底层结构stack的介绍 stack的模拟实现 queue的介绍 queue的模拟实现 priority_queue的介绍 priority_queue的模拟实现 容器适配器的概念 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验…

清华大佬超全超详细讲解——C++STL看这份教程就够了

2022 年年度编程语言揭榜啦&#xff01;在上个月预想的 C、C、Python 三种候选语言中&#xff0c;C 脱颖而出&#xff0c;成为 TIOBE 2022 年度编程语言的最终获得者&#xff01;新的一波学习热潮要来了。TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标&#xff0c;每月…

数据分析思维(三)|测试/对比思维

测试/对比思维 1、概念 测试/对比思维可以说在数据分析的工作中随处可见。当我们通过各种手段得到一些结果数据后&#xff0c;如何评价结果的好坏呢&#xff1f;这个时候你可能会想到和标准结果进行比较、和之前的数据进行对照等等方法&#xff0c;这些方法归根结底就是一种测…

ubuntu 安装 Gitkraken 8.1.1 Pro 版本

GitKraken 是一个非常好用的 Git 图形界面客户端, 自 6.5.1 版本以后, GitKraken 对私有仓库不再免费开放使用 本文介绍一个 ubuntu 安装 GitKraken 8.1.1 Pro 版本的方法 环境准备 安装 yarn 测试过 node 18.12.1 版本, 没能升级到 Pro 版, 可能是因为 GitCracken 仓库太久…

springboot+sa-token-quick-login实现快速登录

当你的项目需要一个登录认证功能&#xff0c;这个登录界面可以不华丽、可以烂&#xff0c;但是一定要有&#xff0c;同时你又不想花费太多的时间浪费在登录页面上&#xff0c; 那么你便可以尝试一下Sa-Token-Quick-Login。 1、Sa-Token-Quick-Login Sa-Token-Quick-Login 可以…

5.4、TCP 流量控制(滑动窗口机制)

一般来说&#xff0c;我们总是希望数据传输得更快一些。 但如果发送方把数据发送得过快&#xff0c;接收方就可能来不及接收&#xff0c;这就会造成数据的丢失。 所谓流量控制(flow control)就是让发送方的发送速率不要太快&#xff0c;要让接收方来得及接收\color{red}让发送…