Docker新手:在tencent云上实现Python服务打包到容器

1 使用docker的原因

一致性和可移植性:Docker 容器可以在任何支持 Docker 的环境中运行,无论是开发者的笔记本电脑、测试服务器还是生产环境。这确保了应用在不同环境中的行为一致,减少了“在我的机器上可以运行”的问题。

隔离性:每个 Docker 容器都是独立的,拥有自己的文件系统、网络接口和进程空间。这使得不同应用之间不会互相干扰,提高了系统的稳定性和安全性。

资源效率:Docker 容器共享宿主机的操作系统内核,因此它们比虚拟机更轻量,启动速度更快,占用的资源更少。这使得在相同的硬件资源下可以运行更多的应用实例。

快速部署和扩展:Docker 容器可以快速启动和停止,这使得应用的部署和扩展变得非常容易。通过 Docker Compose 或 Kubernetes 等工具,可以轻松管理多个容器和服务。

2 docker与docker-compose的关系

Docker 用于管理单个容器,而 Docker Compose 用于管理多容器应用。

使用 Docker Compose 需要三个步骤:

  1. 用 Dockerfile 定义应用环境。
  2. docker-compose.yml 文件中定义应用服务。
  3. 运行 docker-compose up 命令来启动和运行应用。

环境准备

ubuntu 22.04 LTS(腾讯云),python 3.10
文件目录结构是这样的

project/
├── app/
│   ├─  __init__.py
│   ├── app.py
│   └── requirements.txt
├── docker-compose.yml
└── Dockerfile

其中app.py的内容如下:

from app import app# 使用内存存储来替代 Redis
cache = {}def get_hit_count():# 检查 'hits' 键是否存在,如果不存在则初始化为 0if 'hits' not in cache:cache['hits'] = 0# 增加计数cache['hits'] += 1return cache['hits']@app.route('/')
def hello():count = get_hit_count()return f'Hello World! I have been seen {count} times.\n'# 只有直接运行此文件时才执行
if __name__ == '__main__':app.run(host='0.0.0.0', port=5000, debug=True)

init.py的代码如下:

from flask import Flaskapp = Flask(__name__)# 导入路由
from app.app import * 

以下是创建一个基本的Python服务Dockerfile的步骤:

  1. 选择基础镜像:通常我们会选择官方提供的Python镜像作为基础。
  2. 设置工作目录:使用WORKDIR指令设置容器内的工作目录。
  3. 复制文件:使用COPY指令将本地文件复制到容器中。
  4. 安装依赖:使用RUN pip install -r requirements.txt安装Python依赖。
  5. 暴露端口:使用EXPOSE指令指定应用运行时需要暴露的端口。
  6. 定义启动命令:使用CMDENTRYPOINT指令定义容器启动时执行的命令。
    其中我的Dockerfile是这样的
# syntax=docker/dockerfile:1
FROM python:3.10-slim
WORKDIR /app
COPY app/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENV FLASK_APP=app
ENV FLASK_ENV=development
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0"]

我的docker-compose.yml是这样的

version: '3.10'
services:web:build: .ports:- "5000:5000"volumes:- .:/appenvironment:- FLASK_APP=app.py- FLASK_ENV=development 

