当前位置:首页 > 数码 > Dockerfile-Buildpack-替代-轻松构建容器镜像-使用 (docker logs)

Dockerfile-Buildpack-替代-轻松构建容器镜像-使用 (docker logs)

admin7个月前 (05-14)数码42

在现代的云原生交付领域中,效率、速度和简捷性至关重要。Buildpacks(构建包)已成为一种强大的工具,彻底改变了创建项目的镜像方式。相较于传统的费时费力的 Dockerfile 创建和维护方法,Buildpacks 提供了一种简化且自动化的解决方案。借助 Buildpacks,我们可以轻松构建 Docker 镜像,无论我们处理的项目数量如何,而无需编写繁琐的 Dockerfile。

什么是 Dockerfile?

Dockerfile 是一种基于文本文件的构建描述工具,用于定义和自动化 Docker 镜像的构建过程。通过一系列指令和配置,开发人员可以精确控制镜像构建的各个环节,从基础镜像的选择到软件包的安装和配置,以及运行时的设置,从而实现可重复、可控和可维护的镜像构建流程。

基于 Dockerfile 的自定义镜像构建流程通常如下所示:

  • 创建 Dockerfile,其中包含构建镜像所需的指令和配置。
  • 使用 docker build 命令构建镜像,该命令将解析和执行 Dockerfile 中的指令和操作,生成一系列镜像层,并最终合并为一个完整的 Docker 镜像。
  • 将生成的镜像推送到镜像仓库中,以便在需要时部署到容器环境中。

你所不了解的 Buildpack

Buildpacks(构建包)是一种开放标准和工具集,用于自动化构建容器镜像。Buildpacks 提供了一种简化和标准化的方法,用于将应用程序代码转换为可执行的、隔离的容器镜像。Buildpacks 的核心思想是根据应用程序的语言、框架和依赖项等信息,自动检测和提供所需的运行时环境和依赖项。

使用 Buildpacks,我们只需提供应用程序的源代码,Buildpacks 将根据项目的特性自动处理构建过程。Buildpacks 会分析应用程序的结构,检测使用的编程语言和框架,然后根据需要安装相关运行时和依赖项(例如 pom.xml、build.gradle 或 requirements.txt 文件)。我们只需为每个项目运行一个简单的命令,即可轻松集成到 CI/CD 管道中以自动创建 Docker 镜像。这种自动化的过程简化了容器镜像的构建和维护,减少了手动操作和配置的负担,还降低了出错的风险。

通常而言,Buildpacks 的魅力在于智能性和自动化能力。Buildpacks 能够根据我们的项目语言和结构,自动选择和配置所需的软件包和依赖项,从而消除了手动指定和管理依赖关系的繁琐过程,使我们可以专注于编写代码而非繁琐的基础设施设置。

另一个 Buildpacks 的优势是其与 CI/CD 流水线的集成。借助 Buildpacks,我们可以轻松地将 Docker 镜像构建过程整合到持续集成和持续交付流程中。Buildpacks 支持各种流行的 CI/CD 工具和平台,例如 Jenkins、GitLab 以及 Tekton 等,使得容器构建和部署的自动化变得易如反掌。

使用 Buildpacks 的好处

使用 Buildpacks 进行容器镜像构建具有以下主要好处:

  • 自动化和简化:Buildpacks 自动化了 Docker 镜像构建过程,消除了编写和维护 Dockerfile 的繁琐工作。
  • 一致性:Buildpacks 确保所有镜像都是以一致的方式构建的,从而提高了可重复性和可维护性。
  • 语言无关性:Buildpacks 独立于语言,支持各种编程语言和框架,消除了一个孤立仓库需要多个 Dockerfile 的需求。
  • 速度:Buildpacks 通常比传统的 Dockerfile 构建更快,因为它们避免了 Dockerfile 解析和执行的开销。
  • 安全:Buildpacks 可以轻松集成到 CI/CD 流水线中,从而提高了安全性,减少了人为错误的可能性。

结论

借助 Buildpacks,我们可以显著加快容器镜像构建速度,减少出错风险,并专注于构建和部署创新应用程序。在云原生生态系统中,Buildpacks 已成为一种必不可少的工具,它简化了镜像构建过程,提高了效率和可靠性。通过拥抱 Buildpacks,我们可以释放云原生的全部潜力,构建和交付更有弹性、可扩展和可维护的现代应用程序。


