当前位置: 首页 > 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;从而影响网页在浏…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...