在windows上使用Docker部署一个简易的web程序

news2024/12/27 9:46:53

使用Docker部署一个python的web服务🚀

        由于是从事算法相关工作,之前在项目中,需要将写完的代码服务,部署在docker上,以此是开始接触了Docker这个工具,由于之前也没系统学习过,之后应该可能还会用上,所以打算通过一遍博客的方式记录一下也学习一下,这篇博客主要记录一个基础过程,把整个流程简化,重在理解思路,如果有问题或者写的不对的地方,欢迎留言或私信交流。

Docker 是一个开源平台,利用容器技术将应用程序及其所有依赖打包到一个标准化的单元中,从而确保它们能够在任何计算环境中一致地运行。容器是轻量级的、可移植的,并且在不同的操作系统和云环境中运行时具有一致性,使得应用程序的开发、测试和部署过程更加高效和可靠。Docker 使开发人员和运维人员能够更容易地协作,简化了持续集成和持续部署(CI/CD)工作流程。


1.Docker 安装


首先到官网点击Download进行下载,由于我自己的电脑是windows所以这里下载了一个windows版本
https://www.docker.com/
在这里插入图片描述
下载完成之后,正常安装就一直点就行,打开应用,首先会出现启动引擎的加载动画,然后进入到如下界面。
在这里插入图片描述
然后打开电脑的powershell输入docker --version查看一下docker版本,检查一下通过powershell能不能使用docker命令,这也是检查docker安装成功的关键一步,如果打印出版本信息了,表示安装成功了。

docker --version

在这里插入图片描述

2.编写一个简单的web服务


安装好了docker之后可以先简单写一个python的服务程序,在写一个新的python项目之前先在anaconda中建一个虚拟环境。

2.1 本地python环境配置安装

新建环境命令,我这里起的名字是doceker_web(这个命令最后安装的python的具体版本为3.10.14)

conda create --name docker_web python=3.10

运行上述命令之后,输入y开始下载虚拟环境的各种文件。
在这里插入图片描述
输入激活虚拟环境的命令进入虚拟环境

conda activate docker_web

在这里插入图片描述
然后安装一个Flask框架,这里我由于我配置了全局清华镜像源,所以是从镜像源里下载的。

pip install Flask

在这里插入图片描述
之后新建一个项目然后选一下解释器,0基础的同学,可以找一下周围会做的让你帮着改一下,或者自己搜一下。
在这里插入图片描述

2.1 使用Flask编写一个 hello_world 服务

之后这里直接写一个最简单的服务代码,如果零基础的同学可移步在下之前的文章。
Flask框架初探-如何在本机发布一个web服务并通过requests访问自己发布的服务-简易入门版

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
    return "Hello, World!"


if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=False)

在这里插入图片描述

运行之后使用电脑浏览器访问这个IP地址,可以看到浏览器上显示了一个Hello World。

在这里插入图片描述

3.编写一个doceker file


首先右键新建一个file文件,然后命名为Dockerfile
在这里插入图片描述在这里插入图片描述
然后就会得到一个空白的Dockerfile文件并自动打开,其实在新建的时候,也有Dockerfile文件的选项,但是新建出来的不是空的,自带的几行代码也没啥必要,索性直接建一个空的了。
在这里插入图片描述

3.1 使用FROM 命令导入一个基础镜像

我们需要首先导入一个python的基础镜像,首先需要取看一下有哪些基础镜像,首先需要点右上角的九个小正方形组成的图标,然后点击DockerHub。
在这里插入图片描述
进入到以下网站,然后在搜索框中输入python
在这里插入图片描述
搜索之后点击python
在这里插入图片描述
点击之后下滑可以看到python包含的docker镜像的版本。
在这里插入图片描述
每个镜像文件由不同的python版本和一些使用操作系统的信息的后缀,这里我们以3.10.14版本为例(由于我们新建的anaconda的虚拟环境中的python版本是3.10.14)
在这里插入图片描述
不同的镜像使用了不同的操作系统,这里通常情况下我们选择3.10.14-slim

