云服务器使用4——Docker打包项目代码部署运行

一、背景

前面的文章讲解了如何购买云服务器,如何使用现成的项目为自己所用。现在进入下一个阶段,如何打包自己的项目代码,然后各个地方部署,我们实现一个简单的web项目。

二、前期准备

少量的Dockerfile编写知识,少量的Docker使用知识,少量的Python知识。今天需要编写少量的代码,所有的操作都可以跟着操作即可,练习的多了就会了。

然后还需要用到镜像仓库,我们的环境打包成镜像后,保存到镜像仓库,在其他地方运行时,从仓库里取出对应的镜像就可以保持所有的环境一致性,解决不同环境不同配置导致的问题。

有两种方式的镜像仓库,第一种搭建自己的镜像仓库,根据前面的学习经验自行尝试。第二种使用现成的镜像仓库,下面提供地址,进入地址后,先自行注册登录,配置仓库,可以得到仓库的用户名(username),后续都是使用这个用户名进行镜像操作。

镜像仓库:https://hub.docker.com/

三、项目实践

1、项目目录设置

static:用于存放前端传过来的数据,目录下为空

templates:用于存放前端页面代码,目录下只有index.html,html和js均写在index.html里面

app.py:后端代码,接受http数据,并进行处理

Dockerfile:编写docker可识别的打包和运行程序

requirements.txt:记录所有需要的python三方库,也是为了镜像打包时使用

项目功能:很简单,在text文本框内输入内容,然后保存到后端的data目录下。

主要目的:打通前后端链路以及如何使用docker实现一次打包,到处部署。

2、代码内容

1)index.html内容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>

    <p>Hello Python</p>
    <input type="text" id="inputText">
    <button id="submitButton">Submit</button>

    <script>
        $(document).ready(function(){
            $('#submitButton').click(function(){
                var inputText = $("#inputText").val();

                $.ajax({
                    url: '/button_clicked',
                    type: 'POST',
                    data: {inputText: inputText},
                    success: function(response){
                        alert("Response from server: " + response);
                    },
                    error: function (xhr, status, error){
                        console.log(xhr.responseText)
                    }
                });
            });
        });
    </script>

</body>
</html>

2)app.py的内容如下:

import os

from flask import Flask, request
from jinja2 import FileSystemLoader, Environment

app = Flask(__name__)
env = Environment(loader=FileSystemLoader('templates'))


@app.route('/')
def hello_world():
    template = env.get_template('index.html')
    return template.render()


@app.route('/button_clicked', methods=['POST'])
def button_clicked():
    # 获取内容,保存到文件中
    input_text = request.form.get("inputText")
    file = os.path.join(os.getcwd(), 'static', 'save_data.txt')
    with open(file, mode='a', encoding='utf-8') as f:
        f.write(input_text)

    return "Saved successfully"


if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True, port=2333)

3)requeirements.txt内容如下:

blinker==1.7.0
cffi==1.16.0
click==8.1.7
colorama==0.4.6
Flask==3.0.2
gevent==24.2.1
greenlet==3.0.3
itsdangerous==2.1.2
Jinja2==3.1.3
MarkupSafe==2.1.5
pycparser==2.21
setuptools==69.1.1
Werkzeug==3.0.1
zope.event==5.0
zope.interface==6.2

可以直接在项目根目录下使用命令导出三方库到requirements.txt中

pip freeze > requirements.txt

4)Dockerfile中的内容如下:

FROM python:3.12.1

WORKDIR ./web_doupo

ADD . .

RUN pip install -r requirements.txt

CMD ["python", "./app.py"]
3、打包项目,上传镜像仓库

1)进入项目根目录,即Dockerfile同级目录,登录docker

docker login

输入注册docker时的用户名和密码

2)执行打包命令

docker build -t web_doupo:v1 .

3)等待打包完成后,添加tag,格式如下:

docker tag web_doupo:v1 username/web_doupo:v1

username:用户名获取方式见文章上方创建账号时获取。下面提到的username均这样操作。

4)推送镜像文件到镜像仓库

docker push username/web_doupo:v1

5)查看是否推送成功,进入仓库地址,有自己的镜像说明推送成功。

4、下载镜像

1)进入腾讯云服务器,登录docker

docker login

输入注册docker时的用户名和密码

2)拉取上传好的镜像

docker pull username/web_doupo:v1

3)开放腾讯云服务器端口

4)运行镜像程序

docker run -v ./data:/web_doupo/static -p 0.0.0.0:2333:2333 username/web_doupo:v1

-v:挂载项目的目录/web_doupo/static到当前目录的data下,用于保存数据不丢失

-p:映射端口2333,用于web访问

5、效果验证

1)打开浏览器访问:

http://公网IP:2333/

2)输入内容后,点击Submit,查看网页提示和本地数据是否保存下来

四、经验总结

腾讯云免费试用到期了,暂时这类实用分享结束。通过这些分享,发现当前工具利用docker打包运行的太多了,而且通过使用发现确实能够提高效率,解决了大量的环境问题,节省了很多时间,从事互联网行业,要好好了解一下这个工具,协助自己的日常工作。

五、问题解决

1、访问不了docker网站,提示登录超时,或者下载,上传超时。

解决办法:由于禁制的问题,国内访问docker网站时好时坏,如果遇到上传,下载超时,两种解决办法。

第一种:等待腾讯云访问docker地址突然好了,一般情况下等待一下就可以了。

第二种:更换镜像地址为国内镜像地址

2、所有的环境都需要安装docker engine

        ubuntu安装docker engine见前面的文章

        windows安装直接安装Docker Desktop软件,会自动安装docker engine

好好学习,天天向上。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值