Docker入门使用
用一个hello world的小例子来入门docker
在 Docker 容器中部署 Python + Flask 的简单 Hello World 项目,需要遵循以下流程:
- 编写应用程序
首先,在本地计算机上编写一个简单的 Python+Flask 应用程序,例如:
# hello.pyfrom flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello, World!"if __name__ == '__main__':app.run(debug=True, host='0.0.0.0')
该应用程序创建了一个简单的 Flask 应用程序,监听本地的 5000 端口,当访问根路径(/)时,返回 “Hello, World!” 信息。
- 创建 Dockerfile
接下来,创建一个 Dockerfile ,指定如何在 Docker 镜像中构建和运行 Python + Flask 应用程序。Dockerfile主要作用就是来生成镜像images。例如:
# Dockerfile# 这里选一个在docker公共库中有的python版本即可
FROM python:3.10.12-slim-bookworm# requirements.txt里面一般存有python项目中需要的包
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt# 工作目录/app。在镜像创建一个容器后,会在其linux系统下多一个目录,/app。里面存着我们的项目
COPY . /appWORKDIR /app# 指定端口
EXPOSE 5000# 在启动docker镜像之后,它会自动运行python hello.py这条命令
CMD ["python", "hello.py"]
该 Dockerfile 的实现过程是这样的:
- 基于 Python 3.10 版本的 slim 基础镜像来构建镜像。
- 拷贝 requirements.txt 文件到容器中,使用 pip 命令来安装依赖到镜像中。
- 将当前文件夹中的所有文件代码放到容器中名为
/app的目录中。 - 使用
WORKDIR指令设置工作目录为/app。 - 定义暴露的端口为 5000。
- 使用
CMD指令来运行 Python 应用程序。
- 构建镜像
使用以下命令在本地计算机上构建 Docker 镜像:
$ docker build -t myflaskapp .
该命令将基于 Dockerfile 构建镜像,并将其标记为名称为 myflaskapp 的镜像。
构建好的镜像存在本地docker仓库中,可以用命令 docker images来查看。
- 运行容器
最后,在 Docker 容器中运行 Python+Flask 应用程序,可以使用以下命令:
$ docker run -p 5000:5000 myflaskapp
该命令将基于 myflaskapp 镜像启动 Docker 容器,并将 5000 端口映射到本地计算机的 5000 端口上。
在本地计算机上打开浏览器,并访问 http://localhost:5000 ,应该可以看到 “Hello, World!” 信息。
【总结】:
Docker因为其隔绝环境的特性,可以非常方便部署项目。
举个例子,编写好的项目proj要编写dockerfile来定义如何打包镜像,最后运行docker build命令来完成打包,生成proj对应的镜像image。然后可以通过docker run 来运行打包好的镜像image,使其独立成一个容器container。
因此,只要使用一样的镜像image,最后任何人都可以成功在docker上部署项目来复现代码效果,不用因为环境依赖冲突而烦恼。
【容器共享linux内核】
另外,在docker容器中运行
uname -a
可以查到其版本为
Linux d848bd04657b 5.15.49-linuxkit-pr #1 SMP Thu May 25 07:17:40 UTC 2023 x86_64 GNU/Linux。
这是一个Linux内核版本,不同于Ubuntu、Debian 等发行版。
Ubuntu、Debian 等发行版上面是基于内核安装了许多其他的工具和应用程序,以便用户能够方便地使用它们。
这也可以看出,多个docker容器是共享一个linux内核的。这种方式可以大大减少容器所需的硬件资源,同时也使得容器更加轻量级、高效和便携。
相关文章:
Docker入门使用
用一个hello world的小例子来入门docker 在 Docker 容器中部署 Python Flask 的简单 Hello World 项目,需要遵循以下流程: 编写应用程序 首先,在本地计算机上编写一个简单的 PythonFlask 应用程序,例如: # hello.…...
在SAP上使用 LiquidUI Android 扫描条形码/QR 码
LiquidUI Android 可使用安卓移动设备的内置摄像头扫描条形码和二维码,为输入框填充数值。因此,无需附加任何第三方设备进行扫描。 LiquidUI Android 还提供了扫描功能,如 Accessible-Enter(俗称自动输入)和 Accessib…...
Maven - 全面解析 Maven BOM (Bill of Materials):打造高效依赖管理与模块化开发
文章目录 Whats BOMWhy Bom常見的官方BOMSpring Maven BOM dependencySpringBoot SpringCloud Maven BOM dependencyJBOSS Maven BOM dependencyRESTEasy Maven BOM dependencyJersey Maven BOM dependency How Bom定义BOM其他工程使用的方法 BOM VS POM What’s BOM BOM&…...
Lua脚本对比redis事务区别是什么
redis官方对于lua脚本的解释:Redis使用同一个Lua解释器来执行所有命令,同时,Redis保证以一种原子性的方式来执行脚本:当lua脚本在执行的时候,不会有其他脚本和命令同时执行,这种语义类似于 MULTI/EXEC。从别…...
ES安装问题汇总
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 问题描述 ES启动报错。其原因是ES需要的的最小max file descriptors为65535,我们设置的是4096,需要增大max file descriptors的值。 解决方案 调大…...
煜邦转债,华设转债,兴瑞转债,神通转债上市价格预测
煜邦转债 基本信息 转债名称:煜邦转债,评级:A,发行规模:4.10806亿元。 正股名称:煜邦电力,今日收盘价:8.82元,转股价格:10.12元。 当前转股价值 转债面值 / …...
R语言生存分析算法的简单组合
library(survival) library(randomForestSRC)# 生成模拟数据 set.seed(123) n <- 200 time <- rexp(n, rate 0.1) status <- rbinom(n, size 1, prob 0.7) var1 <- rnorm(n) var2 <- rnorm(n) var3 <- rnorm(n) data1 <- data.frame(time time, statu…...
Qt应用开发(基础篇)——滚屏区域基类 QAbstractScrollArea
一、前言 QAbstractScrollArea滚屏区域抽象类继承于QFrame,QFrame继承于QWidget,是QListview(列表浏览器)、QTableview(表格浏览器)、QTextEdit(文本编辑器)、QTextBrowser(文本浏览器)等所有需要滚屏区域部件的抽象基类。 框架类QFrame介绍 QAbstractSc…...
HTTPS安全通信
HTTPS,TLS/SSL Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。 使用TCP端口默认为443 TLS:(Transport Layer Security,传输层…...
C语言暑假刷题冲刺篇——day1
目录 一、选择题 二、编程题 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C语言每日一练 ✨其他专栏:代码小游戏C语言初阶🤝希望作者的文章能对你…...
trollcave靶场
配置 第一步:启动靶机时按下 shift 键, 进入以下界面 第二步:选择第二个选项,然后按下 e 键,进入编辑界面 将这里的ro修改为rw single init/bin/bash,然后按ctrlx,进入一个相当于控制台的界面…...
反馈式编译
一、 反馈式编译 简介 PGO,即Profile-Guided Optimizations,反馈式优化。PGO是编译器的又一优化技术,PGO与其它的一些优化技术/选项有一个明显的区别是:PGO优化是分三步完成的,是一个动态的优化过程。 反馈优化过…...
sql-libs靶场-----0x00、环境准备
文章目录 一、PhPstudy下载、安装二、Sqli-libs下载、搭建三、启用Sqli-libs phpstudy地址:https://www.xp.cn/ sqli-libs地址:https://github.com/Audi-1/sqli-labs 一、PhPstudy下载、安装 1、下载–解压–安装,安装完成如下图 2、更换php…...
一百四十九、Kettle——Linux上安装的kettle8.2创建共享资源库时遇到的问题(持续更新中)
一、目的 在kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后开始创建共享资源库,但是遇到了一些问题 二、Linux系统以及kettle版本 (一)Linux:CentOS 7 英文的图形化界面模式 &#…...
Mysql 建索引规范
索引规范 今天在建线上表的时候,做了一个varchar的索引,运维说varchar的索引会占用很大的内存。 于是 上网搜了一下建索引规范 一、建表规约 【强制】(1) 存储引擎必须使用InnoDB 解读:InnoDB支持事物、行级锁、并发…...
新基建助推数字经济,CosmosAI率先布局AI超算租赁新纪元
伦敦, 8月14日 - 在英国伦敦隆重的Raffles OWO举办的欧盟数字超算新时代战略合作签约仪式,CosmosAI、Infinite Money Fund与Internet Research Lab三方强强联手,达成了历史性的合作协议,共同迈向超算租赁新纪元。 这次跨界的合作昭示了全球…...
微服务06-分布式事务解决方案Seata
1、Seata 概述 Seata事务管理中有三个重要的角色: TC (Transaction Coordinator) - **事务协调者:**维护全局和分支事务的状态,协调全局事务提交或回滚。 TM (Transaction Manager) - **事务管理器:**定义全局事务的范围、开始全局事务、提交或回滚全局事务。 RM (Resourc…...
Wireshark有线网卡抓包报错The capture session could not be initiated on capture device
最近在使用Wireshark进行抓包排错时,选择网卡后提示报错,在此之前从未出现过,报错内容如下: 提示内容是The capture session could not be initiated on capture device,无法在捕获设备上启动捕获会话要求操作是Please…...
FreeSWITCH执行bridge时如何“制造“ringback
dialplan如果这样写: <action application"record_session" data"$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application"bridge" data"user/1001"/> 或者这样…...
Java # 类加载子系统
一、概述 1、 类加载器子系统负责从文件系统或者网络中加载.Class文件 2、classloader只负责类的加载,至于他是否能够运行由执行引擎来决定 3、加载的类的信息会存放在方法区(元空间)中 二、加载过程 1、加载阶段 1、通…...
番茄小说下载器:打造个人离线图书馆的终极指南 [特殊字符]
番茄小说下载器:打造个人离线图书馆的终极指南 🍅 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 想要随时随地畅读番茄小说,不受网络限制&…...
Keil5开发环境为STM32移植水墨江南模型生成的精简字库
Keil5开发环境为STM32移植水墨江南模型生成的精简字库 最近在做一个有点意思的硬件项目,想在一块小小的OLED屏幕上,显示一些有中国风韵味的汉字,比如“风”、“雅”、“颂”这类字。直接用系统自带的宋体、黑体,总觉得差点意思&a…...
图灵奖得主杨立昆公开“手撕”Meta 内部环境:“LLM 吸光了房间里的空气”,物理世界才是 AGI 的终局
来源:AI 科技大本营(ID:rgznai100)编译:王启隆Sora 死后,生成式视频路线已到头。2026 年 3 月,在新德里的 AI Alliance Global Leadership Reception 上,Christopher Nguyen 邀请到杨…...
51单片机实战:基于XPT2046的多传感器AD转换与LCD显示
1. 项目背景与核心器件选型 第一次接触51单片机AD转换时,我被各种专业术语搞得一头雾水。直到用XPT2046芯片完成了电位器、光敏电阻、热敏电阻的三路信号采集,才真正理解模拟信号数字化的奥妙。这个成本不到5元的触摸屏控制芯片,其实是个隐藏…...
OBS多平台同步推流插件深度解析:技术架构与实战应用
OBS多平台同步推流插件深度解析:技术架构与实战应用 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在当今内容创作者和虚拟主播日益增长的需求下,多平台直播已成…...
好写作AI“期刊论文魔法工坊”:打造学术发表的秘密武器
在学术的浩瀚星空中,期刊论文宛如璀璨星辰,是研究者展示智慧结晶、推动学科发展的重要途径。然而,撰写一篇高质量且符合期刊要求的论文,却如同在荆棘丛中开辟道路,充满了挑战与艰辛。别担心,好写作AI宛如一…...
基于深度学习的车牌识别系统(YOLO12/11/v8/v5模型+django)(源码+lw+部署文档+讲解等)
摘要随着智能交通系统的迅猛发展,车牌识别技术在交通管理、停车场管理和公共安全等领域的应用愈加广泛。传统的车牌识别方法多依赖于图像处理技术,无法有效应对复杂环境下的车牌识别任务。为了解决这一问题,本文提出了一种基于深度学习的车牌…...
基于单片机的全自动咖啡机控制系统设计
一、摘要 全自动咖啡机控制系统控制系统对于现今的日常家居生活和商业模式售卖都有着重大的影响力,随着社会快节奏的发展,传统的人工冲泡模式效率远远满足不了人们的日常需求,并且在冲调多口味咖啡方面,也没有良好的原料精准配比。…...
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools是一款专为《鸣潮》PC玩家设计的开源辅助工具,集成性能优化、账…...
如何快速修复ROG游戏本色彩配置文件丢失问题:G-Helper终极指南
如何快速修复ROG游戏本色彩配置文件丢失问题:G-Helper终极指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, S…...
