目录

一. 简单的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"#启动依赖Redisdepends_on:- redisredis:#通过该镜像构建容器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查看元数据

+

docker分布式应用部署方案相关推荐

  1. 1离线 TiDB Ansible 部署方案-详解

    一: 环境要求 Linux 操作系统版本要求 Linux 操作系统平台 版本 Red Hat Enterprise Linux 7.3 及以上 CentOS 7.3 及以上 Oracle Enterp ...

  2. Docker+K8S 集群环境搭建及分布式应用部署

    互联网正在飞速发展,早已由最初的单体架构演变为如今的分布式架构,而分布式架构也为系统运维带来了挑战.架构在发展,系统运维技术也在不断升级.而伴随着系统运维的是如今炒的火热的容器技术,Docker 就是 ...

  3. Docker持续部署图文详解

    2019独角兽企业重金招聘Python工程师标准>>> Docker持续部署图文详解 博客分类: docker 架构 JAVA项目如何通过Docker实现持续部署(只需简单四步),即 ...

  4. 部署node_如何使用 docker 高效部署 Node 应用

    作者:山月行 转发链接:https://mp.weixin.qq.com/s/-wnkIeBjsLCQNfx0FJdD3A 前言 ❝ 如何在生产环境部署一个 Node 应用?[1] ❞ 一个合理并且高 ...

  5. 不建议在Docker中部署数据库

    近 2 年 Docker 非常的火热,各位开发者恨不得把所有的应用.软件都部署在 Docker 容器中,但是您确定也要把数据库也部署的容器中吗? 这个问题不是子虚乌有,因为在网上能够找到很多各种操作手 ...

  6. 聊聊 Docker Swarm 部署 gRPC 服务的坑

    gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,也是目前流行的微服务架构中比较突出的跨语言 RPC 框架. 一直以来,我们的微服务都是基于 gRPC 来开发,使用的 ...

  7. IDEA配置Docker一键部署SpringBoot项目(企业级做法)

    Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...

  8. oracle容器部署,Linux docker oracle 部署

    此刻,oracle的数据正在一条条地插入数据库.虽然命令行的表名还是乱码,但是oracle 客户端已经能查出数据了.反观这次 Linux docker  oracle之旅.充满了艰辛,我像一个盲人一样 ...

  9. 基于华为云的一个典型的持续部署方案

    云社区 博客 博客详情 基于华为云的一个典型的持续部署方案 [摘要] 华为云迄今为止已经有14大类超过100种服务了,可以做很多有用和好玩的方案. 基于华为云的一个典型的持续部署方案:Function ...

最新文章

  1. C#+AE 调整TOCControl控件中图层的显示顺序
  2. 踩到一个Emit的坑,留个纪念
  3. 数据结构特性解析 (二) ArrayList
  4. shell调用各种sqlplus用法
  5. 手把手教你用CAB发布OCX的简单办法
  6. 清华大学梁宸计算机系,2015年广东高考高等学校自主招生录取考生名单公示(2)...
  7. JAVA中的onkey_onKeyListener无法在虚拟键盘上工作
  8. 带音乐动态手机壁纸小程序源码-带自动采集-更新功能
  9. 无传感FOC控制中的转子位置和速度确定方法一
  10. 转载:VirtualizingStackPanel
  11. 高等数学问题的符号解
  12. Threejs实现天空盒,全景场景,地面草地
  13. 差分进化算法_差分进化算法入门及实例应用
  14. ps把图片无损放大的方法
  15. Android 获取手机存储空间
  16. shell脚本编程之awk入门
  17. 【XSY2515】管道(pipe)(最小生成树+倍增lca)
  18. 微信 图片二维码识别不了的问题
  19. 通州新城规划图 - 新通网http://www.xintongwang.com
  20. 生活实用之清洗小龙虾

热门文章

  1. Educoder/头歌JAVA——JavaWeb:JSP入门
  2. WOF鲸鱼优化算法学习总结
  3. 洗碗机品牌十大排行榜,火星人洗碗机怎么样?对比过后我选“它”
  4. react--(查询、重置)按钮封装
  5. Python frozenset() 函数的使用与作用
  6. Filezilla搭建FTP服务器及Linux连接
  7. 【踩坑】mirai挂机运行经常自动退出怎么办?
  8. 左移寄存器vhdl_双向移位寄存器VHDL设计.doc
  9. 解决Django: [TypeError: __init__() missing 1 required positional argument: 'on_delete']
  10. Potplayer提升画质攻略