自学内容网 自学内容网

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

使用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号端口
在这里插入图片描述

结束

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


原文地址:https://blog.csdn.net/chrnhao/article/details/140632624

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!