docker分布式应用部署方案

目录

一. 简单的IDEA打包部署docker

二. docker Compose

1. 官网介绍

2. compose的安装以及测试

3. compose配置文件yml编写

4. 编写服务,测试compose

三. docker Swarm

1. 运行swarm集群

1.1 初始化init

1.2 加入节点join

1.3 查看测试以及raft一致性算法

2. swarm部署应用

2.1 创建一个swarm集群服务


一. 简单的IDEA打包部署docker

将我们写好的java项目,通过dockerfile打包部署在docker中运行

①在IDEA中编写dockerFile文件(最好下载docker的IDEA插件)

FROM java:8
#把当前路径下的jar文件,copy到指定目录中
COPY *.jar /opt/jar/app.jar
CMD ["--server.port=8090"]
EXPOSE 8090
#docker run 后指定命令: java -jar /opt/jar/app.jar
ENTRYPOINT ["java", "-jar", "/opt/jar/app.jar"]

#docker run 最终指定命令: java -jar /opt/jar/app.jar --server.port=8090

②将jar包和Dockerfile文件上传至服务器,然后通过docker build命令打包成镜像,然后直接run运行即可完成发布部署

二. docker Compose

通过docker进行部署,可以通通过dockerFile文件---build---run手动完成单个容器的部署运行

如果通过compose来部署的话,可以做到多个应用添加依赖关系,高效的实现管理容器

1. 官网介绍

  • compose是一个用来定义和运行容器的应用(docker的开源项目)
  • 通过yaml文件配置应用服务
  • 通过命令,docker-compose-up,创建并启动一个compose
  • 通过配置文件,自动启动服务,并设置依赖关系。实现容器的批量编排。一键统一部署

 

2. compose的安装以及测试

①下载compose:

官方下载(速度较慢):

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

国内镜像下载:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

②设置权限

sudo chmod +x /usr/local/bin/docker-compose

③测试

#查看版本
docker-compose version

 

 

3. compose配置文件yml编写

docker compose的配置文件主要用来配置容器以及容器的规则。可以理解为一共有三层

参考官方文档:https://docs.docker.com/compose/compose-file/

#①compose的版本,需要与docker的引擎兼容
version: 3.8 

#②配置的服务,就相当于配置了哪些容器
service:
    服务1:
        #可以配置该容器的内容,例如images/build/network/ports等
    服务2:
        ...

#③其他配置,例如可以添加一个网络、添加挂载设置等等
networks:
    ....
volumes:
    ....

命令:官方文档给出了所有命令的使用规则,下面列举常用的命令示例

  • build:构建,可以用来指定构建路径  .表示当前路径,下面表示在当前路径的dir文件中通过Dockerfile-alternate文件为进行进行构建镜像,dockerfile如果不写,默认就是找路径下Dockerfile文件

  • network:指定使用的网络

  • command:编写命令

  • container_name:指定容器的名字

  • depends_on:指定启动依赖关系

  • deploy:集群相关

  • environment:环境变量,例如设置mysql的密码

4. 编写服务,测试compose

测试一个springboot和Redis集合使用的web应用

  • 创建一个新的springboot项目,设置Redis配置,创建一个controller测试接口:

  • 将该springboot项目打包,并编写Dockerfile文件:

  • 将jar包和dockerfile上传至服务器,编写docker-compose.yml文件,

将springboot应用按照我们编写的dockerfile构建,将Redis按照镜像构建,并通过该配置文件编排后一起启动。

version: "3.8"
services:
  web:
    #寻找当前路径下的默认Dockerfile文件构建镜像
    build: .
    ports:
      - "8090:8090"
    #启动依赖Redis
    depends_on:
      - redis
  redis:
    #通过该镜像构建容器
    image: "redis:alpine"
  • 启动: docker-compse up 访问8090端口进行测试完成。redis 也可以成功连接
  • docker-compose down可以停掉compose服务

官方提供的一键安装wordpress博客案例:

