docker部署Flask+Vue3项目

创建数据库

创建数据库配置文件

shell 复制代码
mkdir -p /data/dockerData/mysql/conf

cd /data/dockerData/mysql/conf

vi my.config

my.config文件内容

shell 复制代码
[mysql]
#设置mysql客户端默认字符集
default-character-set=UTF8MB4
 
[mysqld]
#设置3306端口
port=3306
 
#允许最大连接数
max_connections=200
 
#允许连接失败的次数
max_connect_errors=10
 
#默认使用"mysql_native_password"插件认证
default_authentication_plugin=mysql_native_password
 
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=UTF8MB4
 
#开启查询缓存
explicit_defaults_for_timestamp=true
 
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
#等待超时时间秒
wait_timeout=60
 
#交互式连接超时时间秒
interactive-timeout=600
secure_file_priv=/var/lib/mysql
 
[client]
default-character-set=UTF8MB4

拉取运行mysql镜像

shell 复制代码
docker pull mysql:5.7

docker run  --privileged -d -p 3306:3306 -v /data/dockerData/mysql/conf/my.config:/etc/mysql/my.config -v /data/dockerData/mysql/logs:/logs -v /data/dockerData/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 --name mysql5.7 镜像id

将sql文件传入/data/dockerData/mysql/data文件夹

进入mysql容器

shell 复制代码
docker exec -it a1ff98487160 /bin/bash

登入mysql

shell 复制代码
bash-4.2# mysql -uroot -p
Enter password: 

创建项目数据库

shell 复制代码
#创建数据库
create database xxx;
#使用数据库
use xxx;

#导入数据
source /var/lib/mysql/data/liu_oa.sql

开通3306端口

shell 复制代码
firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

打包部署flask后端项目

生成项目依赖包

shell 复制代码
pip freeze > requirements.txt

项目入口文件(app.py)修改

python 复制代码
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=9000, debug=True)

创建Dockerfile文件

文件结构

Dockerfile文件内容

dockerfile 复制代码
FROM python:3.8

# 设置 pip 镜像源为阿里云镜像
ENV PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/

# 设置镜像源不验证 SSL
ENV PIP_TRUSTED_HOST=mirrors.aliyun.com

RUN mkdir /app
WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

# 复制整个应用程序到 app 目录中
COPY *.py /app/
COPY blueprints/ /app/blueprints/
COPY templates/ /app/templates/

# 设置 Flask 环境变量
ENV FLASK_APP=app.py

EXPOSE 9000

# 启动 Flask 应用
CMD ["python", "app.py", "--host=0.0.0.0"]

将项目打成压缩包发送到服务器

解压进入项目目录中,构建镜像

shell 复制代码
docker build -t 镜像名:1.0 .

运行镜像

shell 复制代码
docker run -d -p 9000:9000 --name 容器名 镜像id

开通端口

shell 复制代码
firewall-cmd --zone=public --add-port=9000/tcp --permanent

firewall-cmd --reload

测试

shell 复制代码
[root@docker_01 ~]# curl http://localhost:9000
[
  {
    "author": "yohoo",
    "content": "\u6211\u7684\u5bc6\u7801\u662f123456",
    "create_time": "Fri, 11 Oct 2024 17:03:09 GMT",
    "id": 2,
    "title": "\u6211\u662fyohoo\u54c8\u54c8\u54c8"
  },
  {
    "author": "zzz",
    "content": "\u575a\u6301\u4e0d\u61c8 \u594b\u6597",
    "create_time": "Fri, 11 Oct 2024 16:05:33 GMT",
    "id": 1,
    "title": "\u600e\u4e48\u5b66\u597dpython"
  }
]

打包部署vue3前端项目

前端项目打包

shell 复制代码
npm run build

创建nginx配置文件

default.conf

shell 复制代码
server {
    listen       80;
    server_name  宿主机ip; # 修改为docker服务宿主机的ip

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

创建Dockerfile文件

文件内容

dockerfile 复制代码
FROM nginx

MAINTAINER yohoo

RUN rm /etc/nginx/conf.d/default.conf

ADD default.conf /etc/nginx/conf.d/

COPY dist/ /usr/share/nginx/html/

打包dist项目上传至服务器

目录结构

解压进入项目目录中,构建镜像

shell 复制代码
docker build -t 镜像名:1.0 .

运行镜像

shell 复制代码
docker run -d -p 88:80 --name 容器名 镜像id

开通端口

shell 复制代码
firewall-cmd --zone=public --add-port=88/tcp --permanent

firewall-cmd --reload

测试

tips

解决页面引入本地图片可能出现无法加载问题

创建pub-use.js

js 复制代码
const getAssetsFile = (url)=>{
    return new URL(`../assets/images/${url}`,import.meta.url).href;
}

export default {getAssetsFile}

vue文件使用

vue 复制代码
import pubUse from "@/utils/pub-use.js";

<img :src="pubUse.getAssetsFile('avatar.jpg')"/>

镜像上传阿里云

登录

shell 复制代码
[root@docker_01 liu_oa_docker]# docker login --username=淘宝id registry.cn-hangzhou.aliyuncs.com
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

推送

shell 复制代码
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名:[镜像版本号]
相关推荐
num_killer12 分钟前
小白的Docker学习
学习·docker·eureka
火龙果研究院17 分钟前
利用docker和docker-compose部署单机kafka
docker·容器·kafka
java_logo34 分钟前
基于 Docker 的 MongoDB 部署与使用指南
mongodb·docker·容器·mongodb部署·mongodb部署文档·mongodb部署方案·docker部署mongodb
一尘之中41 分钟前
在 Ubuntu 上安装 Docker 的完整指南(使用国内镜像源)
linux·docker·ai写作
黎明晓月1 小时前
Redis容器化(Docker)
java·redis·docker
叽里咕噜怪1 小时前
Kubernetes 操作与项目生命周期管理(初学者详解版)
云原生·容器·kubernetes
企鹅郁金香1 小时前
使用Docker部署Gitlab和Gerrit (一)
docker·容器·gitlab·gerrit部署
Benny的老巢1 小时前
Docker环境n8n连接Chrome DevTools Protocol的操作方法
docker·chrome devtools·ai agent·n8n·n8n工作流
可爱又迷人的反派角色“yang”1 小时前
k8s(三)
linux·运维·网络·docker·容器·kubernetes
三块钱07941 小时前
nas-群晖docker查询注册表失败解决办法
运维·docker·容器