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

Docker入门使用

用一个hello world的小例子来入门docker

在 Docker 容器中部署 Python + Flask 的简单 Hello World 项目,需要遵循以下流程:

  1. 编写应用程序

首先,在本地计算机上编写一个简单的 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!” 信息。

  1. 创建 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 应用程序。

  1. 构建镜像

使用以下命令在本地计算机上构建 Docker 镜像:

$ docker build -t myflaskapp .

该命令将基于 Dockerfile 构建镜像,并将其标记为名称为 myflaskapp 的镜像。
构建好的镜像存在本地docker仓库中,可以用命令 docker images来查看。

  1. 运行容器

最后,在 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&#xff0c;QFrame继承于QWidget&#xff0c;是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

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练 ✨其他专栏&#xff1a;代码小游戏C语言初阶&#x1f91d;希望作者的文章能对你…...

trollcave靶场

配置 第一步&#xff1a;启动靶机时按下 shift 键&#xff0c; 进入以下界面 第二步&#xff1a;选择第二个选项&#xff0c;然后按下 e 键&#xff0c;进入编辑界面 将这里的ro修改为rw single init/bin/bash&#xff0c;然后按ctrlx&#xff0c;进入一个相当于控制台的界面…...

反馈式编译

一、 反馈式编译 简介 PGO&#xff0c;即Profile-Guided Optimizations&#xff0c;反馈式优化。PGO是编译器的又一优化技术&#xff0c;PGO与其它的一些优化技术/选项有一个明显的区别是&#xff1a;PGO优化是分三步完成的&#xff0c;是一个动态的优化过程。 反馈优化过…...

sql-libs靶场-----0x00、环境准备

文章目录 一、PhPstudy下载、安装二、Sqli-libs下载、搭建三、启用Sqli-libs phpstudy地址&#xff1a;https://www.xp.cn/ sqli-libs地址&#xff1a;https://github.com/Audi-1/sqli-labs 一、PhPstudy下载、安装 1、下载–解压–安装&#xff0c;安装完成如下图 2、更换php…...

一百四十九、Kettle——Linux上安装的kettle8.2创建共享资源库时遇到的问题(持续更新中)

一、目的 在kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后开始创建共享资源库&#xff0c;但是遇到了一些问题 二、Linux系统以及kettle版本 &#xff08;一&#xff09;Linux&#xff1a;CentOS 7 英文的图形化界面模式 &#…...

Mysql 建索引规范

索引规范 今天在建线上表的时候&#xff0c;做了一个varchar的索引&#xff0c;运维说varchar的索引会占用很大的内存。 于是 上网搜了一下建索引规范 一、建表规约 【强制】&#xff08;1&#xff09; 存储引擎必须使用InnoDB 解读&#xff1a;InnoDB支持事物、行级锁、并发…...

新基建助推数字经济,CosmosAI率先布局AI超算租赁新纪元

伦敦, 8月14日 - 在英国伦敦隆重的Raffles OWO举办的欧盟数字超算新时代战略合作签约仪式&#xff0c;CosmosAI、Infinite Money Fund与Internet Research Lab三方强强联手&#xff0c;达成了历史性的合作协议&#xff0c;共同迈向超算租赁新纪元。 ​ 这次跨界的合作昭示了全球…...

微服务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进行抓包排错时&#xff0c;选择网卡后提示报错&#xff0c;在此之前从未出现过&#xff0c;报错内容如下&#xff1a; 提示内容是The capture session could not be initiated on capture device&#xff0c;无法在捕获设备上启动捕获会话要求操作是Please…...

FreeSWITCH执行bridge时如何“制造“ringback

dialplan如果这样写&#xff1a; <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只负责类的加载&#xff0c;至于他是否能够运行由执行引擎来决定 3、加载的类的信息会存放在方法区&#xff08;元空间&#xff09;中 二、加载过程 ​​​​​​​ 1、加载阶段 1、通…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...