当前位置:首页 > 技术文章 > 请立刻停止编写 Dockerfiles 并使用 docker init

请立刻停止编写 Dockerfiles 并使用 docker init

go1239个月前 (05-16)技术文章548

您是那种认为编写 Dockerfile 和 docker-compose.yml 文件很苦楚的人之一吗? 我承认,我就是其中之一。 我总是想知道我是否遵守了 Dockerfile、 docker-c…

您是那种认为编写 Dockerfile 和 docker-compose.yml 文件很苦楚的人之一吗?


我承认,我就是其中之一。


我总是想知道我是否遵守了 Dockerfile、 docker-compose 文件的最佳编写实践,我畏惧在不知不觉中引入了安全破绽。


但是现在,我不必再担忧这个问题了,感激 Docker 的优良开发人员,他们联合了生成式人工智能,创立了一个 CLI 适用工具 — docker init。


介绍 docker init



前段时光,Docker 推出了 docker init 的通用版本。我已经尝试过,发现它非常有用,迫不及待地想在日常生涯中应用它。


什么是 docker init?


docker init 是一个命令行运用程序,可赞助初始化项目中的 Docker 资源。它依据项目标请求创立 Dockerfiles、docker-compose 文件和 .dockerignore 文件。


这简化了为项目配置 Docker 的进程,节俭时光并下降庞杂性。


最新版本的 docker init 支撑 Go、Python、Node.js、Rust、ASP.NET、PHP 和 Java。目前它只能于 Docker Desktop 一起应用,也就是说大家目前在 Linux 体系中是无法应用 docker init 的。


如何应用 docker init?


应用 docker init 很简略,只需几个简略的步骤。首先,转到您要在其中设置 Docker 资源的项目目录。


举个例子,我来创立一个根本的 Flask 运用程序。


1、创立 app.py 以及 requirements.txt

touch app.py requirements.txt


将以下代码复制到相应文件中

# app.pyfrom flask import Flask
app = Flask(__name__)
@app.route('/')def hello_docker():    return '<h1> hello world </h1'
if __name__ == '__main__':    app.run(debug=True, host='0.0.0.0')# requirements.txtFlask

2、应用 docker init 初始化


docker init 将扫描您的项目并请求您确认并选择最合适您的运用程序的模板。选择模板后,docker init 会请求您供给一些特定于项目标信息,主动为您的项目生成必要的 Docker 资源。


现在让我们来履行 docker init。


docker init


涌现如下成果,



接下来要做的就是选择运用程序平台,在我们的示例中,我们应用 python。它将建议您的项目标推举值,例如 Python 版本、端口、入口点命令。



您可以选择默认值或供给所需的值,它将创立您的 docker 配置文件以及动态运行运用程序的解释。



让我们来看看这个主动生成的配置是什么样子。


3、生成 Dockerfile 文件

# syntax=docker/dockerfile:1
# Comments are provided throughout this file to help you get started.# If you need more help, visit the Dockerfile reference guide at# https://docs.docker.com/engine/reference/builder/
ARG PYTHON_VERSION=3.11.7FROM python:${PYTHON_VERSION}-slim as base
# Prevents Python from writing pyc files.ENV PYTHONDONTWRITEBYTECODE=1
# Keeps Python from buffering stdout and stderr to avoid situations where# the application crashes without emitting any logs due to buffering.ENV PYTHONUNBUFFERED=1
WORKDIR /app# Create a non-privileged user that the app will run under.# See https://docs.docker.com/go/dockerfile-user-best-practices/ARG UID=10001RUN adduser \    --disabled-password \    --gecos "" \    --home "/nonexistent" \    --shell "/sbin/nologin" \    --no-create-home \    --uid "${UID}" \    appuser    # Download dependencies as a separate step to take advantage of Docker's caching.# Leverage a cache mount to /root/.cache/pip to speed up subsequent builds.# Leverage a bind mount to requirements.txt to avoid having to copy them into# into this layer.
RUN --mount=type=cache,target=/root/.cache/pip \    --mount=type=bind,source=requirements.txt,target=requirements.txt \    python -m pip install -r requirements.txt    # Switch to the non-privileged user to run the application.USER appuser# Copy the source code into the container.COPY . .
# Expose the port that the application listens on.EXPOSE 5000
# Run the application.CMD gunicorn 'app:app' --bind=0.0.0.0:5000


