当前位置: 首页 > news >正文

Docker基础与持续集成

docker 基础知识:

docker与虚拟机

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

Server :物理机服务器Host OS :构建的操作系统Hypervisor :一种虚拟机软件,装了之后才能虚拟化操作系统Guest OS :虚拟化的操作系统Bins/Libs :执行命令、工具App A :构建的软件Docker Engine :跳过虚拟化内核的步骤,直接使用宿主机内核

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

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

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

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

  1. 节省资源(CPU、内存)
  2. 秒级启动
  3. 轻量级方案(同样一台服务器可以启动几百个docker,但是不能启动几百个虚拟机)

劣势

  1. 隔离性、安全性相比虚拟机更弱(比如,如果其中一个容器将内核给"搞坏了",那所有的容器就都无法正常工作了)
  2. 某些情况下服务器会挑内核(eg.编译c++)

docker 安装:

支持centos7、8及以上版本64位系统

切换root用户:su

yum list installed | grep docker # 查看是否已安装docker列表

yum -y install docker # 安装docker

修改镜像源:

sudo yum-config-manager \ --add-repo \

http:// http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1、docker服务启动:service docker start

2、查看当前运行的容器:docker ps

docker ps -a 查看所有容器

补充说明一下 docker ps -a 的输出结果:

  • CONTAINER ID:容器 ID,唯一标识容器(和image ID无关)
  • IMAGE:创建容器时所用的镜像
  • COMMAND:在容器最后运行的命令
  • CREATED:容器创建的时间
  • STATUS:容器的状态
  • PORTS:对外开放的端口号
  • NAMES:容器名(具有唯一性,docker 负责命名)

3、启动一个已停止的容器:docker start <容器ID>

4、停止一个容器:docker stop <容器ID>

5、重启一个容器:docker restart <容器ID>

6、查询一个镜像:docker search xxxx (docker search appium)

7、下载一个镜像:docker pull xxxx (docker pull nginx:1.17.10)

8、查询已下载的镜像:docker images

9、镜像导入/导出:

导出镜像:docker save jenkins_python3:jp3(或镜像ID) > 目录/XXX.tar

导入镜像:docker load < jenkins_dir/jenkins_python3.tar

10、容器导入/导出:

容器导出:docker export 容器id > jenkins_dir/jenkins_python3.tar

容器导入:docker import - jenkins_python3:jp3 < jenkins_dir/jenkins_python3.tar

11、删除镜像:docker rmi xxxx:版本号

12、启动一个镜像(容器):docker run xxxx (镜像启动以后就成为容器)

13、启动一个容器在后台运行:docker run -d xxxx

14、启动一个容器并自定义名字:docker run -d --name 容器名 xxxx

  • -name 指定容器名称
  • d 后台运行
  • port 指定端口映射规则
  • -network 指定容器运行的网路模式
  • v 指定需要挂载的数据卷
  • env 指定需要传递给容器的环境变量

例:

docker run -d --name newjenkins -p 8081:8080 -p 50000:50000 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai -v /jenkins_home:/var/jenkins_home 207d5ea41301

15、查看容器的资源占用:docker stats xxxx

16、关闭一个容器:docker stop 容器名/容器id

17、重启一个容器:docker restart 容器名/容器id

18、暂停一个运行的容器:docker pause 容器名/容器id

19、进入容器:docker exec -it 容器名/容器id bash

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

20、docker rm -f name/id 删除容器

21、docker kill name kill掉运行的容器

22、docker stop $(docker ps -a -q) 停止所有容器

23、docker rm -f $(docker ps -a -q) 删除所有容器

24、docker inspect 容器名/Id 查询容器详细信息(元数据)

docker数据持久化

如果docker挂掉,在docker内产生的数据应该怎么办呢, 这些数据应该如何保存呢接下来,我们要了解的,docker是如何进行数据持久化的呢?当我们启动容器时,添加了数据挂载的参数 -v 宿主机_path:container_path ,docker就可以通过数据挂载的方式,使容器和宿主机的数据进行 同步 保存

注意此处有个坑:进行目录挂载时会报没有权限因为CentOS7中的安全模块selinux把权限禁掉了,无法使用-v命令进行挂载

需要增加命令:

chcon -Rt svirt_sandbox_file_t 宿主机_path

把宿主机挂载目录添加白名单中,再进行 docker start 容器id/容器名

linux+jenkins+python自动化集成环境部署配置

通过docker启动jenkins服务

拉取jenkins镜像

1、docker pull jenkins/jenkins:lts

通过镜像,创建容器

2、docker run --name myjenkins -p 8080:8080 -p 50000:50000 容器Id

在jenkins容器中配置python3环境

1、进入容器

docker exec -itu root 容器名 bash

2、对apt-get 进行更新

apt-get update

3、通过apt-get安装配置python3

apt-get install python3

4、通过apt-get安装配置pip

apt-get install python3-pip

jenkins中配置allure

1、系统管理-插件管理-安装allure插件

2、重启jenkins容器

3、系统管理-全局工具配置-设置自动化安装

 

 4、进入job-配置-修改构建后操作

