目录
镜像到底是什么?
使用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等容器技术准备的,包含了一个或多个应用程序及其运行所需的库和环境等。虚拟机镜像则是为虚拟化技术准备的,包含了一个完整的操作系统及其相关软件和配置。
使用镜像可以方便地创建、部署和管理软件开发、测试和生产环境。它们可以帮助开发者和管理员节省时间和精力,避免出现由于环境不一致导致的兼容性问题等。
总之,镜像是计算机中一个重要的概念,是一个数据的复制品,可用于创建、部署和管理软件环境和应用程序。它在软件开发和计算机系统管理中有着广泛的应用
[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里面接的命令,必须一直在容器里运行,在前台运行。
只要容器里的运行命令结束,容器就会退出
[root@mysql mydocker]# vim requirements.txt
[root@mysql mydocker]# cat requirements.txt
Flask
Redis
[root@mysql mydocker]#
[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 = "cannot connect to Redis, counter disabled"
html = "Hello {name}!
" \
"Hostname: {hostname}
" \
"Visits: {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]#
[root@mysql mydocker]# docker build -t sc-hello_1 .
docker images
[root@centos8-docker mydocker1]# docker pull redis
[root@centos8-docker mydocker1]# docker run -d -p 6677:80 --name sc_hello_2 sc_friendlyhello_2
[root@centos8-docker mydocker1]# docker ps
#查看正在运行的容器
因为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数据库容器
CI/CD 持续集成--》持续部署 --》持续交付
CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。
CI/CD的核心概念是持续集成、持续交付和持续部署。
具体来说,CI/CD可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务统称为“CI/CD管道”,由开发和运维团队协同支持。
互联网软件的开发和发布,目前已经形成了一套标准流程,一般可以分为以下几个阶段:
开发——构建——集成——测试——交付——部署
持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
注:持续集成简单来说,就是频繁的将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
它的好处有以下两种:
- 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
- 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
注:持续部署的前提是能自动化完成测试、构建、部署等步骤。
持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
持续交付指的是频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
注:持续交付可以看作持续集成的下一步
很多公司都会使用jenkins 而它是CI/CD 持续集成/持续交付的杰出的软件
官方网站:Jenkins