docker-compose部署

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

操作系统文档
Ubuntuhttps://docs.docker.com/install/linux/docker-ce/ubuntu
Debianhttps://docs.docker.com/install/linux/docker-ce/debian
CentOShttps://docs.docker.com/install/linux/docker-ce/centos
Fedorahttps://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.更新/重启

  1. 然后执行步骤4.3,进行手动打包
  2. 重启服务容器
    停止服务容器
  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.扩展

  1. 停止容器,id代表容器id,去掉id即代表停止所有容器
  docker-compose stop [id]
  1. 删除所有容器(会删除docker内所有服务,以及mysql、redis等数据)。场景:适用于想重新初始化,重新创建容器
  docker-compose down
  1. 启动某个服务
  docker-compose restart [id]
  1. 单发某个微服务,可把本地编译好的jar包放到device-manage对应的target下面,后执行构建镜像和启动镜像操作即可

  2. 修改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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指尖精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值