镜像标签基础操作系统描述
3.10.14-bookwormDebian 12 (Bookworm)基于Debian 12 (Bookworm)
3.10.14-slim-bookwormDebian 12 (Bookworm)基于Debian 12 (Bookworm),精简版
3.10.14-bullseyeDebian 11 (Bullseye)基于Debian 11 (Bullseye)
3.10.14-slim-bullseyeDebian 11 (Bullseye)基于Debian 11 (Bullseye),精简版
3.10.14-alpine3.20Alpine Linux 3.20基于Alpine Linux 3.20
3.10.14-alpine3.19Alpine Linux 3.19基于Alpine Linux 3.19
3.10.14-slim多种操作系统的精简版精简版,减少了不必要的文件和组件
FROM python:3.10.14-slim

在这里插入图片描述

3.2 创建一个工作目录

        创作工作目录的作用是,方便归拢文件,嗯,我是这吗理解的,相当于在docker的模拟镜像系统下,新建了一个文件夹,然后之后会把项目文件通过后续的COPY命令给移动过去,之后还可以在生成文件夹的目录下执行命令,类似于windows有时候需要cd到指定路径的文件夹下,然后再执行命令,这样避免每一条命令都要带着绝对路径。

WORKDIR /app

在这里插入图片描述

3.3拷贝项目根目录下的所有文件到工作目录

        该命令,可以将项目文件夹下是所有文件移动到,之前使用WORKDIR目录中新建的/app目录下,第一个点表示当前项目的根目录下的文件,第二个点表示目标路径,也就是Docker镜像中的/app目录,再解释一句就是执行了WORKDIR /app之后,第二个点就被指定为/app目录(理解成文件夹也行)了

COPY . .

在这里插入图片描述

3.4在镜像中安装Flask

        移动完文件,然后就可以给镜像安装需要的库了由于我们只用到了flask,,这里我们为了精简内容,所以就先只安装Flask。

# 安装Flask
RUN pip install Flask

在这里插入图片描述

3.5运行服务程序app.py

最后再加一句运行命令就可以了,这是个固定的格式,等效于我们在控制台中直接执行 python3 app.py 命令。

CMD ["python3", "app.py"]

在这里插入图片描述

3.6完整的Dockerfile文件

# 使用基础镜像
FROM python:3.10.14-slim

# 设置工作目录
WORKDIR /app

# 拷贝当前项目文件到工作目录文件夹 COPY<本地路径><目标路径>
COPY . .

# 安装Flask
RUN pip install Flask

# 运行应用
CMD ["python3", "app.py"]

4. 在命令控制台搭建Docker镜像


4.1 使用Docker build 搭建docker镜像源

        点击pycharm右下侧的小图标进入到终端(也可以在外部cmd终端cd进入到项目文件夹下)。

在这里插入图片描述
之后在控制台输入下面的命令,创建一个名为docker_web的的镜像(最后的点很重要不能省略)。

docker build -t docker_web .
  • docker build:构建 Docker 镜像的命令。
  • -t docker_web:为构建的镜像指定一个标签(docker_web)。
  • .:指定构建上下文,即当前目录。Docker 会使用该目录中的 Dockerfile 和所有相关文件来构建镜像(从当前目录下搜索Dockerfile)。

运行之后结果如下,该命令完成了加载python镜像源,拷贝项目文件,和安装Flask的任务。
在这里插入图片描述

4.2 使用Docker RUN 运行容器

docker run -p 80:5000 -d docker_web
  • docker run:运行一个新的容器。
  • -p 80:5000:将主机的80端口映射到容器的5000端口。这意味着你可以通过访问主机的80端口来访问容器中运行的服务(假设服务在容器的5000端口上运行)。
  • -d:以守护进程模式(后台)运行容器。
  • docker_web:要运行的镜像名称。

这里的5000端口是Flask默认的端口,如果需要修改需要在app.py中设置指定的端口号

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

4.3 使用浏览器访问Docker镜像中运行的服务

        之后再浏览器中访问http://127.0.0.1:80http://localhost:80,由于localhost的默认端口是80,所以可以省略端口号的输入,直接访问http://127.0.0.1http://localhost,就可以访问docker容器中运行的web服务了。

