docker 镜像制作 与 CI/CD

news2024/11/24 14:42:23

目录

镜像到底是什么?

使用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后面如果要写的命令不止一条,我们可以使用&&符号衔接下一行,他的作用是可以减少文件的层数 

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

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

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

相关文章

这些软件,你知道几个呢?

软件分享一&#xff1a;情绪指压 情绪指压(MoodPress)是一款记录心情的应用&#xff0c;也是一款非常简单的减压游戏。可以根据自己现在的心情来决定指压的力度和时间&#xff08;压力越大或者时间越长越生气&#xff09;&#xff0c;适时释放&#xff0c;来判断和记录自己的心…

Oracle19c安装和远程访问设置

Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统&#xff0c;系统可移植性好、使用方便、功能强&#xff0c…

cron表达式 字符含义 详细解释

cron表达式的组成 cron表达式是一个字符串&#xff0c;由6到7个字段组成&#xff0c;用空格分隔。 其中前6个字段是必须的&#xff0c;最后一个年是可选填的。 cron表达式的字段含义 字段允许值通用字符秒0-59* , - /分0-59时0-23日期1-31 ? L C W月1-12 JAN-DEC星期1-7 SU…

单片机原理及接口技术 - 第三版 张毅刚 习题答案

第 1 章 思考题及习题 1 参考答案 一、填空 1.除了单片机这一名称之外&#xff0c;单片机还可称为 微控制器 或 嵌入式控制器 2.单片机与普通微型计算机的不同之处在于其将 CPU、存储器、I/O 口三部分,通过内部总线连接一起&#xff0c;集成芯片上。 3. AT89S52 单片机工作频率…

高并发缓存实战RedisSon、性能优化

高并发缓存实战RedisSon、性能优化 分布式锁性能提升 1.数据冷热分离 对于经常访问的数据保留在redis缓存当中&#xff0c;不用带数据设置超时时间定期删除控制redis的大小 String productStr redisUtil.get(productCacheKey);if (!StringUtils.isEmpty(productStr)) {prod…

docker搭建nginx

一、安装Docker 1、安装&#xff1a; yum install docker 2、启动/停止/重启docker服务 service docker start service docker stop service docker restart 3、查看docker版本信息 docker version 4、查看所有docker镜像 docker images 二、安装Nginx 1、拉取Nginx镜像…

关于POL网络中的ODN部署方案,这些你都了解吗?

近年来&#xff0c;行业的智能化和信息化呈现加速发展趋势&#xff0c;高清视频会议、云服务、移动办公等应用几乎成为企业标配。与此同时&#xff0c;带宽的接入、升级和物联网融合等网络新要求也变得越来越迫切&#xff0c;网络架构升级成为企业解决网络难题的一个新选择。 …

Python基础(10)——Python条件语句

Python基础&#xff08;10&#xff09;——Python条件语句 文章目录 Python基础&#xff08;10&#xff09;——Python条件语句目标一. 了解条件语句二. if 语法2.1 语法2.2 快速体验 三. 实例&#xff1a;上网3.1 简单版3.2 进阶版 四. if...else...4.1 语法4.2 实用版&#x…

KSM01.2B-061C-35N-M1-HP2-SE-NN –D7-NN-FW

​ KSM01.2B-061C-35N-M1-HP2-SE-NN –D7-NN-FW KSM01.2B-061C-35N-M1-HP2-SE-NN –D7-NN-FW 集散控制的基本思想是集中管理&#xff0c;分散控制。即&#xff1a;将流程工业的自动控制过程与操作管理人员对自动控制过程的管理过程相对分离&#xff1b;流程工业的自动控制过程…

Dump寄存器使用、解析

前人种树&#xff0c;后人乘凉&#xff1b;创造不易&#xff0c;请勿迁移~ author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主daisy.skye擅长嵌入式,Qt,Linux,等方面的知识https://blog.csdn.net/qq_40715266?t…

git的安装与配置教程-超详细版

