当前位置:   article > 正文

docker 镜像制作 与 CI/CD_docker cicd

docker cicd

目录

镜像到底是什么?

使用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容器内的软件或者是程序

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

镜像到底是什么?

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

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

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

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

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

使用docker创建镜像

步骤:

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

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

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

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

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

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

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

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

2、编辑requirements.txt文件

  1. [root@mysql mydocker]# vim requirements.txt
  2. [root@mysql mydocker]# cat requirements.txt
  3. Flask
  4. Redis
  5. [root@mysql mydocker]#

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

  1. [root@mysql mydocker]# vim app.py
  2. [root@mysql mydocker]# cat app.py
  3. from flask import Flask
  4. from redis import Redis, RedisError
  5. import os
  6. import socket
  7. # Connect to Redis
  8. redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
  9. app = Flask(__name__)
  10. @app.route("/")
  11. def hello():
  12. try:
  13. visits = redis.incr("counter")
  14. except RedisError:
  15. visits = "<i>cannot connect to Redis, counter disabled</i>"
  16. html = "<h3>Hello {name}!</h3>" \
  17. "<b>Hostname:</b> {hostname}<br/>" \
  18. "<b>Visits:</b> {visits}"
  19. return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
  20. if __name__ == "__main__":
  21. app.run(host='0.0.0.0', port=80)
  22. [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、使用生成的镜像生成容器 

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

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

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

  1. [root@centos8-docker mydocker1]# docker run -d -p 5644:6379 --name sc_redis_2 redis
  2. #创建redis容器
  3. [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
  4. #创建一个容器链接到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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/203095
推荐阅读
相关标签
  

闽ICP备14008679号