您现在的位置是: 首页 > 车型大全 车型大全

alpine镜像是什么_alpine 镜像

ysladmin 2024-06-27 人已围观

简介alpine镜像是什么_alpine 镜像       希望我能够回答您有关alpine镜像是什么的问题。我将根据我的知识库和研究成果回答您的问题。1.如何交互式地创建一个Docker镜像2.如何创建一个安全

alpine镜像是什么_alpine 镜像

       希望我能够回答您有关alpine镜像是什么的问题。我将根据我的知识库和研究成果回答您的问题。

1.如何交互式地创建一个Docker镜像

2.如何创建一个安全的Docker基镜像

3.开源镜像漏洞扫描器

4.Kubernetes应用管理器OpenKruise之CloneSet

alpine镜像是什么_alpine 镜像

如何交互式地创建一个Docker镜像

       1. 运行一个Docker实例

       Docker首先会尝试从本地取得并运行所需的镜像,如果在本地主机上没有发现,它就会从Docker公共注册中心拉取。这里,我们将会拉取镜像并在 Docker 容器中创建一个fedora实例,并连接到它的 tty 上的bash shell。

       # docker run -i -t fedora bash

       2.安装Apache网络服务器

       现在,在我们的Fedora基本镜像实例准备好后,我们将会开始交互式地安装Apache网络服务器,而不是为它创建Dockerfile。为了做到这点,我们需要在终端或者shell运行以下命令。

       # yum update

       # yum install >

       我们同时声明了谁为这个镜像负责,这个信息对上传到Docker Hub的镜像是必要的。

       就这样,你就有了往下操作的基础,接下来安装我们选好的shell,把下边的命令加上:

       sh

       RUN apk add --no-cache --update-cache bash

       CMD ["/bin/bash"]

       最终的Dockerfile是这样:

       ```sh

       FROM alpine:latest

       MAINTAINER cSphere < docker@csphere.cn >

       RUN apk add --no-cache --update-cache bash

       CMD ["/bin/bash"]

       ```

       好了,现在我们构建容器:

       sh

       $ docker build -t my-java-base-image .

       Sending build context to Docker daemon 2.048 kB

       Step 1 : FROM alpine:latest

        ---> 2314ad3eeb90

       Step 2 : MAINTAINER cSphere <docker@csphere.cn>

        ---> Running in 63433312d77e

        ---> bfe94713797a

       Removing intermediate container 63433312d77e

       ... 省略若干行

       Step 4 : CMD /bin/bash

        ---> Running in d2291684b797

        ---> ecc443d68f27

       Removing intermediate container d2291684b797

       Successfully built ecc443d68f27

       并且运行它:

       sh

       $ docker run --rm -ti my-java-base-image

       bash-4.3#

