Docker部署前后端的实现步骤
作者:今天又在写代码
本文主要介绍了Docker部署前后端的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一、Docker前置环境检查
1. 查看所有容器
# 正在运行的容器 docker ps # 全部容器(运行+停止的,必看) docker ps -a
2. 查看本地镜像
docker images
3. 查看网络
docker network ls
4. 查看所需端口占用
# 看宿主机80/8080有没有被占用 ss -tuln | grep -E '80|8080'
5. 清理旧容器常用命令
# 停止容器 docker stop 容器名/容器ID # 删除容器 docker rm 容器名/容器ID # 删除镜像 docker rmi 镜像名:标签 docker rmi nginx:latest # 删除网络 docker network rm minikube
二、Docker前后端部署
1.容器部署流程
①. 先创建自定义网络(固定!)
②. 启动 MySQL(3308)
③. 启动 3 个 Java 后端(8081、8082、8083)
④. 最后启动 Nginx(8080)
2. 创建网络(数据智能分析平台)
docker network create data-platform-net
如果使用--network=host共用虚拟机的 IP、网卡、网络栈可以不创建
3.MySQL容器构建与运行
①.创建MySQL本地目录挂载
# 先创建目录(/usr/local/mysql) mkdir -p /usr/local/mysql/data mkdir -p /usr/local/mysql/conf mkdir -p /usr/local/mysql/init
②.启动MySQL容器
docker run -d \ --name mysql \ --network=host \ -e MYSQL_ROOT_PASSWORD=123456 \ -e TZ=Asia/Shanghai \ -e MYSQL_TCP_PORT=3308 \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/init:/docker-entrypoint-initdb.d \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ --restart=always \ mysql:8.0
docker run -d \ --name mysql \ --network data-platform-net \ -p 3308:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -e TZ=Asia/Shanghai \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/init:/docker-entrypoint-initdb.d \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ --restart=always \ mysql:8.0
③.进入MySQL容器查看数据库
# 进入 Docker 容器内的 MySQL 的标准命令 docker exec -it mysql mysql -uroot -p123456
④.设置root远程权限问题
-- 1. 授权 root 可以从任何地址登录(解决远程权限问题) ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; -- 2. 刷新权限,立即生效 FLUSH PRIVILEGES;
⑤.本地电脑远程连接
# 本地电脑连接,验证成功 mysql -h192.168.242.128 -P3308 -uroot -p123456 --skip-ssl
4.Java 后端容器构建与运行
①.Dockerfile--qa_system
FROM eclipse-temurin:17-jammy # 编码 ENV LANG=C.UTF-8 # 工作目录 WORKDIR /qa_system # 拷贝jar COPY qa_system.jar . # 端口 EXPOSE 8081 # 启动 ENTRYPOINT ["java", "-jar", "qa_system.jar"]
打包jdk17.tar.gz和qa_system.jar到/root/docker-project目录下
②.构建qa_system镜像
docker build -t qa_system-image .
③.构建运行qa_system容器
docker run -d \ --name qa_system \ --network=host \ --restart=always \ qa_system-image
①.Dockerfile--stock_tushare
FROM eclipse-temurin:17-jammy # 编码 ENV LANG=C.UTF-8 # 工作目录 WORKDIR /stock_tushare # 拷贝jar COPY stock_tushare.jar . # 端口 EXPOSE 8082 # 启动 ENTRYPOINT ["java", "-jar", "stock_tushare.jar"]
打包jdk17.tar.gz和stock_tushare.jar到/root/docker-project目录下
②.构建stock_tushare镜像
docker build -t stock_tushare-image .
③.构建运行qa_system容器
docker run -d \ --name stock_tushare \ --network=host \ --restart=always \ stock_tushare-image
①.Dockerfile--jiekou
FROM eclipse-temurin:17-jammy # 编码 ENV LANG=C.UTF-8 # 工作目录 WORKDIR /jiekou # 拷贝jar COPY jiekou.jar . # 端口 EXPOSE 8083 # 启动 ENTRYPOINT ["java", "-jar", "jiekou.jar"]
FROM centos:7 COPY jdk17.tar.gz /usr/local/ RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz ENV JAVA_HOME=/usr/local/jdk-17.0.10 ENV PATH=$JAVA_HOME/bin:$PATH ENV LANG=en_US.UTF-8 ENV LC_ALL=en_US.UTF-8 RUN mkdir -p /jiekou WORKDIR /jiekou COPY jiekou.jar . EXPOSE 8083 ENTRYPOINT ["java", "-jar", "jiekou.jar"]
打包jdk17.tar.gz和jiekou.jar到/root/docker-project目录下
②.构建jiekou镜像
docker build -t jiekou-image .
③.构建运行jiekou容器
docker run -d \ --name jiekou \ --network=host \ --restart=always \ jiekou-image
docker run -d \ --name jiekou \ --network data-platform-net \ -p 8083:8083 \ --restart=always \ jiekou-image
5.Nginx容器构建与运行
①.创建Nginx本地目录挂载
mkdir -p /usr/local/SZTU-IAP/html mkdir -p /usr/local/SZTU-IAP/conf
②.主机模式
docker run -d \ --name nginx-SZTU-IAP \ -v /usr/local/SZTU-IAP/html:/usr/share/nginx/html \ -v /usr/local/SZTU-IAP/conf/nginx.conf:/etc/nginx/nginx.conf \ --network=host \ --restart=always \ nginx:1.20.2
③.端口映射模式
docker run -d \ --name nginx-SZTU-IAP \ -v /usr/local/SZTU-IAP/html:/usr/share/nginx/html \ -v /usr/local/SZTU-IAP/conf/nginx.conf:/etc/nginx/nginx.conf \ --network data-platform-net \ -p 8080:8080 \ nginx:1.20.2
三、多容器编排工具
①.编写docker-compose.yml
version: '3.8'
services:
# 1. MySQL 8.0
mysql:
image: mysql:8.0
container_name: mysql
network_mode: host
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
MYSQL_TCP_PORT: 3308
volumes:
- /usr/local/mysql/data:/var/lib/mysql
- /usr/local/mysql/init:/docker-entrypoint-initdb.d
- /usr/local/mysql/conf:/etc/mysql/conf.d
# 2. QA 系统 (8081)
qa_system:
image: qa_system-image
build:
context: .
dockerfile: Dockerfile
container_name: qa_system
network_mode: host
restart: always
# 3. 股票服务 (8082)
stock_tushare:
image: stock_tushare-image
build:
context: .
dockerfile: Dockerfile
container_name: stock_tushare
network_mode: host
restart: always
# 4. 接口服务 (8083)
jiekou:
image: jiekou-image
build:
context: .
dockerfile: Dockerfile
container_name: jiekou
network_mode: host
restart: always
# 5. Nginx 前端 (8080)
nginx:
image: nginx:1.20.2
container_name: nginx-SZTU-IAP
network_mode: host
restart: always
volumes:
- /usr/local/SZTU-IAP/html:/usr/share/nginx/html
- /usr/local/SZTU-IAP/conf/nginx.conf:/etc/nginx/nginx.conf②.一键启动所有服务
docker-compose up -d --build
③.一键停止所有
docker-compose down
④.查看所有日志
docker-compose logs -f
四、注意
1.Docker注意事项
①.Docker国内加速镜像站
# 写入配置
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"debug": true,
"experimental": false,
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://lispy.org",
"https://docker-0.unsee.tech"
]
}
EOF
# 重启docker生效
systemctl daemon-reload
systemctl restart docker# 验证是否配置成功 docker info
②.容器运行底层结构

