【Docker】5. Dockerfile 构建和管理容器化应用程序

news2024/12/27 12:48:00

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 1️⃣ Dockerfile介绍
      • 基本语法
      • 指令
    • 2️⃣ 实战:Python 的 Flask Web
      • 代码
      • 编译运行
      • 发布到服务器
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

开发环境

版本号描述
文章日期2023-12-15
操作系统Win10 - 22H222621.2715
WSL2
Docker Desktop4.26.0

1️⃣ Dockerfile介绍

Dockerfile 是 Docker 的核心组成部分之一,它是一个文本文件,用于定义构建 Docker 镜像。

使用流程:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run运行镜像
4、docker pull 发布镜像

基本语法

语法说明:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每个指令都会创建提交一个新的镜像层,并提交

指令

Dockerfile 的基本结构由一系列的指令组成,每个指令都以大写字母开头,并且可以有参数。下面是一些常用的 Dockerfile 指令:

  • FROM:指定基础镜像,例如 FROM ubuntu:latest 表示以最新的 Ubuntu 镜像作为基础。
  • RUN:在容器中执行命令,例如 RUN apt-get update && apt-get install -y python3 表示在容器中更新软件源并安装 Python 3。
  • COPY:将文件从主机复制到容器中,例如 COPY app.py /app/ 表示将主机上的 app.py 文件复制到容器中的 /app/ 目录。
  • WORKDIR:设置工作目录,例如 WORKDIR /app 表示将容器的工作目录设置为 /app。
  • EXPOSE:声明容器要暴露的端口,例如 EXPOSE 8000 表示容器将会监听端口 8000。
  • CMD:定义容器启动时要执行的命令,例如 CMD ["python3", "app.py"] 表示在容器启动时执行 python3 app.py。

形象的表示:
在这里插入图片描述

2️⃣ 实战:Python 的 Flask Web

代码

文中代码地址: https://gitcode.net/kinghzking/MyOpen/-/tree/master/course/Docker/5-Dockerfile

Dockerfile代码如下:

# 使用官方 Python 3 镜像作为基础镜像
FROM python:3

# 设置工作目录
WORKDIR /app

# 将当前目录下的 requirements.txt 复制到容器中
COPY requirements.txt .

# 安装应用程序依赖项
RUN pip install --no-cache-dir -r requirements.txt

# 将当前目录下的所有文件复制到容器中的 /app 目录
COPY ./src .

# 暴露容器的端口
EXPOSE 5000

# 定义环境变量
ENV FLASK_APP=app.py

# 运行应用程序
CMD ["flask", "run", "--host=0.0.0.0"]


requirements.txt代码如下:

flask

app.py代码如下:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()


编译运行

  1. build
    docker buildx build . -t my-python-flask-web:1.0
    注意build之后的 .,否则会报错:ERROR: "docker buildx build" requires exactly 1 argument.
  1. run
    docker run --name my-python-flask-web -p 5000:5000 my-python-flask-web:1.0
  • –name 指定 容器名字
  • -p 绑定端口
    界面操作:
    在这里插入图片描述
  1. 如果再次启动,使用 start 命令
    docker start my-python-flask-web
  1. 本地打开页面http://127.0.0.1:5000/
    在这里插入图片描述

发布到服务器

有点像git,先提交,在push
docker tag my-python-flask-web:1.0 kinghz/my-python-flask-web:1.0
docker push kinghz/my-python-flask-web:1.0
在这里插入图片描述
稍等片刻,即可完成发布,在docker上可以查看到信息
在这里插入图片描述

🛬 文章小结

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件。
Docker镜像逐渐成为企业交付的标准,非常需要学习。

📖 参考资料

  • 文中代码地址: https://gitcode.net/kinghzking/MyOpen/-/tree/master/course/Docker/5-Dockerfile
  • 【WSL】Windows下的Linux子系统使用方法指南 https://blog.csdn.net/kinghzking/article/details/134984077
  • 【Docker】WSL 2 上的 Docker 搭建和入门 https://blog.csdn.net/kinghzking/article/details/134994407
  • 【Docker】常用命令 https://blog.csdn.net/kinghzking/article/details/135024182
  • 【Docker】实战:nginx、redis https://blog.csdn.net/kinghzking/article/details/135026869
  • 官网文档: https://docs.docker.com/reference/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1316825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dagger2基本使用2之子组件

一,基本使用,完成一个注入 1,创建作用域 //自定义作用域,作用域只是一个名称,随便起啥名字都可以,这里取一个全局单利的名字 Scope Documented Retention(RUNTIME) public interface GlobalSingleton { }…

LVS负载均衡器(DR模式)+nginx七层代理+tomcat多实例+php+mysql 实现负载均衡以及动静分离、数据库的调用!!!

目录 前言 一、nfs共享存储,为两个节点服务器提供静态网页共享 二、nginx作为lvs的后端节点服务器,完成lo:0网卡配置,以及内核参数设置,还有设置路由表 步骤一:先完成nfs共享存储挂载 步骤二:完成lo:0网…

QT----第三天,Visio stdio自定义封装控件,鼠标事件,定时器,事件分发器过滤器,绘图事件

目录 第三天1 自定义控件封装2 QT鼠标事件3 定时器4 event事件分发器5 事件过滤器6 绘图事件Qpainter 源码:CPP学习代码 第三天 1 自定义控件封装 新建一个QT widgetclass,同时生成ui,h,cpp文件 在smallWidget.ui里添加上你想要的控件并调试大小 回到…