https://docs.docker.com/compose/wordpress/

三. docker Swarm

swarm是一个集群部署模式,分为manager主节点和work工作节点。

操作都是manager上进行。无需安装,docker引擎自带swarm。具有一致性的特性

  • 至少需要保证三个manager节点,当swarm只有一个主节点时,是不会工作的
  • swarm搭建成功后,会创建一个默认的网络。集群都在该网络工作。docker swarm --help查看帮助命令

swarm是集群部署,应用通过swarm进行部署后,可以方便的进行管理、负载均衡、扩容缩容等

利用swarm,可以将应用部署在一台服务器,然后通过swarm一键横向扩展

例:

部署一个PMS-web应用,部署在某台服务器上作为service,然后横向扩展分别部署在4台机器上。通过nginx负载均衡完成访问。实现服务的高可用。

 提供了集群的加入、离开命令

1. 运行swarm集群

1.1 初始化init

首先在某台服务器初始化swarm,通过init命令

docker swarm init --advertise-addr 47.111.111.11

然后会返回一个带有token的join连接:并显示了当前node的信息,是作为一个manager。

1.2 加入节点join

生成加入命令的命令:

  • docker swarm join-token worker  : 加入一个worker节点
  • docker swarm join-token manager  : 加入一个manager节点

初始化一台manager服务器后,在另外一台服务器中作为work/manager节点,加入该swarm中(用init后的提示语、或者通过声明命令)

:init的manger节点IP的端口,需要开放

docker swarm join --token SWMTKN-1-1fpo5ovbg8imf3vkaedqswlku3andjqf2ekps224r0hlvq8uvx-2ouvlo5e42hux9v48py56b0im 124.70.111.112:2377

1.3 查看测试以及raft一致性算法

通过docker node ls  查看所有的节点信息(只能在manager节点操作)

通过docker swarm leave 离开当前集群

raft一致性算法:

如果swarm中只剩了一个manager节点,则swarm不可用。所以,我们在部署swarm的时候,至少需要部署三个manager节点,才能保证高可用。假设三台中有一台宕机,那还有两台可以使用,如果两台中再有一台宕机,则整个swarm不可用。

2. swarm部署应用

对于docker来说,我们可以通过docker run运行一个容器、可以通过docker-compose 一键启动容器

但是这都是相对于单机服务来说的,如果针对于集群服务,就需要一台服务器一台服务器的运行命令,并且也不好管理

所以,对于集群docker容器服务的使用,swarm提供了方便的管理功能

swarm是应用集群部署的解决方案,也就意味着通过swarm部署的应用,是一个集群环境。通过swarm部署应用可以实现:

  • 搭建应用的集群环境
  • 动态的扩缩容服务
  • 实现灰色(金丝雀)更新(不停机更新)
  • ......

2.1 创建一个swarm集群服务

docker service --help 查看帮助文档

首先在某台服务器上初始化swarm :  docker swarm init

docker service create -p 8090:80 --name my_service nginx   #通过swarm创建一个nginx的docker服务(二主二从的docker swarm)

创建完成后,会在这四台docker服务器中随机一台上,运行一个nginx的docker容器,可通过docker ps查看

扩容:update、scale

“docker swarm集群中的service启动后,在该集群中的任意节点ip都可以访问该服务(会自动进行负载均衡,随机访问任意一个容器),前提是docker swarm的服务端口(2377)、应用端口(8090自定义)、通讯端口(7946)、网络端口(4789)都开启”

此时nginx只在一台服务器上运行吗,如果需要扩容,直接运行update指令即可:

eg:创建10个nginx服务(随机分配在不同的服务器上):

docker service update --replicas 10 my-nginx   或者

docker service scale my-nginx=10

eg:缩容为2个:

docker service update --replicas 2 my-nginx  或者

docker service scale my-nginx=2

通过docker service ls 查看所有的服务

service的操作:

可以通过rm移除、rollback回滚、logs查看日志、inspect查看元数据

 

 

 

+

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值