对配置了python环境的jenkins容器创建新镜像

docker commit -m="描述消息" -a="作者" 容器ID或容器名 镜像名:TAG

例:docker commit -m="配置python3环境" -a="siyuan" myjenkins jenkins_python3:jp3

对创建的新镜像进行导出:docker save jenkins_python3:jp3 > 目录/XXX.tar

jenkins创建job

1、新建任务

 

2、输入任务名称,点击【自由风格】,点击确定

 

3、在General输入项目描述

 

4、在源码管理中添加远程仓库项目

 

5、添加远程仓库登录凭证

 

6、进行构建操作设置

 

7、在shell中输入执行命令(注:该命令执行目录为项目目录)

 

注意:在jenkins容器中去执行python代码编写的测试框架时,需要在该容器中配置好python的环境,以及相关依赖如pip,pytest, allure, appium, yaml等等

8、要构建后操作中添加allure报告

 

 

9、在工程面板点击【立即构建】即可实现拉取代码到jenkins的/var/jenkins_home/workspace/目录下,执行shell中的python3 run.py,即执行项目中的run.py模块进行测试

 

10、查看构建的详细日志信息

对构建项目点击下拉箭头,选择【控制台输出】

 

 

通过jenkins进行定时构建

 

 

定时构建时间描述

在上述设置定时构建时,输入了一行命令 H2/ * * * * 来表示每隔 2 分钟构建一次,这是一种 crontab 的写法,具体描述分五个部分:

  • 星号(*):代表所有可能的值,例如 month 字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如 “2-6” 表示 “2,3,4,5,6”。
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如 “0-23/2” 表示每两小时执行一次。同时正斜线可以和星号一起使用,例如 */10,如果用在 minute 字段,表示每十分钟执行一次

实际在 Jenkins 中进行定时构建时,写法相似但是还是有区别,还是以上述的 H/2 * * * * 来表示每隔 2 分钟为例,当我们用 */2 * * * * 写法时:

 

可以看到Jenkins 建议我们使用 H 来代表通配符,因此在表示每隔多久时建议使用 H/ 的方式。

例:每天上午9点构建

H 9 * * *

下面是一些常用定时方式的参考示例:

  1. 每 30 分钟构建一次: H/30 * * * *
  2. 每 2 小时构建一次: H H/2 * * *
  3. 每天早上 9 点构建一次: H 9 * * *
  4. 每天 8 点、12 点、21 点各构建一次: H 8,12,21 * * *
  5. 周一至周五,每天 22 点到 23 点之间每隔 3 分钟构建一次: H/3 22-23 * * 1-5

对于docker中的jenkins,往往存在时间与本地时间不一致的问题

解决方法:

1、在通过镜像创建容器时,加入 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 参数

2、对于已经生成的容器:

容器内部创建Asia时区文件

echo Asia/Shanghai >/etc/timezone

localtime可以从宿主机拷贝到容器内部(exit退出容器,在宿主机上操作docker cp)

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime

docker restart 容器id/容器名称

 

 

 

 

 

 

 

 

 

 

相关文章:

Docker基础与持续集成

docker 基础知识&#xff1a; docker与虚拟机 !左边为虚拟机&#xff0c;右边为docker环境 – Server :物理机服务器Host OS &#xff1a;构建的操作系统Hypervisor &#xff1a;一种虚拟机软件&#xff0c;装了之后才能虚拟化操作系统Guest OS &#xff1a;虚拟化的操作系统…...

flutter开发实战-ijkplayer视频播放器功能

flutter开发实战-ijkplayer视频播放器功能 使用better_player播放器进行播放视频时候&#xff0c;在Android上会出现解码失败的问题&#xff0c;better_player使用的是video_player&#xff0c;video_player很多视频无法解码。最终采用ijkplayer播放器插件&#xff0c;在flutt…...

SpringFramework实战指南(五)

SpringFramework实战指南(五) 4.3 基于 注解 方式管理 Bean4.3.1 实验一: Bean注解标记和扫描 (IoC)4.3.2 实验二: 组件(Bean)作用域和周期方法注解4.3.3 实验三: Bean属性赋值:引用类型自动装配 (DI)4.3.4 实验四: Bean属性赋值:基本类型属性赋值 (DI)4.3.5 实验五:…...

力扣 121. 买卖股票的最佳时机

题目来源&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 好久没写代码了&#xff0c;啥啥都忘了 C题解1&#xff1a;贪心算法。&#xff08;来源代码随想录&#xff09; 因为股票就买卖一次&#xff0c;那么贪心的想法很自然就是取…...

【STM32+HAL库+CubeMX】UART轮询收发、中断收发、DMA收发方法及空闲中断详解

&#xff08;转载&#xff09;原文链接&#xff1a;https://blog.csdn.net/qq_39344192/article/details/131470735 1. 什么是UART&#xff1f; UART是一种异步串行通信接口&#xff0c;常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输&#xff0c;使…...

基于Java医院管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…...

PHP://filter过滤器