一、git的安装 1、下载git git官网地址&#xff1a;https://git-scm.com/download/win/ 选择所需要的版本&#xff0c;进行下载。 2、下载完成之后&#xff0c;双击下载好的exe文件进行安装。 3、默认是C盘&#xff0c;推荐修改一下路径&#xff08;非中文并且没有空格&…

2021电工杯数学建模B题解题思路

目录 一、前言 二、问题背景 三、具体问题 四、解题思路 &#xff08;一&#xff09;整体思路 &#xff08;二&#xff09;问题一 &#xff08;三&#xff09;问题二 &#xff08;四&#xff09;问题三 &#xff08;五&#xff09;问题四 &#xff08;六&#xff09;…

浅谈kubernetes部署:UI部署

UI部署 镜像制作 登录私服 以阿里云docker私服举例 sudodockerlogin—usernameregistry.cn-beijing.aliyuncs.com 制作UI和静态页镜像 参考&#xff1a; 《前端镜像制作》 《openresty镜像制作》 修改yaml文件 vi/opt/kubernetes/ui.yaml 修改相应image值为您的镜像目录 部…

VTK学习之边缘检测(梯度算子)

参考博客&#xff1a;VTK修炼之道32&#xff1a;边缘检测_梯度算子_基于梯度的边缘检测算子_沈子恒的博客-CSDN博客 直接上源码&#xff1a; #include <vtkAutoInit.h> #include <vtkSmartPointer.h> #include <vtkJPEGReader.h> #include <vtkImageGra…

屏幕录制没有声音?快看看这2个方法!

案例&#xff1a;我今天尝试在电脑上进行屏幕录制&#xff0c;一开始一切都挺正常的。直到结束后&#xff0c;查看刚刚录制的视频发现没有声音。 【录屏只有画面没有声音&#xff0c;会影响视频的观感体验&#xff0c;甚至你根本不知道视频想表达的意思。那录屏的同时如何录制…

计算机基础--->网络(1)【分层模型、网络协议、HTTP等】

文章目录 网络分层模型OSI七层模型及其作用TCP/IP四层模型及作用为什么网络需要分层&#xff1f; 常见的网络协议应用层常见的协议传输层常见的协议网络层常见协议 从输入URL到页面展示的过程HTTP常见的状态码HTTP与HTTPS的区别HTTP是不保存状态的协议&#xff0c;如何保存用户…

华硕电脑怎么用U盘重装系统Win10?

华硕电脑怎么用U盘重装系统Win10&#xff1f;用户想用U盘给华硕电脑重装Win10系统&#xff0c;但不知道要怎么操作&#xff0c;这时候用户需要准备一台能够正常联网的华硕电脑&#xff0c;还有一个8G以上的U盘&#xff0c;最后根据小编分享的华硕电脑用U盘重装Win10系统教程操作…

MQTT Broker 规则引擎入门:快速指南

引言 规则引擎是一种能够根据输入数据按照预设规则进行决策或执行动作的软件系统。本文将向您介绍 EMQX MQTT Broker 的规则引擎功能&#xff0c;并阐述其在 MQTT 消息转换和数据集成方面的重要作用。同时&#xff0c;我们还将提供一份快速入门指南&#xff0c;通过实例帮助您…

【Spring Cloud】Gateway的配置与使用

Gateway其实是springcloud 原生的东西&#xff0c;但是我还是想放在这里讲&#xff0c;因为我们使用nacos时&#xff0c;前端调用服务之后&#xff0c;一般会调用到我们的网关上面&#xff0c;然后网关选择我们的nacos服务&#xff0c;再调用后端的服务 文章目录 &#x1f30f;…

极客故事|AI Hackathon:从每一个微小的时刻开始

上周末&#xff0c;由 SegmentFault 思否和 ONES 主办&#xff0c;SegmentFault AI Hackathon 杭州站暨思否 11 周年特别活动在杭州圆满结束。大赛延续 Hack with AI, Rebuild Everything with AI 的主题&#xff0c;鼓励开发者使用 Generative AI 技术构建创新应用&#xff0c…