Linux下MySQL的安装部署

MySQL数据库存在多种版本,不同的版本在不同的平台上(OS,也就是操作系统上)安装方式可能有所不同,因此安装时一定要参数官方文档进行安装。 MySQL :: MySQL Documentation 选择需要的MySQL官方提供的不同版本&#xff0…

【谭浩强C语言】导言-C知识点汇总

一、初衷 C语言基本是各大院校工科必修课,C语言也是单片机、嵌入式系统的基础开发语言,很多老师们都各显神通的把C语言精讲地很到位,咱们CSDN的技能树也提供了很棒的学习平台。那么,为什么还是打算开个专栏再整理整理呢&#xff…

Kubernetes实战(十四)-k8s高可用集群扩容master节点

1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的,节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色:master 和 node。 master 节点:master 节点负责控制和管理整个集群…

对自己的博客网站进行DOS攻击

对自己的博客网站进行DOS攻击 先说明一点,别对别人的网站进行ddos/dos攻击(dos攻击一般短时间攻击不下来),这是违法的,很多都有自动报警机制,本篇博客仅用于学习,请勿用于非法用途 安装kaili Linux 进入KALI官网,下载iso镜像文件 vmware新建虚拟机,选择自定义 点击下一步 …

LeetCode2961双模幂运算(相关话题:快速幂)

题目描述 给你一个下标从 0 开始的二维数组 variables ,其中 variables[i] [ai, bi, ci, mi],以及一个整数 target 。 如果满足以下公式,则下标 i 是 好下标: 返回一个由 好下标 组成的数组,顺序不限 。 示例 &…

《面向机器学习的数据标注规程》摘录

说明:本文使用的标准是2019年的团体标准,最新的国家标准已在2023年发布。 3 术语和定义 3.2 标签 label 标识数据的特征、类别和属性等。 3.4 数据标注员 data labeler 对待标注数据进行整理、纠错、标记和批注等操作的工作人员。 【批注】按照定义…

加权准确率WA,未加权平均召回率UAR和未加权UF1

加权准确率WA,未加权平均召回率UAR和未加权UF1 1.加权准确率WA,未加权平均召回率UAR和未加权UF12.参考链接 1.加权准确率WA,未加权平均召回率UAR和未加权UF1 from sklearn.metrics import classification_report from sklearn.metrics impor…

响应者链概述

响应者链 iOS事件的3大类型 Touch Events(触摸事件)Motion Events(运动事件,比如重力感应和摇一摇等)Remote Events(远程事件,比如用耳机上得按键来控制手机) 触摸事件 处理触摸事件的两个步骤 寻找事件的最佳响应者事件的响应在响应链中的传递 寻…

MAC上配置esp32的开发环境

1、安装Thonny. 2、你需要一块ESP32开发板。MicroPython支持ESP32芯片本身,从而可运行于任何一块搭载ESP32 芯片的开发板上。改板子的主要特征在于GPIO针脚是连接外界的,并且它包含了一个内置的 USB串口转换器,该转换器可以使你的电脑通过UAR…

springboot——定时任务、异步任务

springboot——定时任务、异步任务 一、定时任务1、创建一个定时任务、时间配置文件2、springboot主程序开启定时任务 EnableScheduling3、使用 Scheduled 注解 二、定时任务、异步执行。1、springboot主程序开启异步任务 EnableAsync2、方法上增加 Async 注解,标识…

谷歌浏览器标签页显示内存使用率

Chrome 桌面浏览器的新更新现在可让您查看每个标签页占用了多少内存,这可以帮助您确定哪些标签页占用了多少内存,网站正在减慢您笔记本电脑的速度。 今年早些时候在 Google Chrome 中引入内存节省程序之后,Google 又发布了一项功能&#xff…

深入理解CI/CD与Docker集成:自动化构建和部署的完整指南

在当今软件开发的快节奏环境中,自动化构建和部署是实现敏捷开发和DevOps实践的关键。Docker容器技术为这一过程引入了更高的灵活性和一致性。本文将深入研究如何将持续集成/持续部署(CI/CD)与Docker集成,提供更详细、实用的示例代…

直接插入排序_希尔排序

文章目录 直接插入排序原理步骤视频演示代码实现特性 希尔排序原理步骤图像演示代码实现希尔排序的分析特性 直接插入排序和希尔排序的比较 直接插入排序 直接插入排序(Straight InsertionSort)是一种最简单的排序方法,其基本操作是将一条记录…

智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.…

MinGW编译Python至pyd踩坑整理

title: MinGW编译Python至pyd踩坑整理 tags: [Python,CC] categories: [开发记录,Python] date: 2023-12-12 13:48:20 description: sidebar: [‘toc’, ‘related’,‘recent’] 注意需要魔法 用scoop自动安装配置MinGw 需要魔法,不需要手动配置mingw scoop in…

FreeRDP WebConnect Url 任意文件读取漏洞复现

0x01 产品简介 FreeRDP-WebConnect 是一个开源HTML5代理,它提供对使用RDP的任何Windows服务器和工作站的Web访问。 0x02 漏洞概述 FreeRDP WebConnect Url 接口处存在任意文件读取漏洞,攻击者可通过该漏洞读取系统重要文件(如数据库配置文…

自动驾驶学习笔记(十九)——Planning模块

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 Planning作用 Planning内容 Plannin…