目录
一. 简单的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集群服务
将我们写好的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进行部署,可以通通过dockerFile文件---build---run手动完成单个容器的部署运行
如果通过compose来部署的话,可以做到多个应用添加依赖关系,高效的实现管理容器
- compose是一个用来定义和运行容器的应用(docker的开源项目)
- 通过yaml文件配置应用服务
- 通过命令,docker-compose-up,创建并启动一个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
docker compose的配置文件主要用来配置容器以及容器的规则。可以理解为一共有三层
参考官方文档:https://docs.docker.com/compose/compose-file/
#①compose的版本,需要与docker的引擎兼容
version: 3.8
#②配置的服务,就相当于配置了哪些容器
service:
服务1:
#可以配置该容器的内容,例如images/build/network/ports等
服务2:
...
#③其他配置,例如可以添加一个网络、添加挂载设置等等
networks:
....
volumes:
....
命令:官方文档给出了所有命令的使用规则,下面列举常用的命令示例
container_name:指定容器的名字
depends_on:指定启动依赖关系
deploy:集群相关
environment:环境变量,例如设置mysql的密码
测试一个springboot和Redis集合使用的web应用
将springboot应用按照我们编写的dockerfile构建,将Redis按照镜像构建,并通过该配置文件编排后一起启动。
version: "3.8"
services:
web:
#寻找当前路径下的默认Dockerfile文件构建镜像
build: .
ports:
- "8090:8090"
#启动依赖Redis
depends_on:
- redis
redis:
#通过该镜像构建容器
image: "redis:alpine"
官方提供的一键安装wordpress博客案例:
https://docs.docker.com/compose/wordpress/
swarm是一个集群部署模式,分为manager主节点和work工作节点。
操作都是manager上进行。无需安装,docker引擎自带swarm。具有一致性的特性
- 至少需要保证三个manager节点,当swarm只有一个主节点时,是不会工作的
- swarm搭建成功后,会创建一个默认的网络。集群都在该网络工作。docker swarm --help查看帮助命令
swarm是集群部署,应用通过swarm进行部署后,可以方便的进行管理、负载均衡、扩容缩容等
利用swarm,可以将应用部署在一台服务器,然后通过swarm一键横向扩展
例:
部署一个PMS-web应用,部署在某台服务器上作为service,然后横向扩展分别部署在4台机器上。通过nginx负载均衡完成访问。实现服务的高可用。
提供了集群的加入、离开命令
首先在某台服务器初始化swarm,通过init命令
docker swarm init --advertise-addr 47.111.111.11
然后会返回一个带有token的join连接:并显示了当前node的信息,是作为一个manager。
生成加入命令的命令:
初始化一台manager服务器后,在另外一台服务器中作为work/manager节点,加入该swarm中(用init后的提示语、或者通过声明命令)
注:init的manger节点IP的端口,需要开放
docker swarm join --token SWMTKN-1-1fpo5ovbg8imf3vkaedqswlku3andjqf2ekps224r0hlvq8uvx-2ouvlo5e42hux9v48py56b0im 124.70.111.112:2377
通过docker node ls 查看所有的节点信息(只能在manager节点操作)
通过docker swarm leave 离开当前集群
raft一致性算法:
如果swarm中只剩了一个manager节点,则swarm不可用。所以,我们在部署swarm的时候,至少需要部署三个manager节点,才能保证高可用。假设三台中有一台宕机,那还有两台可以使用,如果两台中再有一台宕机,则整个swarm不可用。
对于docker来说,我们可以通过docker run运行一个容器、可以通过docker-compose 一键启动容器
但是这都是相对于单机服务来说的,如果针对于集群服务,就需要一台服务器一台服务器的运行命令,并且也不好管理
所以,对于集群docker容器服务的使用,swarm提供了方便的管理功能
swarm是应用集群部署的解决方案,也就意味着通过swarm部署的应用,是一个集群环境。通过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查看元数据
+
上一篇
已是最后文章
下一篇