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

4.【Linux虚拟机】创建自己的docker image并提供后端服务

1、下载nodejs(这个暂时没用到,先记下来)

curl -sL https://deb.nodesource.com/setup_18.x | sudo bash -
sudo apt-get update
sudo apt-get install nodejs

2、手动创建一个docker image
创建名为Dockerfile的文件(无任何后缀),添加如下代码

FROM python:3.8 # 拉取python3.8的镜像,以其为基准构建自己的image

RUN mkdir -p /usr/src/app  # 在image里创建directory

WORKDIR /usr/src/app  # 改变image当前路径到新建的路径

ADD server.py .  # 添加Linux当前路径下的server.py到image里的当前路径,即/usr/src/app

CMD ["python3", "server.py"] # 实例化image为container时运行该命令

构建docker image

docker build -t tag .

server.py文件

# server.py 
from http.server import HTTPServer, BaseHTTPRequestHandler 
class MyHTTPRequestHandler(BaseHTTPRequestHandler): 
	def do_GET(self): 
	self.send_response(200) 
	self.end_headers() 
	self.wfile.write(b'Hello world! Sincerely, Python.') 
# note: localhost only accessible within vm/container 
# use '' to bind to all interfaces 
httpd = HTTPServer(('', 8000), MyHTTPRequestHandler) 
httpd.serve_forever()

3、运行docker

docker run --name my-container -p 8088:8000 -v /home/user/my-html:/usr/share/nginx/html:ro --restart always -d -e NGINX_PORT=3000 tag:latest

上面参数解释
–name my-container
实例化image为container,其名字为my-container

-p 8088:8000
映射container的8000端口为Linux的8088端口

-v /home/user/my-html:/usr/share/nginx/html:ro
把Linux的/home/user/my-html目录挂载到container的/usr/share/nginx/html目录,ro表示read only

–restart always
设置container重启规则,always表示总是会重启而不管exit的状态,除非是手动docker stop

-d
表示detach,这样docker run启动后不会停留在这个命令,而是让container后台运行,因此你可以用terminal继续用其他命令

-e NGINX_PORT=3000
设置container的环境变量

tag:latest
表示要实例化的image的名字

当然大部分命令都不需要,我们可以只用几个argument来启动

docker run --name my-container -p 8088:8000 -d tag:latest

仅仅映射端口,这样可以从Linux访问container里的server.py提供的后端服务
-d用来detach,这样我们能继续使用terminal

4、访问server.py提供的接口

curl http://localhost:8088/

这样我们就能在命令行看到Hello world! Sincerely, Python.

5、添加更多文件到docker image

FROM python:3.8 

RUN mkdir -p /usr/src/app 

WORKDIR /usr/src/app 

ADD ./hw1p2/* ./  # 可以看到,直接把一个目录下所有文件添加到/usr/src/app目录下

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

相关文章:

  • 基于STFT和卷积神经网络的时序数据分类 代码+数据 可直接运行
  • 神经网络建模的适用范围,神经网络建模流程详解
  • 实名核验类API推荐
  • cmakelist.txt , cmake, makefile, make 【超快区分理解】
  • 【去雾论文阅读】Saturation Based Iterative Approach for Single Image Dehazing
  • 机器学习:详细推导序列最小优化SMO算法+Python实现
  • Flask 学习-20. route 路由中的 endpoint 参数
  • bp神经网络反向传播推导,bp神经网络的传递函数
  • Flask 学习-21. 项目配置通过.env环境变量启动开发/生产环境
  • 图像识别和机器视觉区别,比较两幅图像的相似度
  • Jetson Orin平台Jetpack5.0.2 VIFALC_TDSTATE问题调试
  • Elastic search的日期问题
  • DOM基础应用
  • 足疗APP
  • 一张图进阶 RocketMQ - 消息存储
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 78. Subsets
  • Django 博客开发教程 16 - 统计文章阅读量
  • EventListener原理
  • express.js的介绍及使用
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 多线程编程之:notify 和 wait 用法
  • JS+CSS实现数字滚动
  • Next.js之基础概念(二)
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Python - 闭包Closure
  • 安装python包到指定虚拟环境
  • 关于 Cirru Editor 存储格式
  • 如何优雅地使用 Sublime Text
  • 思维导图—你不知道的JavaScript中卷
  • 再谈express与koa的对比
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #Java第九次作业--输入输出流和文件操作
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $.ajax()参数及用法
  • (1)Android开发优化---------UI优化
  • (Python第六天)文件处理
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (rabbitmq的高级特性)消息可靠性
  • (ros//EnvironmentVariables)ros环境变量
  • (solr系列:一)使用tomcat部署solr服务
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)丶RabbitMQ的六大核心
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (力扣题库)跳跃游戏II(c++)
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)详解PHP处理密码的几种方式
  • (转载)Linux 多线程条件变量同步
  • **CI中自动类加载的用法总结
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .FileZilla的使用和主动模式被动模式介绍
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Framework .NET Core与 .NET 的区别
  • .net 中viewstate的原理和使用