首页 > 其他分享 >不会还有人不会用docker init吧?

不会还有人不会用docker init吧?

时间:2024-03-04 15:23:40浏览次数:19  
标签:-- app 应用程序 init docker Docker 不会

<iframe border="0" frameborder="no" height="86" marginheight="0" marginwidth="0" src="//music.163.com/outchain/player?type=2&id=2021373243&auto=1&height=66" width="330"></iframe>

现在立刻马上给我停止编写 Dockerfiles,改为使用docker init 编写 Dockerfile and docker-compose配置文件!

您是那些觉得写作Dockerfilesdocker-compose.yml文件很痛苦的人之一吗?

至少我从来没有享受过。

我总是想知道我是否遵循了最佳实践,并且在编写配置文件时是否在不知不觉中引入了安全Dockerfile漏洞docker-compose

好吧,我不必再担心这个问题了,感谢 Docker 的优秀人员,他们更好地利用了生成式人工智能,而没有引起太多噪音。

他们创建了一个 CLI 实用工具 —docker init

介绍 docker init

docker initDocker上个月正式发布。我已经尝试过,发现它非常有用,迫不及待地想在日常生活中使用它。

什么是 docker init

docker init是一个命令行实用程序,可帮助初始化项目中的 Docker 资源。.dockerignore它根据项目的要求创建 DockerfileCompose 文件和文件。

这简化了为项目配置 Docker 的过程,节省时间并降低复杂性。

最新版本docker init支持 Go、Python、Node.js、Rust、ASP.NET、PHP 和 Java。它可与 Docker Desktop 一起使用。

如何使用docker init

使用起来docker init很简单,只需几个简单的步骤。首先,转到要设置 Docker 资产的项目目录。

Let me Create a basic Flask app.

touch app.py requirements.txt

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

# app.py
from 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.txt
Flask

让我们看看它的神奇之处docker init

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

docker initinit

接下来要做的是选择应用程序平台,例如我们使用的是python。它将建议您的项目的推荐值,如Python版本, port, entrypoint 命令。

您可以选择默认值或提供所需的值,它将创建您的 docker 配置文件以及动态运行应用程序的说明。

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

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.7
FROM 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=10001
RUN 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。

它遵循人们在所有示例中不断告诉我们的所有性能和安全最佳实践。

compose.yaml

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

如果您想在 Flask 应用程序中使用数据库,请从 docker-compose 文件中取消注释 db 服务配置,创建一个包含机密的本地文件,然后运行该应用程序。它还生成了 us.dockerignore文件。

为什么使用docker init

docker init使 docker 化变得轻而易举,特别是对于 Docker 新手来说。它消除了编写 Dockerfile 和其他配置文件的手动任务,从而节省时间并最大限度地减少错误。

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

结尾

总而言之,docker init做到了一切。

编写比这里 90% 的同学更好的 Docker 配置。
像书呆子一样遵循最佳实践。
当安全人员的工具生成包含数百个您从未想过存在的漏洞的报告时,可以节省时间、精力和来自安全人员的讽刺评论。

  • 免责声明:就像任何其他基于人工智能的工具一样,这个工具也不完美。不要盲目相信它生成的配置。我建议您在推进配置之前再次查看配置。

标签:--,app,应用程序,init,docker,Docker,不会
From: https://www.cnblogs.com/pengpengboshi/p/18051872

相关文章

  • docker命令
    1.docker卸载卸载Docker:sudoyumremovedocker-cedocker-ce-clicontainerd.io删除目录和卷sudorm-rf/var/lib/dockersudorm-rf/var/lib/containerd 2.dockerimages[options]dockerimages-adocker0mages-q 3.dockersearch[option]镜像名字d......
  • docker环境部署容器之间互通:Hyperf+MySQL
    在docker中要使Hyperf和Mysql网络互通,则需要在创建相应容器的时候指定共享网络,步骤如下:一、首先我们指定共享网络dockernetworkcreate--subnet172.18.0.1/16test  //整条命令复制执行就行不用改这个ip二、创建hyperf命令dockerrun--namehyperf-vD:\hyperf202......
  • Docker容器构建
    弊端:镜像的使用者不知道镜像构建细节镜像的构建者忘记构建的细节需要手动操作一、使用Dockerfile来定制镜像1.编写DockerfileDockerfile是一个文本文件,用以说明镜像的构建步骤,通过dockerbuild命令进行自动的构建举个例子FROMubuntu:18.04COPYa.txt/a.txtRUNec......
  • 在Docker中,网络模式有哪些?
    在Docker中,网络模式是用来定义容器如何与宿主机和其他容器进行网络通信的。以下是Docker中常见的网络模式及其详细解释:Bridge模式(桥接模式):这是Docker的默认网络模式。当创建一个容器时,Docker会为其分配一个独立的网络命名空间,并在宿主机上创建一个虚拟网桥(默认为docker0),容器......
  • 在Docker中,资源限制原理是什么?
    在Docker中,资源限制主要是通过Linux内核的ControlGroups(cgroups)和Namespaces技术来实现的。1.ControlGroups(cgroups)cgroups是Linux内核的一个特性,它提供了一种机制来限制、记录、隔离进程组使用的物理资源(如CPU、内存、磁盘I/O等)。当Docker创建一个容器时,它会为该......
  • 在Docker中,docker run cmd entrypoint 有什么区别?
    在Docker中,dockerrun、CMD和ENTRYPOINT是相互关联又各有不同的概念,它们都涉及到如何配置和启动容器。下面详细介绍它们的区别和联系:dockerrundockerrun是Docker客户端命令,用于创建一个新的容器并运行其中的应用程序。当你执行dockerrun时,你可以指定一系列参数,如......
  • Docker 常用指令
    1.指令FROM指定base镜像MAINTAINER设置镜像的作者,可以是任意字符串COPY将文件从buildcontext复制到镜像,COPY支持两种形式:COPYsrcdest与COPY["src","dest"],src只能指定buildcontext中的文件或目录ADD与COPY类似,从buildcontext复制文件到镜像。不......
  • 使用 docker-compose 部署 Jenkins
    Jenkins是一款非常流行的开源持续集成工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。有关Jenkins的详细介绍,可以查看官网:https://www.jenkins.io本篇博客主要介绍如何通过docker-compose快速部署Jenkins工具,也让大家避免踩坑我的CentOS7虚拟机ip地址是1......
  • Linux安装Docker并搭建MySql、Redis、RabbitMQ
    1.1安装docker(1)删除老版本sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\......
  • Docker启动MySQL容器自动停止问题
    可能是mysql使用的内存过多,导致系统杀死了对应的进程mysql启动后设置限制内存在宿主机任意位置下:vimdocker.cnf写入:skip-host-cacheskip-name-resolveperformance_schema_max_table_instances=400table_definition_cache=400table_open_cache=256performance_......