Kubernetes应用管理器OpenKruise之CloneSet

       现在打包应用到 Docker Image 变的越来越普遍了,因此镜像的安全性也变得越来越重要了;

        很多人认为只要打包成镜像应用就是安全的,但是大家也知道镜像是一个静态文件,由很多层组成,只要其中的一层发现漏洞,就会对你的应用造成威胁;

        现在也出现了很多开源的漏洞扫描工具,用来扫描镜像中可能存在的漏洞,有 Anchore , Clair 和 Trivy

        Anchore 是用 python 写的,主要功能就是对 Docker Image 的扫描,它是一个 CLI 工具,当然也可以通过 API 的方式调用; Anchore 也有一款带有界面的 Anchore Enterprise 版本

        Anchore Github

        Clair 是用 Golang 写的,主要实现了对 Docker image 的漏洞分析,用户可以调用它的 API 来扫描镜像中的漏洞

        Clair Github

        Trivy 也是用 Golang 写的,它不仅实现了对 Image 的扫描,还可以扫描文件,Git 仓库以及配置;它也是一个 CLI 工具,安装之后就可以通过命令实现扫描功能

        Tricy Github

        下面就用这三个扫描器分别对 Docker 官方统计的常用镜像扫描,扫描结果的对比如下:

       Anchore 和 Clair 相比较 Trivy 出现的时间更早,但是扫描的结果发现 Trivy 能发现更多的漏洞,尤其是对 alphine 镜像;现在大部分镜像的基础镜像都会选择 alpine ,因为它更加轻量级而且漏洞相对较少

        而 Anchore 和 Clair 对一些 alpine 镜像是扫描不出来漏洞的,但是使用 Trivy 却能够找到;之前部署的 Harbor 版本使用的扫描器是 Clair ,扫描 alphine 镜像之后没有发现漏洞,就认为是安全的;现在 Harbor2.0 之后是使用 Trivy 作为默认扫描器,对一些 alphine 就能够扫描出来漏洞了

        Trivy 相对于其他两个来说,安装更加的简单,使用也更加的方便;并且能够支持多种类型的文件的扫描,目前也是 Harbor 默认的扫描器

        参考连接:

       /2020/04/24/image-scanning-tech-compared/

       /devsecops/docker-i

       OpenKruise 是 Kubernetes 的一个标准扩展,它可以配合原生 Kubernetes 使用,并为管理应用容器、sidecar、镜像分发等方面提供更加强大和高效的能力。

        以上在官方文档都有介绍,本文主要着重实战,先讲CloneSet,其他控制器后面会陆续更新。。。

        这里使用helm来安装Kruise

        1、现在kruise Chart

        2、修改values.yaml,默认不用修改也行

        3、执行部署

        4、检查kruise部署状态

        下面我们开始来使用这些管理器

        CloneSet 控制器提供了高效管理无状态应用的能力,它可以对标原生的 Deployment,但 CloneSet 提供了很多增强功能。

        1、我们先创建一个简单的CloneSet,yaml如下

        2、部署

        CloneSet 允许用户配置 PVC 模板 volumeClaimTemplates,用来给每个 Pod 生成独享的 PVC,这是 Deployment 所不支持的。 如果用户没有指定这个模板,CloneSet 会创建不带 PVC 的 Pod。

        3、现在来创建一个带有 PVC 模板的例子

        部署

        从部署结果可以看到,每个pod都创建了一个PVC,这个是原生的Deployment不能实现的。

        4、指定 Pod 缩容

        当一个 CloneSet 被缩容时,有时候用户需要指定一些 Pod 来删除。这对于 StatefulSet 或者 Deployment 来说是无法实现的,因为 StatefulSet 要根据序号来删除 Pod,而 Deployment/ReplicaSet 目前只能根据控制器里定义的排序来删除。

        CloneSet 允许用户在缩小 replicas 数量的同时,指定想要删除的 Pod 名字。

        现在我们来修改上面例子的部署文件,指定删除 nginx-2-t55h8 这个Pod

        然后更新yaml文件

        现在看输入结果,已经没有 nginx-2-t55h8 这个Pod了

        这个功能很实用,比如某台机器故障了,或者负载太高,你想删除指定的pod。

        5、升级功能

        现在我们来尝试原地升级Pod功能,把nginx镜像由nginx:alpine 升级为 nginx:latest

        首先修改yaml文件,这里只粘贴出文件的修改的部分

        执行升级

        从输出可以看到, Container nginx definition changed, will be restarted ,Pod并没有删除在重建,而是在原来的基础上直接更新了镜像文件,并重启了服务。

        原地升级减少了删除重建环节,节省了升级时间和资源调度频率。。。

        6、Partition 分批灰度

        Partition 的语义是 保留旧版本 Pod 的数量或百分比,默认为 0。这里的 partition 不表示任何 order 序号。

        现在我将上面的例子的 image 更新为 nginx:1.19.6-alpine 并且设置 partition=3

        查看结果

        从输出信息我们可以看到, Update Revision已经更新为nginx-2-7b44cb9c8 ,而Pod中只有两个Pod升级了。

        由于我们设置了 partition=3,控制器只升级了 2 个 Pod。

        Partition 分批灰度功能完善了原生的Pod升级方式,使得升级能够进行更灵活,能够进行灰度上线。超赞。。。

        7、最后再演示下发布暂停

        用户可以通过设置 paused 为 true 暂停发布,不过控制器还是会做 replicas 数量管理:

        以上就是整个发布暂停的演示,这个功能好处就是;我们在升级的过程中可以随时中断升级。

        除此之外,CloneSet还有很多特性,例如:MaxUnavailable 最大不可用数量、MaxSurge 最大弹性数量、升级顺序、打散策略、生命周期钩子等,鉴于文章篇幅,这些特性不再演示了,有需要的可以查看官方文档。

       今天关于“alpine镜像是什么”的讨论就到这里了。希望通过今天的讲解,您能对这个主题有更深入的理解。如果您有任何问题或需要进一步的信息,请随时告诉我。我将竭诚为您服务。