赞
踩
选择自带Docker的云服务器
将所有容器加入自定义网络,这样可以互相通过容器名访问
- # 创建自定义网络,sys-net为自定义名称
- docker network create sys-net
- # -d表示后台运行 -e表示环境,设置mysql密码 -v表示数据卷挂载 --network 加入自定义网络
- docker run -d --name mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/init:/docker-entrypoint-initdb.d --network sys-net mysql
- # 最后的mysql为Docker镜像名,不写版本号默认为mysql:latest最新版本
- # -d表示后台运行 -e表示环境,设置redis密码 -v表示数据卷挂载 --network 加入自定义网络
- docker run -d --name redis -p 6379:6379 -e TZ=Asia/Shanghai -e REDIS_PASSWORD=123 -v /usr/local/redis/config:/usr/local/etc/redis/redis.conf -v /usr/local/redis/data:/data --network sys-net redis
- # 最后的redis为Docker镜像名,不写版本号默认为redis:latest最新版本
因为我们将所有容器都加入了自定义网络,所以在Docker中,不需要指定真正的地址,只需要修改为容器名称即可。
将mysql的host改为mysql,redis的host改为redis
- druid:
- # 主库数据源
- master:
- url: jdbc:mysql://mysql:3306/
- redis:
- host: redis
- port: 6379
点击右边的Maven,点击Lifecycle下的package打包成jar包
打包完会在项目下的target目录生成jar包
如果项目是有多个模块的,那么在每个模块的target目录都会生成一个jar包,我们只需要找有Application启动类的那一个模块下的jar包即可
建一个Dockerfile文件,写如下内容
- FROM openjdk:11.0-jre-buster
- ENV TZ=Asia/Shanghai
- RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
- COPY slacking-cat-sys.jar /app.jar
- ENTRYPOINT ["java", "-jar", "/app.jar"]
slacking-cat-sys.jar为打包好的jar包名字
将打包好的jar包和Dockerfile文件上传到云服务器,选择同一个目录下,例如放在/usr/local下,然后cd /usr/local
- # 构建镜像,-t表示给构建的镜像取名,.表示在当前目录下构建
- docker build -t slacking-cat-sys .
可以查看是否完成镜像构建
- # -d表示后台运行 -p 后端端口号 --network 加入自定义网络
- docker run -d --name slacking-cat-sys -p 8080:8080 --network sys-net slacking-cat-sys
- # 最后的slacking-cat-sys为Docker镜像名
查找到localhost替换为后端项目的容器名
- server: {
- port: 80,
- host: true,
- open: true,
- proxy: {
- // https://cn.vitejs.dev/config/#server-proxy
- '/dev-api': {
- target: 'http://slacking-cat-sys:8080',
- changeOrigin: true,
- rewrite: (p) => p.replace(/^\/dev-api/, '')
- }
- },
运行npm run build:prod命令进行打包,在项目下会生成dist文件。
- #keepalive_timeout 0;
- # 设置nginx连接超时
- keepalive_timeout 300;
- proxy_connect_timeout 300; #单位秒 默认60
- proxy_send_timeout 300; #单位秒 默认60
- proxy_read_timeout 300; #单位秒 默认60
-
- server {
- listen 8081; # 前端指定的端口
- server_name nginx;
- location / {
- # 容器中的挂载路径,dist文件为前端打包的静态页面
- root /usr/share/nginx/html/dist;
- index index.html index.htm;
- try_files $uri $uri/ /index.html; # 处理前端路由刷新问题
- }
- location /prod-api { # 这里的 /prod_api/ 是你想要代理的后端api路径开头
- rewrite /prod-api/(.*) /$1 break;
- proxy_pass http://slacking-cat-sys:8080; # 这里的host改为后端项目的容器名
- }

在云服务器中创建一个nginx目录,例如在/usr/local/nginx,将nginx.conf配置文件上传到此处,再创建/usr/local/nginx/html文件,将前端打包好的dist文件上传到此处
文件目录结构如下:
- # -d表示后台运行 -p表示前端设置的端口 -v表示数据卷挂载 --network 加入自定义网络
- docker run -d --name nginx -p 8081:8081 -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/html:/usr/share/nginx/html --network sys-net nginx
- # 最后的nginx为Docker镜像名,不写版本号默认为nginx:latest最新版本
DockerCompose相当于可以把一个一个分开部署的容器集合起来一起部署。
通过一个docker-compose.yml模板文件来定义一组相关联的应用容器,帮助我们实现多个互关联的Docker容器的快速部署。docker-compose.yml文件相当于我们写的docker run命令:
- version: "3.8"
- services:
-
- redis:
- image: redis
- container_name: redis
- ports:
- - "6379:6379"
- environment:
- TZ: Asia/Shanghai
- REDIS_PASSWORD: 123
- volumes:
- - "/usr/local/redis/config:/usr/local/etc/redis/redis.conf"
- - "/usr/local/redis/data:/data"
- networks:
- - sys-net
-
- mysql:
- image: mysql:8.0
- container_name: mysql
- ports:
- - "3306:3306"
- environment:
- TZ: Asia/Shanghai
- MYSQL_ROOT_PASSWORD: 123
- command: --default-authentication-plugin=mysql_native_password
- volumes:
- - "/usr/local/mysql/conf:/etc/mysql/conf.d"
- - "/usr/local/mysql/data:/var/lib/mysql"
- - "/usr/local/mysql/init:/docker-entrypoint-initdb.d"
- networks:
- - sys-net
-
- nginx:
- image: nginx
- container_name: nginx
- ports:
- - "8081:8081"
- volumes:
- - "/usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf"
- - "/usr/local/nginx/html:/usr/share/nginx/html"
- depends_on:
- - slacking-cat-sys
- networks:
- - sys-net
-
- slacking-cat-sys:
- build:
- context: .
- dockerfile: Dockerfile
- container_name: slacking-cat-sys
- ports:
- - "8080:8080"
- networks:
- - sys-net
- depends_on:
- - redis
- - mysql
-
- networks:
- sys-net:
- name: sys-net

①nginx.conf配置好,前端打包的dist文件放到html目录下。(参考六打包前端、七部署nginx)
②后端打包成jar包
③Dockerfile配置好(参考五.3.创建Dockerfile)
将jar包、Dockerfile、docker-compose.yml上传到云服务器的同一目录下,例如/usr/local
进入/usr/local目录
- # up表示创建并启动所有容器 -d 后台运行,其他可选参数 -p 取项目名 -f 指定路径,此处为当前目录下,所以直接省略
- docker compose up -d
- # docker拉取镜像,不写版本号默认拉取最新版本
- docker pull mysql:8.0
- # 查看docker镜像
- docker images
- # 强制删除docker镜像
- docker rmi -f 镜像ID
- # 创建并运行容器
- # -d表示后台运行,--name表示取名,-p映射端口号,-v数据卷挂载 最后写上镜像名称需要加上版本号
- docker run -d --name mysql -p 3306:3306 -v /usr/mysql/logs:/logs mysql:8.0
- # 查看所有docker容器
- docker ps
- # 强制删除docker容器
- docker rm -f 容器ID
- # 删除所有容器
- docker rm $(docker ps -q)
- # 进入docker容器内部
- docker exec -it mysql bash
- # 创建容器网络
- docker network create
- # 查看所有network网络
- docker network ls
- # 删除网络
- docker network rm 网络名称
- # 构建镜像,.表示在当前目录构建
- docker build -t 取名 .
- # 创建并启动所有service容器
- docker compose up
- # 重新启动所有service容器
- docker compose restart
- # 关闭并删除所有service容器
- docker compose down
- # 查看所有service容器
- docker compose ps

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。