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/容器名称

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xlsx xlsx-style 使用和坑记录

1 安装之后报错 npm install xlsx --savenpm install xlsx-style --save Umi运行会报错 自己代码 import XLSX from "xlsx"; import XLSXStyle from "xlsx-style";const data [["demo1","demo2","demo3","demo4&quo…

cesium-水平测距

cesium测量两点间的距离 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-item&…

『运维备忘录』之 Cron 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

Logback学习

logback 1、logback介绍 Logback是由log4j创始人设计的另一个开源日志组件&#xff0c;性能比log4j要好。 lockback优点&#xff1a; 内核重写、测试充分、初始化内存加载更小&#xff0c;这一切让logback性能和log4j相比有诸多倍的提升。logback非常自然地直接实现了slf4j…

CSS的元素显示模式

一&#xff0c;什么是元素显示模式 元素显示模式是指元素以什么方式显示&#xff0c; 作用&#xff1a;了解不同类型的标签可以更好的布局网页。 HTML元素一般分为块元素和行内元素。 1.1块元素 常见的块元素有&#xff1a;<p><ul><ol><li>,<di…

OJ_成绩排序2

题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<algorithm> using namespace std;struct student {char name[16];int score;int seq; };bool comparefromhightolow(student a, student b) {if (a.score > b.…

4通过干扰 Char 设备为 PRNG 添加后门_Linux_Rootkit.md

Xcellerator 密码学Linux其他逆向工程 文章目录 [Linux Rootkit 第 4 部分&#xff1a;通过干扰 Char 设备为 PRNG 添加后门](https://xcellerator.github.io/posts/linux_rootkits_04/)Linux 中的字符设备字符设备的读取例程编写 Rootkit我们能去哪里呢&#xff1f; Linux Ro…

c#string方法对比

字符串的截取匹配操作在开发中非常常见&#xff0c;比如下面这个示例&#xff1a;我要匹配查找出来字符串数组中以“abc”开头的字符串并打印&#xff0c;我下面分别用了两种方式实现&#xff0c;代码如下&#xff1a; using System; namespace ConsoleApp23{ class Progra…

iOS应用提交上架的最新流程

摘要 本篇博客介绍了iOS应用程序上架的最新流程。包括上架基本需求资料、证书的创建和使用、测试设备的添加、描述文件的创建、打包、审核等步骤。 引言 在开发完iOS应用程序后&#xff0c;我们需要将其提交到App Store上架。然而&#xff0c;随着技术的不断发展&#xff0c;…

【数据结构】实现顺序表

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解顺序表&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一.概念及结构二.接口实现2.1 创建顺序表结构体2.2 初始化顺序表2.3 销毁顺序表2.4 打印顺序表…

力扣面试150 只出现一次的数字Ⅱ 哈希 统计数位 DFA有穷自动机

Problem: 137. 只出现一次的数字 II 文章目录 思路&#x1f496; 哈希&#x1f496; 位数统计&#x1f496; DFA 状态机 思路 &#x1f468;‍&#x1f3eb; 参考 &#x1f496; 哈希 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) cl…

从领域外到领域内:LLM在Text-to-SQL任务中的演进之路

导语 本文介绍了ODIS框架&#xff0c;这是一种新颖的Text-to-SQL方法&#xff0c;它结合了领域外示例和合成生成的领域内示例&#xff0c;以提升大型语言模型在In-context Learning中的性能。 标题&#xff1a;Selective Demonstrations for Cross-domain Text-to-SQL会议&am…

深度学习系列57: 清华大模型MiniCPM上手

MiniCPM 是面壁智能与清华大学自然语言处理实验室共同开源的系列端侧大模型&#xff0c;主体语言模型 MiniCPM-2B 仅有 24亿&#xff08;2.4B&#xff09;的非词嵌入参数量 1. 上手对比测试 mps比cpu大概快了9倍左右。 也可以在modelspore上测试&#xff1a;

XUbuntu22.04之如何创建、切换多个工作区(二百零九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-13-playwright操作iframe-下篇

1.简介 通过前边两篇的学习&#xff0c;想必大家已经对iframe有了一定的认识和了解&#xff0c;今天这一篇主要是对iframe做一个总结&#xff0c;主要从iframe的操作&#xff08;输入框、点击等等&#xff09;和定位两个方面进行总结。 2.iframe是什么&#xff1f; iframe 简…

【Simulink系列】——动态系统仿真 之 离散系统线性离散系统

一、离散系统定义 离散系统是指系统的输入与输出仅在离散的时间上取值&#xff0c;而且离散的时间具有相同的时间间隔。满足下列条件&#xff1a; ①系统&#xff08;的输入输出&#xff09;每隔固定时间间隔才更新一次。固定时间间隔称为采样时间。 ②系统的输出依赖当前的…

python+flask人口普查数据的应用研究及实现django

作为一款人口普查数据的应用研究及实现&#xff0c;面向的是大多数学者&#xff0c;软件的界面设计简洁清晰&#xff0c;用户可轻松掌握使用技巧。在调查之后&#xff0c;获得用户以下需求&#xff1a; &#xff08;1&#xff09;用户注册登录后&#xff0c;可进入系统解锁更多…

C语言第十八弹---指针(二)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、const修饰指针 1.1、const修饰变量 1.2、const修饰指针变量 2、指针运算 2.1、指针- 整数 2.2、指针-指针 2.3、指针的关系运算 3、野指针 3.1、…

【数据结构】----先来聊聊【排序】(先导片)

作为一名对技术充满热情的学习者&#xff0c;我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代&#xff0c;我远非专家&#xff0c;而是一位不断追求进步的旅行者。通过这篇博客&#xff0c;我想分享我在某个领域的学习经验&#xff0c;与大家共同探讨、共…

Vite+Vue3使用Vue-i18n笔记

一、下载依赖 vue-i18n yarn add vue-i18n创建存放语言文件的目录 以及配置文件的配置 我是在src/lang 新建index.ts、cn.ts、en.ts以及test文件夹其中再分别新建cn.ts以及en.ts /lang/index.ts 用于导出vue-i18n需要的配置对象 import en from "./en.ts"; import…