..

13.docker-statck --- demo

通过docker-stack部署项目到docker的swarm集群,部署完成后,提交代码自动更新swarm集群上面的springboot镜像。

 

==环境=========================

准备四台docker host

* 192.168.100.100 jenkins
* 192.168.100.62(manager62) registry
* 192.168.100.63(node63)
* 192.168.100.64(node64)

 

==说明========================
上面四台都是docker host,docker私有仓库位于manager62上面
各个机器间配置好域名映射
各个机器都要在/etc/docker/daemon.json中配置私有registry的地址
jenkins构建好构件,(通过shell)推送镜像到manager62
jenkins通过ssh执行manager62上的脚本更新swarm上的springboot镜像

 

==流程==========================
maven使用dockerfile-maven-plugin插件把构件打包成docker image
jenkins 构建post steps中执行脚本推送镜像到registry

docker push manager62:7000/docker-test:1.0.0

 

 

 

 

 

到manager62上执行

mkdir -p /data/project/docker_test
cd /data/project/docker_test

 

上传配置文件和脚本到manager62

scp docker-compose.yml root@192.168.100.62:/data/project/docker_test
scp update_springboot.sh root@192.168.100.62:/data/project/docker_test

到manager62上执行第一次部署

 

cd /data/project/docker_test
docker-compose stack deploy -c docker-compose.yml docker_test

 

修改jenkins配置,添加post steps *send files or execute commands over ssh*

 

sh /data/project/docker_test/update_springboot.sh

 

 

 

 之后提交代码到git,会触发swarm上面的docker 镜像更新



dockerfile文件
FROM java:8

MAINTAINER lhnonline 0376lhn@gmail.com

COPY target/docker-test-1.0.0.jar  /app.jar

EXPOSE 8080

ENV CE=$CE
ENV JAVA_OPTS=$JAVA_OPTS

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar  /app.jar  --spring.profiles.active=$CE" ]
View Code
docker-compse.yml文件
version: '3'

services:
  redis:
    image: redis:6.0
    deploy:
      placement:
        constraints: [node.hostname == manager62]
      restart_policy:
        condition: on-failure
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - backend
    restart: always

  mysql:
    image: mysql:5.6
    deploy:
      restart_policy:
        condition: on-failure
      placement:
        constraints: [node.hostname == node63]
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - backend
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: docker_test
      MYSQL_USER: foo
      MYSQL_PASSWORD: foo

  docker_test:
    image: manager62:7000/docker-test:1.0.0
    deploy:
      placement:
        constraints: [node.hostname == node64]
      replicas: 1
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.8"
          memory: 500M
    depends_on:
      - mysql
      - redis
    ports:
      - "8080:8080"
    volumes:
      - docker_test:/logs
    networks:
      - backend
    links:
      - mysql
    restart: always
    environment:
      CE: test

volumes:
  mysql_data: {}
  docker_test: {}
  redis_data: {}
networks:
  backend:
View Code
update_springboot.sh文件
#!/bin/bash
project_name=docker_test
work_dir=/data/project/$project_name
docker_mirror_name=manager62:7000/docker-test:1.0.0

echo "`echo $(date +%F%n%T)` update docker service ..." >> $work_dir/log.txt
docker service update --image $docker_mirror_name docker_test_docker_test
View Code
manager62的/etc/hosts文件
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.62  docker-registry
192.168.100.62 manager62
192.168.100.63 node63
192.168.100.64 node64
View Code
manager62的/etc/docker/daemon.json文件
{
  "registry-mirrors": ["https://xuq3p1fy.mirror.aliyuncs.com"],
  "insecure-registries": ["manager62:7000"]
}
View Code

源代码仓库地址

 

 

posted @ 2020-09-23 15:27  罗浩楠  阅读(212)  评论(0)    收藏  举报
..