在这里插入图片描述
如果想查看docker镜像中运行服务的输出,可以在docker desktop 中的 Containers中点击容器名字。
在这里插入图片描述
        就可以查看到镜像容器控制台的输出,这里虽然服务的的端口号是5000但这是docker内部镜像中的端口号,我们在服务端需要通过80号端口访问,因为我们已经将5000号端口映射到了80号端口
在这里插入图片描述

结束

        这篇算是一个基础笔记性质的博客吧,后续如有用到了一些更多的操作会回来更新,这个暂时就先这样,留一份以后自己要是用到了就回来看看。

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

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

相关文章

[240724] Meta 发布全新大语言模型 Llama 3.1 | Apple 开源全新 AI 模型,打造高效 AI 生态

目录 Meta 发布全新发语言模型 Llama 3.1Apple 开源全新 AI 模型&#xff0c;挑战 Meta&#xff0c;打造高效 AI 生态 Meta 发布全新发语言模型 Llama 3.1 Llama 3.1 提供 8B、70B 和 405B 三种参数规模&#xff0c;其中 405B 版本在通用知识、可控性、数学、工具使用和多语 言…

Python鲁汶意外莱顿复杂图拓扑分解算法

&#x1f3af;要点 &#x1f3af;算法池化和最佳分区搜索&#xff1a;&#x1f58a;网格搜索 | &#x1f58a;发现算法池 | &#x1f58a;返回指定图的最佳划分 | &#x1f58a;返回指定图的最佳分区 | &#x1f3af;适应度和聚类比较功能&#xff1a;&#x1f58a;图的划分 |…

django电商用户消费数据分析系统-计算机毕业设计源码20891

摘 要 随着电子商务的快速发展&#xff0c;电商平台积累了大量的用户消费数据。为了更好地理解用户行为、优化商品结构和提升用户体验&#xff0c;本文设计并实现了一个基于Django框架的电商用户消费数据分析系统。 该系统包含后台首页、系统用户&#xff08;管理员&#xf…

探索 GPT-4o mini:成本效益与创新的双重驱动

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

elk日志索引被锁blocks,日志无法写入

现象&#xff1a; kafka积压&#xff0c;logstash无法将日志写入到es logstash报错&#xff1a; [logstash.outputs.elasticsearch][main][] Retrying failed action {:status>403 :error>{“type”>“cluster_block_exception”, “reason”>“index [] blocked …

“微软蓝屏”全球宕机,敲响基础软件自主可控警钟

上周五&#xff0c;“微软蓝屏”“感谢微软 喜提假期”等词条冲上热搜&#xff0c;全球百万打工人受此影响&#xff0c;共同见证这一历史性事件。据微软方面发布消息称&#xff0c;旗下Microsoft 365系列服务出现访问中断。随后在全球范围内&#xff0c;包括企业、政府、个人在…

Spring Boot集成starrocks快速入门Demo

1.什么是starrocks&#xff1f; StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理&#xff0c;就可以用 StarRocks 来支持多种数据分析场景的极速分析。 Star…

矩阵分析——线性积分方程组的矩阵解法研究

矩阵分析——线性积分方程组的矩阵解法研究 前言线性积分方程组的矩阵解法研究 前言 “矩阵分析”是一门选修课&#xff0c;当时选这门课程的原因是想着图像处理就涉及到很多矩阵运算。但没想到的是这门课程吧虽然是选修&#xff0c;最后的结课要求是让我们写一篇“论文”&…

第19讲EtherNet/IP网络基础

EtherNet/IP网络知识 一、EtherNet/IP概述 二、EtherNet/IP网络的定位 1、最上层-信息层:主要进行上位机网络信号交互或者控制层信号的传递。 比较常见的话是工控机或者说PLC,就像大脑对信息进行发送的这样一个控制。 EtherNet/IP网络属于最高层——信息层,主要负责信号的…

vue3中父子组件通讯

