docker-compose部署
1.docker安装
切换账号(输入密码)
sudo -i
安装 Docker
mkdir /home/anosi/software && cd /home/anosi/software
curl -fsSL https://get.docker.com -o get-docker.sh
给其他人执行权限
chmod o+x get-docker.sh
执行脚本
sh get-docker.sh
启动 Docker 后台服务,并设值开机启动
systemctl enable docker
service docker start
1.1 Windows 和 Mac 的用户可以下载 Docker Desktop 来完成 Docker 安装。
下载地址: https://www.docker.com/products/docker-desktop
点击下图的按钮,按照官网步骤,完成下载安装。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ml5vvkfr-1619420003938)(…/…/image/get-docker-desktop.png)]
1.2 对于 Linux 用户,请参照以下表格的链接来安装 Docker
操作系统 | 文档 |
---|---|
Ubuntu | https://docs.docker.com/install/linux/docker-ce/ubuntu |
Debian | https://docs.docker.com/install/linux/docker-ce/debian |
CentOS | https://docs.docker.com/install/linux/docker-ce/centos |
Fedora | https://docs.docker.com/install/linux/docker-ce/fedora |
其他 Linux 发行版 | https://docs.docker.com/install/linux/docker-ce/binaries |
1.3 Docker 常用命令
参考:
https://blog.csdn.net/u013378306/article/details/86668313
2.docker-compose安装
docker-compose是一个集群管理方式,可以利用名为docker-compose.yml的yaml文件来定义需要启动的容器,可以是单个,也可以(通常)是多个的。
sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权可执行权限
sudo chmod +x /usr/local/bin/docker-compose
创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
安装好 docker-compose 后,请运行 docker-compose -v 来测试是否安装正常。正常的应该是显示如下内容。
docker-compose version 1.24.1, build 4667896b
3.安装环境依赖git、maven、java、npm
yum -y install git maven java npm
4.打包部署
4.1 在/home/拉取git项目(需要输入gitlab账号密码)
cd /home
git clone http://10.1.1.160/device/back/device-manage.git
4.2 方式一:一键打包部署
vi device-manage-start.sh
把下面编辑到sh脚本里
# 定义工作目录
WORK=$(pwd)
# 后端打包
cd $WORK/device-manage && mvn clean install
# 服务端打包
cd $WORK/device-manage-server && npm install && npm run build && cp -r dist ../device-manage/gsk-nginx/html/server
# 客户端打包
cd $WORK/device-manage-client && npm install && npm run build && cp -r dist ../device-manage/gsk-nginx/html/client
# 启动服务
cd $WORK/device-manage && docker-compose build && docker-compose up -d && docker-compose logs -f
执行脚本
sh device-manage-start.sh
4.3 方式二:手动打包部署:
- 4.4.1 后端项目打包
cd /home/anosi/device-manage
mvn clean install -Dmaven.test.skip=true
- 4.4.2 客户端打包
npm config -g set unsafe-perm
cd /home/anosi/device-manage-client
npm install
npm run build
cp -r dist ../device-manage/gsk-nginx/html/server
- 4.4.3 docker-compose创建服务镜像、部署
构建镜像、启动服务、依次执行以下命令:
cd /home/anosi/device-manage
docker-compose build
docker-compose up -d
5.更新/重启
- 然后执行步骤4.3,进行手动打包
- 重启服务容器
停止服务容器
cd /home/device-manage
docker-compose stop
构建镜像
docker-compose build
构建容器启动服务
docker-compose up -d && docker-compose logs -f
6.issue
- 若npm install报错(含有node-sass字样),执行npm uninstall node-sass,再执行npm install
8.扩展
- 停止容器,id代表容器id,去掉id即代表停止所有容器
docker-compose stop [id]
- 删除所有容器(会删除docker内所有服务,以及mysql、redis等数据)。场景:适用于想重新初始化,重新创建容器
docker-compose down
- 启动某个服务
docker-compose restart [id]
-
单发某个微服务,可把本地编译好的jar包放到device-manage对应的target下面,后执行构建镜像和启动镜像操作即可
-
修改Nacos配置,需要重启对应的服务才能生效
9.docker-compose.yml
version: '3'
services:
device-manage-mysql:
build:
context: ./db
environment:
MYSQL_ROOT_PASSWORD: anosi.cn
restart: always
container_name: device-manage-mysql
image: device-manage-mysql
hostname: gsk-mysql
ports:
- 3306:3306
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_general_ci'
]
volumes:
#mysql数据库挂载到host物理机目录
- "./mysql/data/db:/var/lib/mysql"
#容器的配置目录挂载到host物理机目录
- "./mysql/data/conf:/etc/mysql/conf.d"
# docker安全验证
security_opt:
- seccomp:unconfined
device-manage-redis:
image: redis:6.0
ports:
- 6379:6379
restart: always
container_name: device-manage-redis
hostname: gsk-redis
volumes:
- "./redis/data/db:/data/db" # make data persistent 持久化
- "./redis/logs:/logs"
command: redis-server --requirepass anosi.cn
device-manage-mongodb:
restart: always
container_name: device-manage-mongodb
image: mongo
hostname: gsk-mongodb
ports:
- '27017-27019:27017-27019'
volumes:
- "./mongo/data/db:/data/db" # make data persistent 持久化
- "./mongo/logs:/logs"
device-manage-register:
build:
context: ./gsk-register
restart: always
ports:
- 18848:18848
container_name: device-manage-register
hostname: gsk-register
image: device-manage-register
volumes:
- "./gsk-register/logs:/logs"
device-manage-gateway:
build:
context: ./gsk-gateway
restart: always
ports:
- 19999:19999
container_name: device-manage-gateway
hostname: gsk-gateway
image: device-manage-gateway
volumes:
- "./gsk-gateway/logs:/logs"
device-manage-auth:
build:
context: ./gsk-auth
restart: always
container_name: device-manage-auth
hostname: gsk-auth
image: device-manage-auth
volumes:
- "./gsk-auth/logs:/logs"
device-manage-upms:
build:
context: ./gsk-upms/gsk-upms-biz
restart: always
container_name: device-manage-upms
hostname: gsk-upms
image: device-manage-upms
volumes:
- "./gsk-upms/logs:/logs"
device-manage-device:
build:
context: ./gsk-device/gsk-device-biz
restart: always
container_name: device-manage-device
hostname: gsk-device
image: device-manage-device
extra_hosts:
gsk-host: 10.0.1.175
gsk-rabbitmq: 10.1.1.123
volumes:
- "./gsk-device/logs:/logs"
device-manage-maintain:
build:
context: ./gsk-maintain/gsk-maintain-biz
restart: always
container_name: device-manage-maintain
hostname: gsk-maintain
image: device-manage-maintain
volumes:
- "./gsk-maintain/logs:/logs"
device-manage-report:
build:
context: ./gsk-report/gsk-report-biz
restart: always
container_name: device-manage-report
hostname: gsk-report
image: device-manage-report
volumes:
- "./gsk-report/logs:/logs"
device-manage-energy:
build:
context: ./gsk-energy/gsk-energy-biz
restart: always
container_name: device-manage-energy
hostname: gsk-energy
image: device-manage-energy
extra_hosts:
gsk-rabbitmq: 10.1.1.123
volumes:
- "./gsk-energy/logs:/logs"
device-manage-monitor:
build:
context: ./gsk-visual/gsk-monitor
restart: always
ports:
- 15001:15001
container_name: device-manage-monitor
hostname: gsk-monitor
image: device-manage-monitor
volumes:
- "./gsk-monitor/logs:/logs"
device-manage-alarm:
build:
context: ./gsk-alarm/gsk-alarm-biz
restart: always
ports:
- 17008:17008
container_name: device-manage-alarm
hostname: gsk-alarm
image: device-manage-alarm
extra_hosts:
gsk-host: 10.0.1.175
gsk-rabbitmq: 10.1.1.123
volumes:
- "./gsk-alarm/logs:/logs"
#客户端
device-manage-front:
build:
context: ./gsk-nginx
restart: always
container_name: device-manage-front
image: device-manage-front
external_links:
- gsk-gateway
ports:
- 10082:10082
- 10081:10081
10.Dockerfile文件模板
放在服务根目录下
FROM moxm/java:1.8-full as builder
WORKDIR /build
ARG JAR_FILE=target/device-manage-device-biz.jar
COPY ${JAR_FILE} app.jar
RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar
FROM moxm/java:1.8-full
LABEL maintainer="pig4cloud@qq.com"
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx512m -Djava.security.egd=file:/dev/./urandom"
WORKDIR device-manage-upms
COPY --from=builder /build/dependencies/ ./
COPY --from=builder /build/snapshot-dependencies/ ./
COPY --from=builder /build/spring-boot-loader/ ./
COPY --from=builder /build/application/ ./
EXPOSE 17001
CMD sleep 60; java $JAVA_OPTS org.springframework.boot.loader.JarLauncher
11.参考资料
12.运行环境
- 操作系统:CentOS Linux(Red Hat 4.8.5-44)
- CPU:Intel® Xeon® CPU L5630 @2.13GHz
- 内存:4GB
- 硬盘:32GB