Docker是什么Docker的安装和卸载Docker中关于镜像的基本操作

Docker是什么?

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

Docker官方文档比较全,建议有能力的读一下官方文档。

Docker的三个概念

1、镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

2、容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

3、仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

Docker的安装和卸载

Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:

查看Docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。

Docker中关于镜像的基本操作

安装完Docker引擎之后,就可以对镜像进行基本的操作了。

我们从官方注册服务器()的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:

以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。

(1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本

此时利用exit退出该容器,然后查看docker中运行的程序(容器):

这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:

其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。

此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。

利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。

(2)利用Dockerfile创建镜像

Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作。一个简易的Dockerfile文件如下所示,官方说明:Dockerfile reference:

-# 说明该镜像以哪个镜像为基础

FROM centos:latest

-# 构建者的基本信息

MAINTAINER xianhu

-# 在build这个镜像时执行的操作

RUN yum update

RUN yum install -y git

-# 拷贝本地文件到镜像中

COPY ./* /usr/share/gitdir/

有了Dockerfile之后,就可以利用build命令构建镜像了:

其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile。

构建完成之后,同样可以使用docker images命令查看:

以上就是构建自己镜像的两种方法。其中也涉及到了容器的一些操作。如果想删除容器或者镜像,可以使用rm命令,注意:删除镜像前必须先删除以此镜像为基础的容器。

镜像其他操作指令:

Docker中关于容器的基本操作

在前边镜像的章节中,我们已经看到了如何基于镜像启动一个容器,即docker run操作。

这里-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)。此时如果使用exit退出,则容器的状态处于Exit,而不是后台运行。如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl+p ctrl+q 退出,此时容器的状态为Up。

使用

除了这两个参数之外,run命令还有很多其他参数。其中比较有用的是-d后台运行:

这里第二条命令使用了-d参数,使这个容器处于后台运行的状态,不会对当前终端产生任何输出,所有的stdout都输出到log,可以使用docker logs container_name/container_id查看。

启动、停止、重启容器命令:

后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:

删除容器的命令前边已经提到过了:

Docker中关于仓库的基本操作

Docker官方维护了一个DockerHub的公共仓库,里边包含有很多平时用的较多的镜像。除了从上边下载镜像之外,我们也可以将自己自定义的镜像发布(push)到DockerHub上。

在镜像操作章节中,我们新建了一个xianhu/centos:git镜像。

(1)访问,如果没有账号,需要先注册一个。

(2)利用命令docker login登录DockerHub,输入用户名、密码即可登录成功:

(3)将本地的镜像推送到DockerHub上,这里的xianhu要和登录时的username一致:

(4)以后别人就可以从你的仓库中下载合适的镜像了。

对应于镜像的两种创建方法,镜像的更新也有两种:

创建容器之后做更改,之后commit生成镜像,然后push到仓库中。

更新Dockerfile。在工作时一般建议这种方式,更简洁明了。

这里再一次回顾一下三个重要的概念:镜像、容器、仓库:

从仓库(一般为DockerHub)下载(pull)一个镜像,Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker执行commit方法将一个容器转化为镜像。Docker利用login、push等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序了。

利用Docker创建一个用于Flask开发的Python环境

上边已经解释和练习了Docker的基本操作命令,下边以实例的形式完整走一遍流程。

我们创建一个用于Flask开发的Python环境,包含Git、Python3、Flask以及其他依赖包等。

完整命令如下:

Docker的功能和特性还有很多,各种运行命令、参数等也都有待学习和练习,比如如何管理数据、如何管理网络、如何互相配合工作、如何编写更专业的Dockerfile等。本文先入门为主,以后有时间再慢慢更新关于Docker的知识。

docker buildx 开启及使用(模拟器构建和远程构建)

默认情况下,buildx已经在安装包里面了 在 ~//增加,是家目录的client端的配置不是/etc下的配置 experimental: enabled 即可永久开启buildx命令 为了良好的支持性,如果是centos版本需要升级内核到5.12.9才能正常使用 内核升级过程(略) 在 Docker 19.03+ 版本中可以使用 docker buildx build 命令使用 BuildKit 构建镜像。 该命令支持--platform 参数可以同时构建支持多种系统架构的 Docker 镜像,大大简化了构建步骤。 1、由于 Docker 默认的 builder 实例不支持同时指定多个 --platform ,我们必须首先创建一个新的 builder 实例。 $ docker buildx create --name mybuilder --driver docker-container 2、使用新创建好的builder实例$ docker buildx use mybuilder 3、查看已有的builder实例$ docker buildx ls 4、安装模拟器(用于多平台镜像构建)$ docker run --privileged --rm tonistiigi/binfmt --install all docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes 5、本地构建镜像并推送$ docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t test/arch --push -f ./dockerfile . 准备: 192.168.1.1amd系统 buildx 本机 (以下操作都需要在该节点执行) 192.168.1.2arm系统远端机 (只需要装好docker环境即可) buildx 支持远程构建,默认本机使用的是套接字,然后再添加一个远端的连接即可 先在buildx本机创建一个节点 查看该节点 配置ssh 到user1@192.168.1.1免密登录 创建远程节点关联 两种方式各有优劣, 模拟器的方式不太稳定,需要本机服务器驱动支持,部分镜像可能打不出来 远程构建需要准备相应的服务器资源,比较浪费资源,但相对稳定 笔者使用远程构建方式

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 容器

“Dockerfile-Buildpack-替代-轻松构建容器镜像-使用 (docker logs)” 的相关文章

容器资源自愈-深入了解其益处和最佳实践 (容器资源限制)

容器资源自愈-深入了解其益处和最佳实践 (容器资源限制)

前言 容器作为一种新的资源类型,已经应用于各大公司,G行也不例外。容器的轻量化特性使得它能够在故障发生时快速进行重建,将对业务的影响降到最低,我们通常称它为自愈。 容器自愈本质 谈到容器自...

Go-调度器-理解-深入剖析云原生基础架构-容器以及Linux (调度器模式)

Go-调度器-理解-深入剖析云原生基础架构-容器以及Linux (调度器模式)

在容器中部署的 Go 应用程序通常需要设置 CPU 限制,以确保容器不会耗尽主机上的所有 CPU。但是,由于 Go 运行时不知道在容器上设置的 CPU 限制,因此它可能会使用所有可用的 CPU,从...

容器与虚拟机的优劣势分析-全面解读云计算架构选择 (容器与虚拟机有什么不同)

容器与虚拟机的优劣势分析-全面解读云计算架构选择 (容器与虚拟机有什么不同)

简介 在现代云计算中,容器和虚拟机 (VM) 都是常用的技术,它们在实现资源隔离和应用程序部署方面有着不同的方式和特点。本文将对容器和虚拟机的区别进行详细探讨,以帮助读者更好地理解它们的应用场景...

Docker的替代品-Containerd容器管理 (docker logs)

Docker的替代品-Containerd容器管理 (docker logs)

Introduction CRI-O is a container runtime engine developed by Red Hat. It is a lightweight altern...

不要把容器当做宇宙的中心!-Docker成立十周年-1号员工反思

不要把容器当做宇宙的中心!-Docker成立十周年-1号员工反思

作者丨Sam Alba 编译丨诺亚 本文作者 Sam Alba 目前是 Dagger 的联合创始人兼工程副总裁,也是前 Docker 的工程副总裁。他于 2010 年作为第一位员工加入...

几款热门容器化编排工具对比

几款热门容器化编排工具对比

什么是容器管理? 容器管理是一系列涉及部署、运行、监控和维护容器化应用程序的操作,以有效管理这些应用程序。 容器编排工具 Kubernetes Docker...

Kubernetes-容器编排的行业标准 (kubernetes与docker的关系)

Kubernetes-容器编排的行业标准 (kubernetes与docker的关系)

Kubernetes(简称K8s)是一个开源的容器编排平台,它能够自动化管理容器的部署、扩展、维护和升级。本文将深入探讨 Kubernetes 的概念、特点、应用场景以及未来发展趋势。 1....

容器资源分配策略-兼顾稳定性和成本效益 (容器资源管理)

容器资源分配策略-兼顾稳定性和成本效益 (容器资源管理)

弹性云分级保障体系:确保容器服务稳定性 前言 随着假期出行的兴起和需求的增加,弹性云服务面临着巨大的稳定性保障压力。本文将介绍弹性云分级保障体系,旨在通过提供明确的容器资源保障等级,确保不同优先级...