在子组件HelloWorld.vue中&#xff1a; <template><div class"hello">111111</div></template><script lang"ts"> import { Options, Vue } from vue-class-component;Options({props: {msg: String} }) export default cl…

多路复用IO、TCP并发模型

时分复用 CPU单核在同一时刻只能做一件事情&#xff0c;一种解决办法是对CPU进行时分复用(多个事件流将CPU切割成多个时间片&#xff0c;不同事件流的时间片交替进行)。在计算机系统中&#xff0c;我们用线程或者进程来表示一条执行流&#xff0c;通过不同的线程或进程在操作系…

群辉NAS利用AList搭建混合云盘①套件安装及百度云盘挂载

目录 一、群辉NAS准备 二、远程访问 三、安装套件 四、挂载公有云盘 1、挂载百度网盘 ……(未完待续) 公有云盘是由云服务提供商运营,向广大用户提供数据存储和文件共享服务的一种在线存储解决方案。 其优点包括: 1. 方便易用:用户可以通过互联网随时随地访问自己存…

Java企业微信服务商代开发获取AccessToken示例

这里主要针对的是企业微信服务商代开发模式 文档地址 可以看到里面大致有三种token&#xff0c;一个是服务商的token&#xff0c;一个是企业授权token&#xff0c;还有一个是应用的token 这里面主要有下面几个参数 首先是服务商的 corpid 和 provider_secret &#xff0c;这个可…

等保定级指南(PPT原件)

新版网络安全等级保护定级指南网络安全等级保护工作的作用对象&#xff0c;主要包括基础信息网络、工业控制系统、云计算平台、物联网、使用移动互联技术的网络和大数据等。 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xf…

前端自动化测试(一):揭秘自动化测试秘诀

目录 [TOC](目录)前言自动化测试 VS 手动测试测试分类何为单元测试单元测试的优缺点优点缺点 测试案例测试代码 测试函数的封装实现 expect 方法实现 test 函数结语 正文开始 &#xff0c; 如果觉得文章对您有帮助&#xff0c;请帮我三连订阅&#xff0c;谢谢&#x1f496;&…

7月投稿警惕!6本On Hold期刊被数据库剔除!

本周投稿推荐 SCI&EI • 1区计算机类&#xff0c;3.5-4.0&#xff08;1个月录用&#xff09; • CCF推荐&#xff0c;1区-Top&#xff08;3天初审&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; 知网&#xff08;CNKI&#xff09;、谷歌学术 •…

nginx的配置和使用

一、nginx支持win和linux版本的下载&#xff0c;选择合适的版本进行安装 二、配置文件注解 重点的几个参数进行注释&#xff1a; 1、listen 要监听的服务的端口&#xff0c;符合这个端口的才会被监听 server_name要监听的服务地址&#xff0c;可能是ip,也可能是域名&#xf…

流量书单,互联网营销必读

《流量池》杨飞 《增长黑客》肖恩埃利斯(Sean Ellis)、摩根布朗(Morgan Brown) 《增长五线》王赛 《参与感》黎万强 《场景革命》吴声 《网络营销实战密码》昝辉 《网络营销推广实战宝典》江礼坤 《超级IP&#xff0c;互联网新物种方法论》吴声 《周鸿祎自述&#xff0…

Golden Software Surfer v25 解锁版下载与安装教程 (三维绘图软件)

前言 Golden Software Surfer 是一款三维绘图软件&#xff0c;具备强大的插值功能和绘制图件能力&#xff0c;可用来处理XYZ数据&#xff0c;轻松绘制专业三维图。该软件有着很直观的用户界面&#xff0c;尽管不支持中文&#xff0c;但是很用户在熟悉流程以后依然能够轻松学会…

《计算机网络》(学习笔记)

目录 一、计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络的概念 1.1.2 计算机网络的组成 1.1.3 计算机网络的功能 1.1.4 电流交换、报文交换和分组交换 1.1.5 计算机网络的分类 1.1.6 计算机网络的性能指标 1.2 计算机网络体系结构与参考模型 1.2.1 计算机…