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

docker 镜像制作 与 CI/CD

目录

镜像到底是什么?

使用docker创建镜像

步骤:

1、编辑Dockerfile(Dockerfile是docker制作镜像的配方文件)

2、编辑requirements.txt文件

 3、编辑app.py文件,我们的程序文件

4、生成镜像文件

5、查看生成的镜像

6、下载启动redis镜像

7、使用生成的镜像生成容器 

8、​​​​查看实验成果 

docker 的CI与CD  

一、CI/CD的简介

1、CI(CI-Continuous integration,持续集成)

2、CD(CD-continuous deployment,持续部署)

3、持续交付(Continuous Delivery)

4、完整步骤图

5、jenkins


常见的一些docker文件和其起到的作用

resolv.conf  --》 该文件是容器里的dns服务器,他的地址使用的是宿主机里的dns的配置

它复制了宿主机的/etc/resolv.conf里的内容

hostname --》存放主机名的

hosts  --》 域名解析

config.v2.json --》存放的是docker inspect里的详细信息 

创建两个nginx容器,并使用--link链接,目的是让claylpf-nginx-2 能 使用claylpf-nginx-1容器内的软件或者是程序

#创建claylpf-nginx-1容器
[root@mysql ~]# docker run -d -p 6606:80 --name claylpf-nginx-1 nginx
22e10551d3cd59391a1430e98b409e99c21c991dbfb406a010c8c97c352bf10d#创建claylpf-nginx-2容器,并链接到claylpf-nginx-1上去
[root@mysql ~]# docker run -d -p 6607:80 --name claylpf-nginx-2  --link claylpf-nginx-1:claylpf nginx
bd698ed57cbb5df76e42ef6a9991ec491318b5f90b1129dd3d3c4dbd5237aa68
[root@mysql ~]# --link 容器名字:再claylpf-nginx-2容器里的/etc/hosts添加一条

镜像到底是什么?

镜像(Image)是计算机科学中一个广泛使用的概念,指的是一种数据副本。在计算机中,一个镜像通常是指一个数据集合,其中包含了一个文件系统、软件环境以及相关的应用程序如操作系统、核心代码、系统工具、系统库等。

最常见的镜像类型是操作系统镜像,它是一个完整的操作系统及其相关软件和配置的复制品,可以通过安装或启动该镜像来轻松地为计算机系统提供同样的软件环境和功能。

此外,还有一些其他类型的镜像,如容器镜像、虚拟机镜像等。容器镜像是为Docker等容器技术准备的,包含了一个或多个应用程序及其运行所需的库和环境等。虚拟机镜像则是为虚拟化技术准备的,包含了一个完整的操作系统及其相关软件和配置。

使用镜像可以方便地创建、部署和管理软件开发、测试和生产环境。它们可以帮助开发者和管理员节省时间和精力,避免出现由于环境不一致导致的兼容性问题等。

总之,镜像是计算机中一个重要的概念,是一个数据的复制品,可用于创建、部署和管理软件环境和应用程序。它在软件开发和计算机系统管理中有着广泛的应用

使用docker创建镜像

步骤:

1、编辑Dockerfile(Dockerfile是docker制作镜像的配方文件)

[root@mysql /]# mkdir mydocker
[root@mysql /]# cd mydocker
[root@mysql mydocker]# ls
[root@mysql mydocker]# vim Dockerfile[root@mysql mydocker]# cat Dockerfile 
FROM python:2.7-slim         #导入基础镜像,里面安装了python 2.7
WORKDIR /app                 #进入到容器后,会进入的文件夹
ADD . /app            #复制linux系统当前目录下的内容到容器的/app目录下 类似于执行docker cp
RUN pip install --trusted-host pypi.python.org -r requirements.txt    #再容器内部执行的命令
EXPOSE 80                   #容器暴露80端口,监听80端口
ENV NAME World              #定义了环境变量NAME的值为World
ENV AUTHOR clay             #定义了环境变量AUTHOR的值为World
CMD ["python","app.py"]     #容器启动的时候执行该命令 python app.py
[root@mysql mydocker]# 

其中RUN和CMD指令是在不同阶段完成的

        RUN是在制作镜像的过程中完成的

        CMD是镜像制作完成 启动容器使用镜像的时候执行的,它也是启动容器后执行的第一个命令

其中RUN后面如果要写的命令不止一条,我们可以使用&&符号衔接下一行,他的作用是可以减少文件的层数 

CMD里面接的命令,必须一直在容器里运行,在前台运行。

只要容器里的运行命令结束,容器就会退出

2、编辑requirements.txt文件