如果Dockerfile和docker-compose不会写,可以找官网上的例子进行仿写。
备注:Dockerfile 是一个文本文件,它没有文件扩展名。它就是名为 “Dockerfile” 的文件(注意 D 是大写的)。这里Dockerfile是约定俗成的,当然也可以改名字,但是需要加参数-f
然后在腾讯云上输入:sudo docker-compose up
然后等待一段时间,会出现
在这里插入图片描述
这时候你的服务就部署成功了,访问http://ip:5000就可以看到web已经成功执行。
在这里插入图片描述
对于有些第一次访问不成功的,可以在安全组里放出5000端口
在这里插入图片描述
然后刷新网页就可以访问了。
一些常用的docker 命令:

  1. 列出所有容器(包括停止的)

    docker ps -a
    
  2. 列出正在运行的容器

    docker ps
    
  3. 启动一个已停止的容器

    docker start my_container
    
  4. 停止一个正在运行的容器

    docker stop my_container
    
  5. 删除一个容器

    docker rm my_container
    
  6. 进入一个正在运行的容器

    docker exec -it my_container /bin/bash
    
  7. 查看容器的日志

    docker logs my_container
    

    镜像操作

  8. 列出所有镜像

    docker images
    
  9. 拉取一个镜像

    docker pull nginx
    
  10. 删除一个镜像

    docker rmi nginx
    
  11. 构建一个镜像

    docker build -t my_image:latest .
    
    • -t my_image:latest:指定镜像名称和标签
    • .:Dockerfile 所在的目录
  12. 查看镜像的历史记录

    docker history my_image:latest
    

网络操作

  1. 列出所有网络

    docker network ls
    
  2. 创建一个新的网络

    docker network create my_network
    
  3. 删除一个网络

    docker network rm my_network
    
  4. 查看网络的详细信息

    docker network inspect my_network
    

    卷操作

  5. 列出所有卷

    docker volume ls
    
  6. 创建一个新的卷

    docker volume create my_volume
    
  7. 删除一个卷

    docker volume rm my_volume
    
  8. 查看卷的详细信息

    docker volume inspect my_volume
    

系统操作

  1. 清理未使用的资源

    docker system prune
    
    • 删除所有未被使用的容器、网络、卷和镜像。
    • 加上 -a--all 选项可以删除所有资源(包括正在使用的):
      docker system prune -a
      
  2. 查看 Docker 信息

    docker info
    
  3. 查看 Docker 版本

    docker version
    

其他常用命令

  1. 查看 Docker 帮助文档

    docker --help
    
  2. 查看某个 Docker 命令的帮助文档

    docker run --help
    

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

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

相关文章

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance) 都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别: …

入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网…

智联视频超融合平台:电力行业的智能守护者

文章目录 一、远程实时监控与设备状态监测二、提高应急响应能力三、实现无人值守与减员增效四、保障电力设施安全与防范外部破坏五、提升电网运行管理效率与决策科学性六、助力电力企业数字化转型与智能化发展七、智联视频超融合平台 在当今数字化浪潮下,视频联网平…

带虚继承的类对象模型

文章目录 1、代码2、 单个虚继承3、vbptr是什么4、虚继承的多继承 1、代码 #include<iostream> using namespace std;class Base { public:int ma; };class Derive1 :virtual public Base { public:int mb; };class Derive2 :public Base { public:int mc; };class Deri…

信号的产生、处理

一、信号的概念 信号是linux系统提供的一种&#xff0c;向指定进程发送特定事件的方式。收到信号的进程&#xff0c;要对信号做识别和处理。信号的产生是异步的&#xff0c;进程在工作过程中随时可能收到信号。 信号的种类分为以下这么多种&#xff08;用指令kill -l查看&…

如何在 Windows 10/11 上录制带有音频的屏幕 [3 种简单方法]

无论您是在上在线课程还是参加在线会议&#xff0c;您都可能需要在 Windows 10/11 上录制带有音频的屏幕。互联网上提供了多种可选方法。在这里&#xff0c;本博客收集了 3 种最简单的方法来指导您如何在 Windows 10/11 上使用音频进行屏幕录制。请继续阅读以探索&#xff01; …

卸载干净 IDEA(图文讲解)

目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history&#xff0c;表示同时删除 IDEA 本地缓存以及历史。 Delete I…

STM32-笔记34-4G遥控灯

4G接线 一、项目需求 服务器通过4G模块远程遥控开关灯。 二、项目实现 复制项目文件夹38-wifi控制风扇项目 重命名为39-4G遥控点灯 打开项目文件 加载文件 main.c #include "sys.h" #include "delay.h" #include "led.h" #include "ua…

Frontend - 分页(针对 python / Django )

