说明
优化方案:因为在实际开发中,经常修改前后端代码,但并不会频繁的安装第三方包,因此将前后端的第三方包做成基础镜像。 前后端代码修改之后,服务器重新构建前后端容器即可,并且在重新构建的时候,并不需要安装第三方包
在django-vue3-admin
项目中默认有以下:
dvadmin3-web
:前端容器dvadmin3-django
:后端容器dvadmin3-mysql
:mysql数据库容器dvadmin3-celery
:异步任务容器dvadmin3-redis
:redis数据库容器
我们在实际开发中,经常要重新构建的只有前端容器和后端容器,后三个容器一般是初始化生成之后就不会重新构建,因此优化前后端的Dockerfile
和DockerfileBuild
文件
docker_env/web
在开发中,如果前端引入了新的第三方的包,就重新构建一次基础镜像
构建前端基础包
DockerfileBuild
docker_env/web/DockerfileBuild
文件
dockerfile
FROM node:16.19-alpine
WORKDIR /web/
COPY ./web/package.json .
RUN yarn install --registry=https://registry.npmmirror.com
下载node:16.19-alpine
镜像包
下载
node:16.19-alpine
镜像包到本地,提高dvadmin3-base-web
的构建速度
docker pull node:16.19-alpine
构建dvadmin3-base-web
docker build -f .\docker_env\web\DockerfileBuild -t swr.cn-southwest-2.myhuaweicloud.com/muzili/dvadmin3-base-web .
上传到华为云镜像仓库
也可以是阿里云的镜像仓库,主要将前端基础镜像上传到自己的镜像仓库,提高
FROM
的速度
docker push swr.cn-southwest-2.myhuaweicloud.com/muzili/dvadmin3-base-web
下载nginx:alpine
镜像包
docker pull nginx:alpine
上传到华为云镜像仓库
dockerfile
# 修改标签
docker tag nginx:alpine swr.cn-southwest-2.myhuaweicloud.com/muzili/nginx:alpine
# 上传到华为云仓库
docker push swr.cn-southwest-2.myhuaweicloud.com/muzili/nginx:alpine
Dockerfile
修改docker_env/web/Dockerfile
文件,将FROM
改成自己的镜像仓库 因为在dvadmin3-base-web
中已经安装了所有的包,所以在Dockerfile
删除RUN yarn install --registry=https://registry.npmmirror.com
以提高构建速度
dockerfile
FROM swr.cn-southwest-2.myhuaweicloud.com/muzili/dvadmin3-base-web:latest
WORKDIR /web/
COPY web/. .
RUN yarn build
FROM swr.cn-southwest-2.myhuaweicloud.com/muzili/nginx:alpine
COPY ./docker_env/nginx/my.conf /etc/nginx/conf.d/my.conf
COPY --from=0 /web/dist /usr/share/nginx/html
docker_env/django
在开发中,如果后端引入了新的第三方的包,就重新构建一次基础镜像
构建后端基础包
DockerfileBuild
docker_env/django/DockerfileBuild
文件
dockerfile
FROM python:3.10-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update && apk add -doc -completion git freetds-dev jpeg-dev linux-headers mysql-client mariadb-dev build-base libffi-dev openssl-dev zlib-dev bzip2-dev pcre-dev ncurses-dev readline-dev tk-dev postgresql-dev
WORKDIR /backend
COPY ./backend/requirements.txt .
RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
下载python:3.10-alpine
镜像包
下载
python:3.10-alpine
镜像包到本地,提高dvadmin3-base-django
的构建速度
docker pull python:3.10-alpine
构建dvadmin3-base-django
docker build -f .\docker_env\django\DockerfileBuild -t swr.cn-southwest-2.myhuaweicloud.com/muzili/dvadmin3-base-django .
上传到华为云镜像仓库
docker push swr.cn-southwest-2.myhuaweicloud.com/muzili/dvadmin3-base-django
Dockerfile
修改docker_env/django/Dockerfile
文件,将FROM
改成自己的镜像仓库 因为在dvadmin3-base-django
中已经安装了所有的包,所以在Dockerfile
删除RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
以提高构建速度
dockerfile
FROM swr.cn-southwest-2.myhuaweicloud.com/muzili/dvadmin3-base-django:latest
WORKDIR /backend
COPY ./backend/ .
CMD ["/backend/docker_start.sh"]
docker_env/celery
Dockerfile
修改docker_env/celery/Dockerfile
文件,将FROM
改成自己的镜像仓库
dockerfile
FROM swr.cn-southwest-2.myhuaweicloud.com/muzili/dvadmin3-base-django:latest
WORKDIR /backend
COPY ./backend/ .
CMD ["celery", "-A", "application", "worker", "-B", "--loglevel=info"]
需要注意的是,在自己的镜像仓库中,如果镜像类型:
- 私有:需要登录才能使用
- 公用:任何人都可以使用
服务器部署
初始化
第一次执行 sh init.sh
可能会出现后端容器连不上数据库进入后端容器,手动执行
docker exec -ti dvadmin3-django
python manage.py makemigrations
python manage.py migrate
python manage.py init -y
重新构建前端
本地开发过程中修改了前端代码,在服务器重新构建前端
docker-compose up -d --build dvadmin3-web
重新构建后端
本地开发过程中修改了后端代码,在服务器重新构建后端
docker-compose up -d --build dvadmin3-django
这样修改之后,速度超快的
links: