记录一次Docker部署FastApi项目

news2025/3/17 1:21:59

流程

windows需安装Docker for desktop
在这里插入图片描述
已登录docker账号
在这里插入图片描述

编写Dockerfile文件

# 使用Python作为基础镜像, slim-buster是一个轻量级的镜像, 适合生产环境使用
FROM python:3.9-slim-buster
# 设置工作目录
WORKDIR /app
# 复制应用代码到容器中
COPY . .
# 安装依赖项
RUN pip install --no-cache-dir --upgrade -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 安装js运行环境
RUN apt-get update && apt-get install -y nodejs npm
# 设置启动命令
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "5000"]

构建镜像

docker build -t 1688-scraper-app . --network host 

构建镜像时, 执行RUN apt-get update && apt-get install -y nodejs npm这条命令时, 很慢, 不知道为什么, 可能是apt-get的源是国外的
可以试试这里: https://www.cnblogs.com/chentiao/p/17352748.html

在这里插入图片描述
修改Dockerfile

# 使用Python作为基础镜像, slim-buster是一个轻量级的镜像, 适合生产环境使用
FROM python:3.12.3-slim-bullseye
# 设置工作目录
WORKDIR /app
# 复制应用代码到容器中
COPY . .
# 安装依赖项
RUN pip install --no-cache-dir --upgrade -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 设置为中国国内源
RUN sed -i 's@/deb.debian.org/@/mirrors.aliyun.com/@g' /etc/apt/sources.list
RUN apt-get clean
# 安装js运行环境
RUN apt-get update && apt-get install -y nodejs npm
# 设置启动命令
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "5000"]

再次build, 只用了200多s, 快多了
在这里插入图片描述

打标签

在这里插入图片描述
推送到 dockerhub在这里插入图片描述

在https://hub.docker.com/查看已经存在
在这里插入图片描述
在这里插入图片描述

在服务器上拉取镜像在这里插入图片描述
运行项目, 查看日志
在这里插入图片描述
开放防火墙端口与 安全组 端口, 即可通过 云服务器的公网IP+5000端口访问

云服务器厂商比如阿里云/腾讯云在管理平台上会有安全组端口限制访问, 需要开放对应端口

开放端口

查看服务器系统信息, Linux是有很多个版本的, 不同的版本操作可能会不同
参考: https://blog.csdn.net/qq_31278903/article/details/83146031