看看它,它写了一个比我更好的 Dockerfile。


它遵守人们在所有 Linkedin 和 Medium 帖子中不断告知我们的所有性能和安全最佳实践。


docker-compose.yml



它编写了 docker-compose 配置来运行运用程序。由于我们的运用程序不包括与数据库的任何衔接,因此它注释掉了数据库容器可能须要的代码。


如果您想在 Flask 运用程序中应用数据库,请从 docker-compose 文件中撤消注释 db 服务配置,创立一个包括秘密的本地文件,然后运行该运用程序。它还为我们生成了 .dockerignore 文件。


为什么应用 docker init?


docker init 使 Docker 化变得轻而易举,特殊是对于 Docker 新手来说。它清除了编写 Dockerfile 和其他配置文件的手动义务,从而节俭时光并最大限度地减少毛病。


它应用模板依据您的运用程序类型自定义 Docker 设置,同时遵守行业最佳实践。


总结一下


总而言之,docker init 完成了上面这一切。


  • 它可以编写比 90% 的孩子更好的 Docker 配置。

  • 像书呆子一样遵守最佳实践。

  • 当安全人员的工具生成包括数百个您从未想过存在的破绽的报告时,可以节俭时光、精神和来自安全人员的讥讽评论。


最后须要解释的是,就像任何其他基于人工智能的工具一样,这个工具也不完善。不要盲目信任它生成的配置。我建议您在应用配置之前再次检讨下配置。

声明:本站所有内容均为自动采集而来,如有侵权,请联系删除

相关文章

Redis连环五十二问!看谁顶得住?

Redis连环五十二问!看谁顶得住?

基本 1.说说什么是Redis? Redis是一种基于键...

用 PHP 处理 10 亿行数据!

用 PHP 处理 10 亿行数据!

今天,我将带大家一起走进“挑衅十亿行“数据的世界。当然,这个事情是依据GitHub上的一个“十亿行挑衅”(1brc)运动而来,现在正在进行,如果你没有听说过,可查看Gunnar Morlings 的 1brc 存储库。https://github.com/gunnarmorling/1brc我之所以...

2024 年的最佳 PHP 框架

2024 年的最佳 PHP 框架

在本文中,我们将预测在 2024 年持续风行的最佳 PHP 框架。我们首先将看看PHP框架是什么,什么时候该斟酌应用PHP框架,以及应用PHP框架的重要长处都是什么。我还会介绍最合适初学者的 PHP 框架以及用于 Web 开发的最佳框架。什么是PHP框架?     &...

一文读懂多家厂商的大模型训练、推理、部署策略

一文读懂多家厂商的大模型训练、推理、部署策略

4 月 20 日,第 102 期源创会在武汉胜利举行。本期邀请来自武汉人工智能研讨院、华为、MindSpore、京东云、Gitee AI 的人工智能专家,环绕【大模型竞技与性能优化】主题发表演讲。接下来就一起看看本期运动的出色瞬间吧!大合影 get ✅披萨和礼物不能少!接下来进入主题演讲回想环节。可...

服务器为什么大多用 Linux 而不是 Windows ?

服务器为什么大多用 Linux 而不是 Windows ?

前几天在知乎看到一个话题很有意思,且很有讨论意义。“服务器为什么大多用 Linux”,除了开源、好用等原因,回答也代表了各种不同人需求和看法,摘取一些分享给大家,也欢迎留言讨论。来自知乎好友“熊大你又骗俺”的回答首先在20年前,windows server+iis+asp+access 的方案,还是...