目录 一、同个文件内&#xff08;方式一&#xff09; 1. 前端 html 2. 定义分页界面 3. 获取分页数据 4.后端根据前端分页需求&#xff0c;整理分页数据 5.显示情况 6. JsonResponse 相关知识 二、不同文件内依旧有效&#xff08;方式二&#xff0c;更优化&#xff09;…

【快速实践】深度学习 -- 数据曲线平滑化

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; 在观察数据结果时&#xff0c;我们通常希望获得整体趋…

Postgresql 命令还原数据库

因为PgAdmin打不开&#xff0c;但是数据库已经安装成功了&#xff0c;这里借助Pg命令来还原数据库 C:\Program Files\PostgreSQL\15\bin\psql.exe #链接数据库 psql -U postgres -p 5432#创建数据库 CREATE DATABASE "数据库名称"WITHOWNER postgresENCODING UTF8…

JavaScript 基础2

js的运算符 算数运算符 相加求和&#xff0c;如果用在字符串则是拼接 -相减求差 *相乘求积 /相除求商 %模除求余 具体用法如下 let num 154 let num2 15 document.write(numnum2) document.write(<br>) document.write(num-num2) document.write(<br>) do…

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开&#xff0c;本次讲座中来自Xsens的人形机器人与动捕技术专家Jeffrey Muller与Dennis Kloppenburg不仅将就Xsens动作捕捉系统与人形机器人行为训练中的实际应用进行详细讲解&#xff0c;同时还会对目前大家所关注…

ArcGIS Server 10.2授权文件过期处理

新的一年&#xff0c;arcgis server授权过期了&#xff0c;服务发不不了。查看ecp授权文件&#xff0c;原来的授权日期就到2024.12.31日。好吧&#xff0c;这里直接给出处理方法。 ArcGIS 10.2安装时&#xff0c;有的破解文件中会有含一个这样的注册程序&#xff0c;没有的话&…

Fabric部署-docker安装

一&#xff1a;安装docker 1.先卸载旧docker apt-get remove docker docker-engine docker.io containerd runc PS&#xff1a;新开的虚拟机输入命令后是这样的。 2.更新软件包 在终端中执行以下命令来更新Ubuntu软件包列表和已安装软件的版本: sudo apt update sudo apt …

Scrum中敏捷项目经理(Scrum Master)扮演什么角色?

敏捷开发模式已经逐渐被主流的软件研发团队所接受&#xff0c;其中Scrum是最具代表性的敏捷方法之一。Scrum框架中有三个核心角色&#xff1a;Product Owner&#xff08;PO&#xff09;、Scrum Master&#xff08;SM&#xff09;和Development Team&#xff08;DT&#xff09;。…

计算机毕设-基于springboot的教务管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

ROS导航使用贝塞尔曲线对全局路径进行平滑处理

文章目录 前言一、贝塞尔曲线的使用二、全局路经修改三、结果对比 前言 ROS原生的全局路径规划GlobalPlanner包含A*和Dijkstra&#xff0c;两者原理基本相同&#xff0c;能够规划出从起点到终点的路径&#xff0c;但是由于栅格地图存在锯齿形&#xff0c;得到的全局路径也会出…

GIT 企业级开发学习 1

本节主要命令&#xff1a; git init ls 不能列出 .git ls -a 列出 .git 1. 初始化 Git 仓库 git init • 初始化一个新的 Git 仓库&#xff0c;在当前目录下生成一个 .git 隐藏文件夹&#xff0c;用于存储版本控制信息。 2. 查看隐藏文件 ls -a • 使用 ls -a 显示隐藏文件…

【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍

文章目录 运行游戏按钮、Game游戏窗口和Project项目窗口一、运行游戏按钮二、Game游戏窗口1、右上角设置1.1 如果没有相机渲染则发出警告1.2 在”编程模式”下清除每一帧1.3 窗口最大化 2、上方工具&#xff08;1&#xff09;切换手机模拟器&#xff08;2&#xff09;切换不同显…