ElAdmin后台管理系统容器化实践

 

项目介绍
前后端分离项目
前端:https://gitee.com/agagin/eladmin-web.git
后端: https://gitee.com/agagin/eladmin.git
要素:vue npm springboot mysql redis

前端容器化
思路:

前端构建需要node环境,构建结果通常为dist静态文件,项目运行仅需要web服务器即可。因此采用多阶构建

确认基础镜像:docker search vue-node

验证构建,最终采用codemantn/vue-node作为基础镜像

npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
npm config set registry https://registry.npm.taobao.org
npm install
npm run build:prod


运行环境采用nginx:alpine作为基础镜像,启动容器熟悉镜像的启动目录等信息

把构建的dist拷贝到镜像的/usr/share/nginx/html/即可

因此,综合得到多阶构建的Dockerfile

FROM codemantn/vue-node AS builder

LABEL maintainer="inspur_lyx@hotmail.com"

# config npm
RUN npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ && \
    npm config set registry https://registry.npm.taobao.org

WORKDIR /opt/eladmin-web
COPY  . .

# build
RUN ls -l && npm install && npm run build:prod


FROM nginx:alpine

WORKDIR /usr/share/nginx/html

COPY --from=builder /opt/eladmin-web/dist /usr/share/nginx/html/

EXPOSE 80


构建:

docker build . -t eladmin-web:v1 -f Dockerfile.multi


后端容器化
思路:

java项目,采用mvn进行构建,最终生成jar包,拷贝到jdk环境中启动即可,因此使用多阶构建

手动构建验证

docker search maven:alpine
docker run --rm -ti aerialist7/maven-git sh
# git clone xxxxx
# mvn clean package...


得到的Dockerfile:

FROM aerialist7/maven-git as builder

WORKDIR /opt/eladmin
COPY  . .
RUN mvn clean package

FROM java:8u111
WORKDIR /opt/eladmin
COPY --from=builder /opt/eladmin/eladmin-system/target/eladmin-system-2.6.jar .
CMD [ "sh", "-c", "java -Dspring.profiles.active=prod -jar eladmin-system-2.6.jar" ]


构建:

docker build . -t eladmin:v1 -f Dockerfile.multi


准备mysql环境

docker run -d -p 3306:3306 --name mysql  -v /opt/mysql:/var/lib/mysql -e MYSQL_DATABASE=eladmin -e MYSQL_ROOT_PASSWORD=luffyAdmin! mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci


准备redis环境

docker run -p 6379:6379 -d --restart=always redis:3.2 redis-server


启动环境
# 后端

docker run --name eladmin-api -d -p 8000:8000 -e DB_HOST=172.21.51.143 -e DB_USER=root -e DB_PWD=luffyAdmin! -e REDIS_HOST=172.21.51.143 eladmin:v1

# 前端
docker run --name eladmin-web -d -p 8080:80  eladmin-web:v1


Django应用容器化实践
django项目介绍
项目地址:https://gitee.com/agagin/python-demo.git

python3 + django + uwsgi + nginx + mysql

内部服务端口8002

容器化Django项目

dockerfiles/myblog/Dockerfile

# This my first django Dockerfile
# Version 1.0

# Base images 基础镜像
FROM centos:centos7.5.1804

#MAINTAINER 维护者信息
LABEL maintainer="inspur_lyx@hotmail.com"

#ENV 设置环境变量
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

#RUN 执行以下命令
RUN curl -so /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo && rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y  python36 python3-devel gcc pcre-devel zlib-devel make net-tools nginx

#工作目录
WORKDIR /opt/myblog

#拷贝文件至工作目录
COPY . .

# 拷贝nginx配置文件
COPY myblog.conf /etc/nginx

#安装依赖的插件
RUN pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt

RUN chmod +x run.sh && rm -rf ~/.cache/pip

#EXPOSE 映射端口
EXPOSE 8002

#容器启动时执行命令
CMD ["./run.sh"]


执行构建:

$ docker build . -t myblog:v1 -f Dockerfile


创建数据库

$ docker exec -ti mysql bash
#/ mysql -uroot -p
#/ create database myblog;

## navicator连接


启动Django应用

## 启动容器
$ docker run -d -p 8002:8002 --name myblog -e MYSQL_HOST=172.21.51.143 -e MYSQL_USER=root -e MYSQL_PASSWD=luffyAdmin!  myblog:v1 

## migrate
$ docker exec -ti myblog bash
#/ python3 manage.py makemigrations
#/ python3 manage.py migrate
#/ python3 manage.py createsuperuser

## 创建超级用户
$ docker exec -ti myblog python3 manage.py createsuperuser

## 收集静态文件
## $ docker exec -ti myblog python3 manage.py collectstatic


访问172.21.51.143:8002/admin

 

posted @ 2022-10-26 17:16  屠魔的少年  阅读(3)  评论(0)    收藏  举报