当前位置: 首页 > news >正文

docker init 生成Dockerfile和docker-compose.yml —— 筑梦之路

官网:https://docs.docker.com/engine/reference/commandline/init/

简介

docker init是一个命令行实用程序,可帮助初始化项目中的 Docker 资源。.dockerignore它根据项目的要求创建 DockerfileCompose 文件。这简化了为项目配置 Docker 的过程,节省时间并降低复杂性。
最新版本docker init支持 Go、Python、Node.js、Rust、ASP.NET、PHP 和 Java

如何使用

 1. 创建一个flask应用

mkdir  flaskcd flasktouch app.py requirements.txt
# app.py
from flask import Flaskapp = 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

2. 生成Dockerfile docker-compose.yaml

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

选择应用程序平台,对于我们正在使用的示例,python.它将为您的项目建议值,例如Python版本port、entrypoint命令 

 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.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=1WORKDIR /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

4. 查看生成的docker-compose.yaml文件

 

它编写了 docker-compose 配置来运行应用程序。由于我们的应用程序不包含与数据库的任何连接,因此它注释掉了数据库容器可能需要的代码。
如果您想在 Flask 应用程序中使用数据库,请从 docker-compose 文件中取消注释 db 服务配置,创建一个包含机密的本地文件,然后运行该应用程序。它还生成了 .dockerignore文件。

 

相关文章:

  • 27-4 文件上传漏洞 - 黑名单绕过
  • 确保云原生部署中的网络安全
  • 第二十二章 构建和配置 Nginx (UNIX® Linux macOS) - 示例:为特定路径上的所有流量启用 CSP 路由
  • JavaScript 变量的隐藏规则
  • 【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)
  • Odoo17免费开源ERP开发技巧:如何在表单视图中调用JS类
  • 基于深度学习YOLOv8+Pyqt5的工地安全帽头盔佩戴检测识别系统(源码+跑通说明文件)
  • 开源堡垒机Jumpserver安装教程
  • 阿里云-云服务器ECS新手如何建网站?
  • Java Web项目—餐饮管理系统Day10-Linux-基本知识点(一)
  • 深度学习实战模拟——softmax回归(图像识别并分类)
  • 信号处理--基于正则化聚合的共空间模态(CSP)脑电信号分类
  • 计算机视觉之三维重建(1)---摄像机几何
  • Python QT 之PySide6简单入门
  • 获取分时计算的小时数据
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 「面试题」如何实现一个圣杯布局?
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • ECMAScript6(0):ES6简明参考手册
  • Hibernate最全面试题
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript-Array类型
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Laravel 实践之路: 数据库迁移与数据填充
  • linux学习笔记
  • mysql innodb 索引使用指南
  • passportjs 源码分析
  • Redis在Web项目中的应用与实践
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 七牛云假注销小指南
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Java总结 - String - 这篇请使劲喷我
  • 说说我为什么看好Spring Cloud Alibaba
  • #HarmonyOS:Web组件的使用
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (day6) 319. 灯泡开关
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (二)WCF的Binding模型
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (原創) 物件導向與老子思想 (OO)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)重识new
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [<MySQL优化总结>]
  • [ARM]ldr 和 adr 伪指令的区别
  • [C/C++随笔] char与unsigned char区别
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符