
主 题
前言
为了方便博客系统的一键部署,博客系统中的后端服务
blog-server
增加了docke compose up -d
命令一键打包镜像和部署容器。
前提条件
blog-home-nuxt
项目执行npm run build:docker
打包把输出文件.output
放到项目blog-server
中的deploy/front/output
文件夹中。blog-admin
项目修改路由的base
为/admin/xia-admin
打包生成的dist文件夹放到项目blog-server
中的deploy/front/admin/dist
文件夹中。- 准备构建
mysql
的初始化sql
放进deploy/sql/init.sql
。 - 编写
docker-compose.yml
文件,准备构建前端,nginx
,nest
服务的Dockerfile
文件。
常用命令
language
docker network create frontend-networks # 手动创建一个外部网络
docker network connect <existing_network_name> <container_name> # 将新服务的容器手动加入网络
docker-compose up -d # 构建配置的镜像
docker-compose ps # 查看启动的容器
docker exec -it mysql bash # 查看对应容器
docker-compose down -v # 停止并删除容器、网络、卷(保留镜像)
docker image prune -a # 删除所有未被容器使用的镜像,包括中间层镜像
apt update && apt install -y iputils-ping # 容器里面安装调试网络工具
docker-compose build nginx # 打包单个镜像
docker-compose rm nginx # 移除单个容器
问题坑点
- 打包
blog-server
镜像时安装依赖要使用该命令npm install --include=dev
,要加上--include=dev
不然只会安装package.json
中dependencies
的依赖。 - 部署
docker
打包生成的output
打包成镜像后容器启动,node_modules
依赖有问题;解决方法为进入容器/app/output/server
文件夹执行npm install
重新运行。或者选择docker
打包(占内存大)
相关配置文件
Home Dockerfile
MySql初始化SQL
博客系统Nginx配置文件
Server Dockerfile
docker-compose.yml
language
# compose 自动创建子网共享网络
services:
# mysql镜像
mysql:
image: mysql:8.0.42
restart: always
volumes:
- ./backups/mysql-backups:/backups
- ./backups/db-data:/var/lib/mysql
- ./deploy/sql/init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
MYSQL_ROOT_PASSWORD: jiangxia123!@#
MYSQL_ROOT_HOST: 127.0.0.1
MYSQL_DATABASE: myblog
MYSQL_USER: jiangxia
MYSQL_PASSWORD: jiangxia123!@#
ports:
# 宿主: 容器 只设置3306的话让宿主主机自动分配
- 8366:3306
networks:
- backend-networks
sever:
build:
context: .
dockerfile: ./Dockerfile
restart: always
volumes:
- ./backups/server/public:/app/public
environment:
NODE_ENV: production
ports:
- 5000:5000
depends_on: # 服务依赖于mysql
- mysql
networks:
- backend-networks
nginx:
build:
context: .
dockerfile: ./deploy/nginx/Dockerfile
# volumes:
# - ./public:/usr/share/nginx/html/public
# - ./deploy/nginx/nginx.conf:/etc/nginx/nginx.conf # 挂载配置文件
environment:
NODE_ENV: production
ports:
- 80:80
depends_on:
- sever
- home
networks:
- frontend-networks
- backend-networks
home:
build:
context: .
dockerfile: ./deploy/front/Dockerfile
environment:
NODE_ENV: production
ports:
- 3000:3000
networks:
- frontend-networks
networks:
frontend-networks:
# external: true
backend-networks:
全部评论(0)