[root@mysql mydocker]# vim requirements.txt
[root@mysql mydocker]# cat requirements.txt 
Flask
Redis
[root@mysql mydocker]# 

 3、编辑app.py文件,我们的程序文件

[root@mysql mydocker]# vim app.py
[root@mysql mydocker]# cat app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)app = Flask(__name__)@app.route("/")
def hello():try:visits = redis.incr("counter")except RedisError:visits = "<i>cannot connect to Redis, counter disabled</i>"html = "<h3>Hello {name}!</h3>" \"<b>Hostname:</b> {hostname}<br/>" \"<b>Visits:</b> {visits}"return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)if __name__ == "__main__":app.run(host='0.0.0.0', port=80)[root@mysql mydocker]# 

4、生成镜像文件

[root@mysql mydocker]# docker build -t sc-hello_1 .

5、查看生成的镜像

docker images

6、下载启动redis镜像

[root@centos8-docker mydocker1]# docker pull redis

7、使用生成的镜像生成容器 

[root@centos8-docker mydocker1]# docker run -d -p 6677:80 --name sc_hello_2 sc_friendlyhello_2
[root@centos8-docker mydocker1]# docker ps
#查看正在运行的容器

8、​​​​查看实验成果 

因为redis容器没有启动,所以我们启动一个redis容器链接到现在的这个容器。

[root@centos8-docker mydocker1]# docker run -d -p 5644:6379 --name sc_redis_2 redis
#创建redis容器
[root@centos8-docker mydocker1]# [root@centos8-docker mydocker1]# docker run -d -p 5647:80 --name sc_hello_4 --link sc_redis_2:redis sc_friendlyhello_2#创建一个容器链接到redis数据库容器

再用浏览器访问192.168.31.31:5647

docker 的CI与CD  

CI/CD  持续集成--》持续部署 --》持续交付        

一、CI/CD的简介


CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。
CI/CD的核心概念是持续集成、持续交付和持续部署。

具体来说,CI/CD可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)这些关联的事务统称为“CI/CD管道”,由开发和运维团队协同支持。

互联网软件的开发和发布,目前已经形成了一套标准流程,一般可以分为以下几个阶段:
开发——构建——集成——测试——交付——部署

1、CI(CI-Continuous integration,持续集成)

持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
注:持续集成简单来说,就是频繁的将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。

它的好处有以下两种:

  1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
  2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

2、CD(CD-continuous deployment,持续部署)


是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

注:持续部署的前提是能自动化完成测试、构建、部署等步骤。

3、持续交付(Continuous Delivery)


持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
持续交付指的是频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上
注:持续交付可以看作持续集成的下一步

4、完整步骤图

5、jenkins

很多公司都会使用jenkins 而它是CI/CD 持续集成/持续交付的杰出的软件

官方网站:Jenkins

相关文章:

docker 镜像制作 与 CI/CD

目录 镜像到底是什么&#xff1f; 使用docker创建镜像 步骤&#xff1a; 1、编辑Dockerfile&#xff08;Dockerfile是docker制作镜像的配方文件&#xff09; 2、编辑requirements.txt文件 3、编辑app.py文件&#xff0c;我们的程序文件 4、生成镜像文件 5、查看生成的镜…...

Spring Boot 异常报告器解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解Spring Boot 属性配置解析Spring Boot 属性加载原理解析Spring Boot 异常报告器解析 创建自定…...

瑞亚太空活动公司RSA与英国国防与安全加速器达成量子项目合作

​ &#xff08;图片来源&#xff1a;网络&#xff09; 瑞亚太空活动公司&#xff08;RSA&#xff09;与英国国防与安全加速器&#xff08;DASA&#xff09;签署了合作协议&#xff0c;主要开发名为“无限交换”的可操纵量子真空的技术项目。这是RSA在英国签订的第一份合同&…...

Shapley值法介绍及实例计算

Shapley值法介绍及实例计算 为解决多个局中人在合作过程中因利益分配而产生矛盾的问题&#xff0c;属于合作博弈领域。应用 Shapley 值的一大优势是按照成员对联盟的边际贡献率将利益进行分配&#xff0c;即成员 i 所分得的利益等于该成员为他所参与联盟创造的边际利益的平均值…...

不用手动改 package.json 的版本号

“为什么package.json 里的版本还是原来的&#xff0c;有没有更新&#xff1f;”&#xff0c;这个时候我意识到&#xff0c;我们完全没有必要在每次发布的时候还特意去关注这个仓库的版本号&#xff0c;只要在发布打tag的时候同步一下即可 node.js 部分&#xff0c;我们得有一个…...