[root@VM-0-10-centos ~]# uname -a
Linux VM-0-10-centos 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@VM-0-10-centos ~]# cat /proc/version
Linux version 3.10.0-1160.108.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Jan 25 16:17:31 UTC 2024
[root@VM-0-10-centos ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

使用的就是Centos 7系统

# 查看防火墙状态(防火墙已关闭)
[root@VM-0-10-centos ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@VM-0-10-centos ~]# firewall-cmd --state
not running

参考:
Linux查看防火墙状态及开启关闭命令
https://blog.csdn.net/qq_36640713/article/details/106553833

Docker 常用命令

基本概念: 容器是镜像的一个实例, 就好比镜像是一个规则, 而容器根据镜像的规则的一个 实际产物

构建镜像: (在项目根目录执行)

  • docker build:这是Docker用来构建镜像的命令。
  • -t tiktok-service-app:这个选项用来给构建的镜像设置一个标签(tag),在这个例子中标签是tiktok-service-app。标签可以帮助你更容易地识别和管理你的Docker镜像。
  • .:这个点代表当前目录,Docker会在这个目录下查找Dockerfile文件,该文件包含了构建镜像所需的指令。
docker build -t tiktok-service-app .

查看镜像:

docker images

启动容器:

  • docker run:这是Docker用来创建并启动新容器的命令。
  • -itd:这是三个选项的组合:
    • -i:交互式,允许你与容器进行交互。
    • -t:分配一个伪终端,这样你就可以在命令行中与容器进行交互。
    • -d:以分离模式运行容器,即在后台运行。
  • -p 8888:8080:这个选项用于端口映射,格式为<主机端口>:<容器端口>。在这个例子中,它将主机的8888端口映射到容器的8080端口。
  • tiktok-service-app:这是要运行的Docker镜像的名称。Docker会根据这个名称查找本地的镜像库,如果找到匹配的镜像,就会用它来创建一个新的容器。
 docker run -itd -p 8888:8080 tiktok-service-app 

查看正在运行的容器(添加-a参数查看全部容器):

docker ps

进入容器:

  • docker exec:这是Docker用来在已经运行的容器中执行命令的命令。
  • -it:这是两个选项的组合:
    • -i:交互式,允许你与容器进行交互。
    • -t:分配一个伪终端,这样你就可以在命令行中与容器进行交互。
  • <容器名称或ID>:这是要进入的容器的名称或者ID。
  • /bin/bash:这是要在容器中运行的命令,这里是启动bash shell。
docker exec -it <容器名称或ID> /bin/bash

查看运行日志:

  • docker logs:这是Docker用来获取容器日志的命令。
  • -f--follow:这个选项会让日志输出变成实时的,即你可以即时看到最新的日志输出。
  • 58cda55c3cd4:这是容器的ID。Docker会根据这个ID查找正在运行的容器,并输出该容器的日志。
docker logs -f <容器名称或ID>

停止容器

docker stop <容器名称或ID>

删除容器

docker rm <容器名称或ID>

删除镜像

docker rmi <镜像名称或ID>

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

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

相关文章

Ollydbg动态分析MessageBoxA输出hellow world

一、目的 找到main函数找到调用的MessageBoxA函数 测试源码 #include <iostream> #include <windows.h>int main() {MessageBoxA(NULL, "Hellow World", "Title", MB_OK);return 1; }二、快捷键 指令快捷键说明RestartCtrlF2重新开始调试S…

C++与Android处理16进制大端/小端数据实例(二百七十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

微服务中使用Maven BOM来管理你的版本依赖

摘要: 原创出处 sf.gg/a/1190000021198564 「飘渺Jam」欢迎转载&#xff0c;保留摘要&#xff0c;谢谢&#xff01; 为什么要使用BOM? 如何定义BOM? 项目使用方法? BOM&#xff08;Bill of Materials&#xff09;是由Maven提供的功能,它通过定义一整套相互兼容的jar包版…

使用docker commit创建新镜像

前言 我们知道&#xff0c;从docker-hub上拉取的镜像所创建的容器是最小版本的&#xff0c;比如ubuntu内部是没有vim编辑器的&#xff0c;我们需要自己手动安装&#xff0c;但是当我们安装后假如有人把我们的容器误删了&#xff0c;那么我们再次根据原始镜像创建的容器就没有了…

Windows安装VMware(Broadcom)

1.安装前提 1.检查BIOS中是否开启了虚拟化技术。1.1 打开任务管理器&#xff0c;查看性能&#xff0c;CPU部分&#xff0c;虚拟化处于“已启用”状态。1.2 如果没有开启&#xff0c;则需要进入BIOS系统&#xff0c;将 Intel Virtualization Technology改为Enalble。2.下载VMwa…

小阿轩yx-PXE 高效批量网络装机

小阿轩yx-PXE 高效批量网络装机 部署PXE远程安装服务 PXE 概述 PXE&#xff08;Preboot eXcution Environment&#xff0c;预启动执行环境&#xff0c;在操作系统之前运行&#xff09;技术的网络装机方法&#xff0c;是由 Intel 公司开发的网络引导技术&#xff0c;工作在 C…

二进制中1的个数c++

题目描述 计算鸭给定一个十进制非负整数 NN&#xff0c;求其对应 22 进制数中 11 的个数。 输入 输入包含一行&#xff0c;包含一个非负整数 NN。(N < 10^9) 输出 输出一行&#xff0c;包含一个整数&#xff0c;表示 NN 的 22 进制表示中 11 的个数。 样例输入 100 …

IS-IS链路状态数据库

原理概述 一个OSPF链路状态数据库是若干条LSA的集合。与此相似&#xff0c;一个IS-IS链路状态数据库是由若干条LSP的集合。与OSPF链路状态数据库不同&#xff0c;IS-IS链路状态数据库有Level-1和Level-2之分。 在IS-IS协议中&#xff0c;每一条LSA都有一条剩余生存时间、一个…

『USB3.0Cypress』FPGA开发(3)GPIF II短包零包时序分析

文章目录 1.时序参数2.FX3_PCLK3.短包和零包3.1短包时序3.2零包ZLP时序 4.传送门 1.时序参数 AN65974文档中明确了操作GPIF II接口时的时序参数&#xff0c;上一篇文章中给出了读写时序图&#xff0c;本篇第二节给出ZLP写周期时序&#xff0c;这里说明相关的时序参数。应该注意…

校园二手书交易|基于SprinBoot+vue的校园二手书交易管理系统(源码+数据库+文档)

校园二手书交易管理系统 目录 基于SprinBootvue的校园二手书交易管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3 卖家用户功能模块 4 用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

WPF之容器标签之Canvas布局标签

Canvas: 定义一个区域&#xff0c;可在其中使用相对于 Canvas 区域的坐标以显式方式来定位子元素。 实例 可以在子标签使用Canvas属性设置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

基于51单片机的火灾检测设计(仿真+程序+原理图+论文报告+讲解视频)

基于51单片机的火灾检测设计 基于51单片机的火灾检测设计&#xff08;仿真程序原理图论文报告&#xff09;功能要求仿真图&#xff1a;原理图&#xff1a;源程序&#xff1a;论文/报告&#xff1a;资料清单&#xff1a; 基于51单片机的火灾检测设计&#xff08;仿真程序原理图论…

数据库操作(事务)

描述&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败 一。事务的操作&#xff1a; 开启事务&#xff1a;star…

Linux入门攻坚——23、DNS和BIND基础入门2

前一篇实践了正向解析服务器的配置使用&#xff0c;如何配置反向解析呢&#xff1f; 反向区域&#xff1a; 区域名称&#xff1a;网络地址反写.in-addr.arpa. 192.168.138. --> 138.168.192.in-addr.arpa. (1)定义区域&#xff1a; zone "ZONE_NAME" I…

Unity实现TableView

基于Scrollview封装的TableView&#xff0c;实现对视野外的Cell回收利用&#xff0c;减少创建Cell的开销。 核心逻辑如下&#xff1a; /***************************************动态使用cell核心逻辑开始 **************************************///计算所有cell的坐标信息 …

《python编程从入门到实践》day38

# 昨日知识点回顾 定义、迁移模型Entry # 今日知识点学习 18.2.7 Django shell 每次修改模型后&#xff0c;看到重启后的效果需要重启shell&#xff0c;退出shell会话Windows系统按ctrlZ或者输入exit() 18.3 创建页面&#xff1a;学习笔记主页 创建页面三阶段&#xf…

【Windows系统】解决Intel 6代CPU安装win7系统过程中无法操作键盘鼠标的问题

问题 微软表示&#xff0c;从 2016 年 7 月 17 日起&#xff0c;新的 Intel、AMD 和Qualcomm 处理器将仅支持 Windows 10&#xff0c;不再支持 Windows 7 和 8.1。因此&#xff0c;Intel 6代以后的CPU因为没有USB驱动无法完成win7系统的安装。 下文核心思想是通过老毛桃PE系统…

AI PC 的曙光:微软大胆出击与苹果竞争

AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 概述 微软已正式进入 AI PC 时代&#xff0c;并且毫不避讳地直接向苹果的 MacBook 发起攻击。随着代号为“Copilot”的笔记本电脑的推出&#xff0c;微软准备彻底改变我们与…

Android 实现竖排文本(垂直方向显示)

Android 实现竖排文本-垂直方向显示 前言效果图代码实现方式一 Custom View1. 自定义视图 VerticalTextView2. 在xml布局文件中使用3. 设置文本内容 方式二 使用 TextView 的 rotation属性方式三 使用带有跨距文本的TextView1. 自定义视图 VerticalTextView2. 在xml布局文件中使…

ML307R OpenCPU UART使用

一、串口使用流程图 二、串口相关函数介绍 三、实现串口收发 一、串口使用流程图 OneMO ML307R模组提供了2路UART给开发者用于通讯开发&#xff0c;以及1路DBG UART用于log的打印。UART Demo示例可以在SDK&#xff1a;examples\uart\src\cm_demo_uart.c中查看。 串口使用流…