近期部署工作比较多,对docker和docker-compose都有了更深入的了解,已经可以熟练使用了。这里记录一下自己写的相关脚本,加深印象。
前端
# docker build 当前目录 tag为bd-ui 使用配置文件Dockerfile.prod
docker build . -t bd-ui -f Dockerfile.prod
Dockerfile.prod
由于公司内部npm仓库不稳定,为了提升效率,在这里是先本地执行build再docker build,直接把编译后的dist放入容器。实际上也可以选择先在一个容器内build,再复制。这种方式可以参考下边的后端Dockerfile.prod
# 注意:!!!
# 注意:!!!
# 注意:!!!
# 这里为了提升打包速度
# 直接在本地打包(yarn && yarn build)
# 然后执行docker build,把dist目录拷进去
# 使用nginx镜像
FROM nginx:1.17.6
# 设定工作目录
WORKDIR /usr/src/app/
# 把项目中的nginx.prod.conf 复制到容器内的配置目录
COPY ./nginx.prod.conf /etc/nginx/nginx.conf
# 把项目打包后的dist目录下的结果,复制到nginx的html目录
COPY ./dist /usr/share/nginx/html/
后端
# docker build 当前目录 tag为bd-ui 使用配置文件Dockerfile.prod
docker build . -t bd-api -f Dockerfile.prod
Dockerfile.prod
# 使用node镜像,命名为boss-api-build-images,下边使用
FROM node:12.19.0 as boss-api-build-images
# 指定容器内工作目录
WORKDIR /opt/node_app
# 将Dockerfile.prod所在目录(即项目目录)下的所有文件拷贝到工作目录
COPY . .
# 安装依赖 && 混淆
RUN yarn --ignore-optional && yarn uglify
# 生成最终镜像
FROM node:12.19.0
# 指定工作目录
WORKDIR /opt/node_app
# 复制上边的boss-api-build-images中混淆的结果到当前镜像
# 这样镜像中就没有源码了,并且被混淆之后也不可读了,更安全
COPY --from=boss-api-build-images /opt/node_app .
# 前端打包结果是直接放在nginx上即可,后端还需要跑起来
# 比如先跑migrations插入默认数据,然后指定环境变量并yarn start
CMD MIGRATION_ENV=prod yarn migrations up && EGG_SERVER_ENV=prod NODE_ENV=prod yarn start
常用命令总结
# 设置服务器开机自启动docker
systemctl enable docker
# 启动docker
systemctl start docker
# 打包镜像
docker build . -t bd-api -f Dockerfile.prod
# 导出镜像tar包
docker save bd-api > bd-api.tar
# scp传输到服务器
scp -P 8008 $PWD/bd-api.tar root@1.1.1.1:/root/dockerImages/
# 导入镜像tar包
docker load < ./bd-api.tar
# 压缩再传输比较快
# 解压:
unzip bd-api.tar.zip
压缩:
zip bd-api.tar.zip ./bd-api.tar
# 网络不稳定怎么办?
# 可以用rsync的方式上传,支持断点续传
rsync -avPz bd-api.tar root@1.1.1.1:/root/