gitlab Can‘t update,dev has no tracked branch

代码仓库迁移到gitlab后本地更改仓库地址后 拉取代码报错&#xff1a; Can’t update,dev has no tracked branch&#xff1a; 解决办法&#xff1a; 在当前项目的目录下运行命令&#xff1a; git branch -u git dev --set-upstream-toorigin/dev第一个dev是本地分支名字&…...

sql批量操作

SQl: 1&#xff0c;在某一字段后批量增加内容&#xff1a;UPDATE 表名 SET 字段 CONCAT(字段,要增加的内容) 例&#xff1a;UPDATE b8_niuniu_permission SET game_ids CONCAT(game_ids,,3) &#xff08;或者后面可以加where条件&#xff09; 2&#xff0c;批量修改某一字段…...

数据库监控与调优【九】—— 索引数据结构

索引数据结构-B-Tree索引、Hash索引、空间索引、全文索引 二叉树查找 对于相同深度的节点&#xff0c;左侧的节点总是比右侧的节点小。在搜索时&#xff0c;如果要搜索的值key大于根节点&#xff08;图中6&#xff09;&#xff0c;就会在右侧子树里查找&#xff1b;key小于根…...

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之&#xff1a;流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之&#xff1a;可靠数据传输的基本原理哈工大计算机网络课程传输层协议详解之&#xff1a;TCP协议哈工大计算机网络课程传输层协议详解之&#xff1a;拥塞控制原理剖析 …...

Unity Mac最新打苹果包流程

作者介绍&#xff1a;铸梦xy。IT公司技术合伙人&#xff0c;IT高级讲师&#xff0c;资深Unity架构师&#xff0c;铸梦之路系列课程创始人。 IOS详细打包流程1.申请APPID2.申请开发证书3.创建描述文件 IOS详细打包流程 1.申请AppID 2.创建证书 3.申请配置文件&#xff08;又名描…...

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言&#xff1a; explain&#xff1a; 语法&#xff1a; 总结&#xff1a; 前言&#xff1a; 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具&#xff1a;SQL执行频率&#xff0c;慢日志查询&#xff0c;profile。但是这三个方法也只是在时间角度粗略的…...

学Python能做哪些副业?我一般不告诉别人!建议存好

前两天一个朋友找到我吐槽&#xff0c;说工资一发交完房租水电&#xff0c;啥也不剩&#xff0c;搞不懂朋友圈里那些天天吃喝玩乐的同龄人钱都是哪来的&#xff1f;确实如此&#xff0c;刚毕业的大学生工资起薪都很低&#xff0c;在高消费、高租金的城市&#xff0c;别说存钱&a…...

简化 Hello World:Java 新写法要来了

OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。 这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” &#xff0c;希望 Java 的学习过程能更平滑&#xff0c;让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释&#xff1a;现在的 Java 语言非常…...

【服务器】springboot实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

浅谈常见的加密算法及实现

浅谈常见的加密算法及实现 简介&#xff1a; 随着公司业务的发展&#xff0c;系统用户量日益增多&#xff0c;系统安全性问题一直在脑子里反复回旋&#xff0c;以前系统用户少影响面小&#xff0c;安全方面也一直没有进行思考和加固&#xff0c;现如今业务发展了&#xff0c;虽…...

FTP协议详解

简介 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09; 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分&#xff0c;其一为FTP服务器&#xff0c;其二为FTP客户端。其中FTP服务器用来存储文件&#xff0c;用户可以使用FTP客户端通过FTP协…...

网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言

目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA 特性 4、PHP 作用 PHP 能做什么&#xff1f; 5、C/C 使用 如何学习 前面的话 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML&#xff0c;JS那些基础知识&#xff0c;磨刀不误砍柴…...

八大排序算法之归并排序(递归实现+非递归实现)

目录 一.归并排序的基本思想 归并排序算法思想(排升序为例) 二.两个有序子序列(同一个数组中)的归并(排升序) 两个有序序列归并操作代码: 三.归并排序的递归实现 递归归并排序的实现:(后序遍历递归) 递归函数抽象分析: 四.非递归归并排序的实现 1.非递归归并排序算法…...

基于SpringBoot+Html的前后端分离的学习平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在知识大爆炸的现代,怎…...

MySQL实战解析底层---“order by“是怎么工作的

目录 前言 全字段排序 rowid排序 全字段排序 VS rowid排序 前言 在开发应用的时候&#xff0c;一定会经常碰到需要根据指定的字段排序来显示结果的需求以举例市民表为例&#xff0c;假设你要查询城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前1000个人的姓…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

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

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

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...