虚拟机+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配套搞得不太好,一个是资料不多,就得自己慢慢试错,没必要,最好找同事或者别人的现成的虚拟机文件,无论是配置还是汉化都搞得不错。