1.虚拟机启动:分钟级Docker 容器启动:毫秒级
2.底层镜像只下载 1 次,所有容器共享同一个底层
3.底层系统已经在硬盘里了,容器只是启动一个进程,不是启动一个完整操作系统
③.系统镜像对比
centos:7 缺点:
- 自带很多 Linux 工具(你 Java 根本不用)
- 自己解压 JDK,容易路径错、版本错
- 环境变量要手动配
- 冗余文件多
eclipse-temurin:17 优点:
- 专为 Java 打造
- 只保留运行 Java 必需的最小系统
- JDK 官方预装、环境变量自动配好
- 没有多余垃圾文件
- 安全、稳定、官方维护

2.MySQL注意事项
①.MySQL的root授权
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; UNINSTALL PLUGIN validate_password; SET PERSIST skip_ssl=ON;
②.查看MySQL容器日志
docker logs mysql
③MySQL导出数据库sql
# 导出 qa_system mysqldump -uroot -p123456 -S/home/lanzebin/mysql.sock -B qa_system > qa_system.sql # 导出 stock mysqldump -uroot -p123456 -S/home/lanzebin/mysql.sock -B stock > stock.sql
④.删除容器 + 清空数据
docker rm -f mysql rm -rf /usr/local/mysql/data/*
3.防火墙注意事项
①.防火墙端口开放
# 查看是否开机自启 systemctl is-enabled firewalld # 关闭开机自启 systemctl disable firewalld # 放行端口 firewall-cmd --add-port=8080/tcp --permanent # 重载配置 firewall-cmd --reload # 查看已放行端口 firewall-cmd --list-ports
到此这篇关于Docker部署前后端的实现步骤的文章就介绍到这了,更多相关Docker部署前后端内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