今天刷题遇到了php://filter过滤器的知识点考察&#xff1b;不会&#xff0c;看了几篇写的不错的文章&#xff0c;本来想转载的&#xff0c;但是代码复制过来后发现格式很乱&#xff0c;和原文格式差太多了&#xff1b;算了&#xff0c;直接把文章连接拿过来吧&#xff0c;在这…...

蓝桥杯刷题day05——2023

1、题目描述 请求出在12345678 (含) 至 98765432 (含) 中 &#xff0c;有多少个数中完全不包含 2023。 完全不包含 2023是指 无论将这个数的哪些数位移除都不能得到2023。 例如 20322175&#xff0c;33220022 都完全不包含 2023&#xff0c; 而20230415&#xff0c;20193213 …...

【51单片机】开发板和单片机的介绍(2)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…...

《剑指 Offer》专项突破版 - 面试题 30 和 31:详解如何设计哈希表以及利用哈希表设计更加高级、复杂的数据结构

目录 一、哈希表的基础知识 二、哈希表的设计 2.1 - 插入、删除和随机访问都是 O(1) 的容器 2.2 - 最近最少使用缓存 一、哈希表的基础知识 哈希表是一种常见的数据结构&#xff0c;在解决算法面试题的时候经常需要用到哈希表。哈希表最大的优点是高效&#xff0c;在哈希表…...

回顾2023年及过去五年的成长经历

现在是2024年2月4日&#xff0c;我想回顾下过去两年的经历和感悟。总结下过去五年的成长经历。 最大的感悟就两点。第一&#xff0c;我相比于两年前成长了很多、也成熟了很多&#xff0c;不管是心智上还是心态上。而这些成长来自于读书、思考和结合实践的反思。第二&#xff0…...

99例电气实物接线及52个自动化机械手动图

给大家分享一些流水线设计中常见的一些结构&#xff0c;这些动态图很直观&#xff0c;有助于大家了解其原理&#xff0c;非常好懂。 1.家庭总电箱接线图 2.经典双控灯接线 3.五孔一开接线 4.电动机点动控制接线&#xff08;不安全&#xff09; 5.电动机自锁接线图&#xff08;…...

SQL中聚合函数

SQL中的聚合函数是用于对一组值执行计算&#xff0c;并返回单个值的函数。它们通常在SELECT语句的SELECT列表中使用&#xff0c;并与GROUP BY子句结合使用来汇总数据。聚合函数忽略NULL值&#xff0c;只对非NULL值进行计算。以下是一些最常用的SQL聚合函数&#xff1a; 1. COU…...

深度学习预备知识1——数据操作

所有机器学习方法都涉及从数据中提取信息&#xff0c;因此需要一些关于数据的实用技能&#xff0c;包括存储、操作和预处理数据。 机器学习通常需要处理大型数据集。线性代数和矩阵是计算大量数据的有力工具&#xff0c;需要一些矩阵运算相关的线性代数知识。 深度学习是关于…...

【云原生运维问题记录】kubesphere登录不跳转问题

文章目录 现象问题排查 结论先行&#xff1a;kubesphere-system名称空间下reids宕机重启&#xff0c;会判断是否通过registry-proxy重新拉取镜像&#xff0c;该镜像原本是通过阿里云上拉取&#xff0c;代理上没有出现超时情况&#xff0c;导致失败。解决方案&#xff1a;删除re…...

深入学习Prometheus! 一款开源的监控和警报工具!

深入学习Prometheus! 一款开源的监控和警报工具&#xff01; Prometheus是一个开源的监控和警报工具&#xff0c;它广泛用于记录和收集各种指标&#xff08;如硬件资源使用情况、应用性能等&#xff09;&#xff0c;并提供强大的查询语言以帮助用户分析和查看这些数据。本文将…...

【webrtc】跟webrtc学list遍历

m98 代码:RTT G:\CDN\rtcCli\m98\src\video\call_stats.cc遍历list 进行删除 :remove_if void RemoveOldReports(int64_t now, std::list<CallStats::RttTime>* reports) {static constexpr const <...

网络安全产品之准入控制系统

文章目录 一、什么是准入控制系统二、准入控制系统的主要功能1. 接入设备的身份认证2. 接入设备的安全性检查 三、准入控制系统的工作原理四、准入控制系统的特点五、准入控制系统的部署方式1. 网关模式2. 控制旁路模式 六、准入控制系统的应用场景七、企业如何利用准入控制系统…...

为什么免费ip代理不适用于分布式爬虫?

费IP代理通常是一些公开免费提供的IP地址和端口&#xff0c;供用户免费使用。然而&#xff0c;这些免费IP代理并不适用于分布式爬虫的使用&#xff0c;原因如下&#xff1a; 1. 不稳定性 免费IP代理通常是由个人或组织提供的&#xff0c;没有稳定的维护和管理机制。因此&…...

【HTML 基础】元数据 meta 标签

文章目录 1. 设置字符集2. 描述网页内容3. 设置关键词4. 网页重定向5. 移动端优化注意事项结语 在网页开发中&#xff0c;<meta> 标签是一种十分重要的 HTML 元数据标签。通过巧妙使用 <meta> 标签&#xff0c;我们能够设置各种元数据&#xff0c;从而影响网页在浏…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...