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

虚拟机+ubuntu+docker+python部署,以及中途遇到的问题和解决方案

虚拟机+ubuntu+docker+python部署,以及中途遇到的问题和解决方案

  • 环境
  • 第一步:docker环境配置
  • 第二步 部署python

环境

本文是基于虚拟机VMware workstation17 ,ubuntu(版本:20.04.4)的环境下 安装docker部署python服务。
(如果有需要可以私信我,我给你发虚拟机的文件,我的虚拟机的用户名和密码是一样的)

第一步:docker环境配置

sudo apt-get remove docker docker-engine docker.io containerd runc

这个是 用来卸载系统默认安装的docker,有的有有的没有,没有也没事接着执行

sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

安装依赖

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt update
sudo apt-get update

在这里插入图片描述
要注意:在使用虚拟机ubuntu的时候需要修改网络适配器NAT ,不然会出写无法联网的情况:在这里插入图片描述

#安装Docker
sudo apt install docker-ce docker-ce-cli containerd.io#查看版本检验 docker 安装效果
sudo docker version#查看status
sudo systemctl status docker# 安装
sudo apt-get install bash-completionsudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.shsource /etc/bash_completion.d/docker.sh

在这里插入图片描述
这里要补充一个可能遇到的问题:
curl: (7) Failed to connect to raw.githubusercontent.com port 443: 拒绝连接
需要通过下面的指令修改DNS 服务器 强制绑定 raw.githubusercontent.com 的 IP(绕过 DNS 解析限制

sudo nano /etc/resolv.conf
nameserver 114.114.114.114
151.101.76.133 raw.githubusercontent.com

这个IP地址从这里找:https://site.ip138.com/raw.Githubusercontent.com/
要对这几行指令进行补充 sudo 打开 conf文件以后 输入下面这两行指令然后使用 ctrl+o 回车 ctrl+x 返回终端

sudo nano /etc/docker/daemon.json

使用这个指令打开 配置文件 ,在 配置文件中

{"registry-mirrors": ["https://docker.m.daocloud.io"]
} 

强调:这个配置文件绝对不能出错,当然了我有一个偷懒的小妙招,这也是我经历过多次检查才发现的,或许可以给你提供帮助,请看下面的代码

sudo apt install jq
jq . /etc/docker/daemon.json

这一行可以让终端自己判断正确的格式,你给他复制到json中就可以了

sudo nano /etc/docker/daemon.json

然后把jq输出的结果复制到json中 使用ctrl+o、回车、ctrl+x保存。
你可以通过这个指令,判断是否配置正确:

docker info | grep "Registry Mirrors"

如果能展现你的配置就没问题了
再补充一个可能会出错的问题,是关于yaml的配置文件,原因在于json的镜像虽然配置成功但是dns解析不出来要设置dns解析服务器,甚至于很多人的配置文件可能是空的,你就跟着我做就行了,反正不吃亏,我的经验可是经过了一周的研究,出了错就找豆包问才得到的,你就不用管别的了,干就完事儿了。
第一步 查看自己的ip addr

ip addr

在这里插入图片描述
记住这个名字
输入下面的代码:

sudo nano /etc/netplan/00-installer-config.yaml

打开这个yaml文件以后复制一下内容,(复制以后记得删除# 和文字,无论是json还是yaml都别保留注释,我加注释是为了大家能够看懂):

network:version: 2renderer: networkdethernets:ens33:  # 这里是你的网络接口名,按实际情况修改addresses: []dhcp4: truenameservers:addresses: [223.5.5.5, 223.6.6.6]  # 添加 DNS 服务器地址

找到带有192.xxx的哪一行的名字 我的是ens33
使用ctrl+o、回车、ctrl+x保存
现在我们的docker就已经安装完成了,开始第一个部署python的例子

第二步 部署python

首先,创建路径 打开目录

mkdir python-docker-demo
cd python-docker-demo

在该目录下 输入 nano app.py 创造并修改app.py,加入如下内容:

from flask import Flask
import datetimeapp = Flask(__name__)# 首页:返回欢迎信息
@app.route('/')
def home():return "Hello! 这是一个用Docker部署的Python服务 <br> 当前时间:" + str(datetime.datetime.now())# 状态页:返回服务状态
@app.route('/status')
def status():return "服务运行正常!"if __name__ == '__main__':# 允许外部访问(Docker容器外可以访问)app.run(host='0.0.0.0', port=5000)

使用ctrl+o、回车、ctrl+x保存
在该目录下,输入nano requirements.txt 创造并修改 requirements.txt ,加入如下内容:

flask==2.0.1

使用ctrl+o、回车、ctrl+x保存
在该目录下,输入nano Dockerfile 创造并修改 Dockerfile ,加入如下内容:

# 使用官方Python镜像作为基础(相当于一个自带Python的系统)
FROM python:3.9-slim# 设置工作目录(容器内的文件夹,类似我们本地的python-docker-demo)
WORKDIR /app# 把本地的requirements.txt复制到容器的/app目录下
COPY requirements.txt .# 在容器内安装依赖(运行pip install)
RUN pip install --no-cache-dir -r requirements.txt# 把本地的app.py复制到容器的/app目录下
COPY app.py .

请你在目录下输入ls 确保 app.py Dockerfile requirements.txt三个文件齐全且文件名不要出错以后进入下面的步骤

docker build -t python-docker-app:latest .
docker run -d -p 5000:5000 --name my-python-service python-docker-app:latest
curl http://localhost:5000

在这里插入图片描述
代表你已经正确的完成一个使用docker部署python服务了,上面已经囊括了你在20.0.4能出现的所有错误,我已经被折磨一周多了才改好了,希望能给你提供帮助,友情提示,Ubuntu最好不要弄版本太新的,一个是docker配套搞得不太好,一个是资料不多,就得自己慢慢试错,没必要,最好找同事或者别人的现成的虚拟机文件,无论是配置还是汉化都搞得不错。

http://www.dtcms.com/a/365669.html

相关文章:

  • 计算机科学领域-CS基础
  • 信创MySQL到达梦数据库的SQL语法转换技术解析
  • 使用Java定时爬取CSDN博客并自动邮件推送
  • CPU和GPU的区别与作用域
  • prometheus+grafana搭建
  • 虚拟机NAT模式通过宿主机(Windows)上网不稳定解决办法(无法上网)(将宿主机设置固定ip并配置dns)
  • 【面试题】OOV(未登录词)问题如何解决?
  • Unity 枪械红点瞄准器计算
  • K8S 部署 NFS Dynamic Provisioning(动态存储供应)
  • Grafana可视化平台深度解析:选型、竞品、成本与资源消耗
  • SpringCloud整合分布式事务Seata
  • C语言(长期更新)第13讲:指针详解(三)
  • 毒蛇品种检测识别数据集:12个类别,6500+图像,全yolo标注
  • 印度股票数据API对接文档
  • 硬件(一)51单片机
  • 【和春笋一起学C++】(三十九)类作用域
  • [鸿蒙心迹]带新人学鸿蒙的悲欢离合
  • “企业版维基百科”Confluence
  • Docker实战指南:从安装到架构解析
  • 【QT特性技术讲解】QPrinter、QPdf
  • leetcode 38 外观数列
  • 联想开天X7:携手海光,开启信创PC高性能新时代
  • Java中 String、StringBuilder 和 StringBuffer 的区别?
  • WHAT - 协程及 JavaScript 具体代码示例
  • PgManage:一款免费开源、跨平台的数据库管理工具
  • Packet Radio Network,PRNET
  • 从发现到恢复,看瑞数信息如何构建“抗毁重构”实战路径
  • VR节约用水模拟体验系统:沉浸式体验如何改变我们的用水习惯
  • 全员0门槛数据分析:纷享销客BI Agent,让数据价值直抵业务
  • 实现信号的小波分解和重构