看了《微服务那些事》以后,Spring boot和Spring Cloud的关系理清楚了,Spring cloud各个模块的做用也了解了。html
可是,Spring cloud 与Docker的关系,Spring boot 与 Docker的关系,Spring cloud 的详细使用,仍是不了解。java
《springcloud与docker微服务架构实战》这本书,一共270页,虽然介绍的不会太深刻,不过,对于入门来讲是很好的书,毕竟太厚的书不适合入门用。mysql
这本书一共14章nginx
第一章、微服务架构概述web
第二章、Spring cloud 简介spring
第三章、开始使用Spring cloudsql
第四章、微服务注册与发现 Eurekadocker
第五章、Ribbon实现客户端负载均衡springboot
第六章、Feign实现REST调用bash
第七章、Hystrix实现容错处理
第八章、使用Zuul构建微服务网关
第九章、使用Spring Cloud Config 统一管理微服务的配置
第十章、Sleuth 实现微服务跟踪
第11章、常见问题与总结
第12章、Docker
第13章、将微服务运行在Docker上
第14章、用Docker Compose编排微服务
第一章到第11章已经大致了解了,所以略看。
重点看十二、1三、14章,弄明白springboot、SpringCloud、Docker、Docker Compose之间的关系
第12章、Docker简介
Client、Images、Container、Registry、Docker Hub
介绍了Docker的基本命令,因为我已经学了docker基础,因此这部分就再也不记录。
第13章、将微服务运行在Docker上
构建一个Dockerfile文件。
执行docker build命令,示例以下:
docker build -t nginx:my.
Dockerfile的经常使用指令
ADD
ARG
ENV
CMD
EXPOSE
FROM
LABEL
MAINTAINER
RUN
USER
VOLUME
WORKDIR
使用方式
使用gradle打包项目
项目根目录下创建文件Dockerfile,内容以下:
FROM java:8 VOLUME /tmp ADD build/libs/discovery-0.0.1-SNAPSHOT.jar /app.jar #修改文件的时间属性为当前系统时间 RUN bash -c 'touch /app.jar' EXPOSE 8761 ENTRYPOINT java -jar /app.jar
docker build -t lakeslove/springcloud-blog-discovery:0.01 .
docker run -it -d -p 8761:8761 lakeslove/springcloud-blog-discovery:0.01
访问 locahost:8761
推送到dockerhub
docker login
docker push lakeslove/springcloud-blog-discovery:0.01
插件的使用:docker-maven-plugin、gradle-docker-plugin等,插件挺多的,不过咱们项目里没用这类插件,直接在jenkins脚本里写的,这块暂时不研究。
第14章、使用DockerCompose 编排微服务
Compose是一个用于定义和运行多容器Docker应用程序的工具,很是适合在开发、测试、构建CI工做流等场景。
使用Compose大体有3步:
使用Dockerfile定义应用程序环境,以便在任何地方重现该环境
在docker-compose.yml文件中定义组成应用程序的服务,以便各个服务在一个隔离的环境中一块儿运行。
运行doker-compose up命令,启动并运行整个应用程序
docker-compose.yml经常使用命令
经过 .env 文件来为 docker-compose.yml 文件引用的全部环境变量设置默认值,详细参考 http://www.javashuo.com/article/p-mmgkvxvh-x.html
示例以下:
version: "3.3" services: eureka: build: . ports: - "8761:8761"
volumes:
- /opt/data:/var/lib/mysql
build 构建,后面跟Dockerfile路径
ports 功能相似于 docker run -p
volumes 卷挂载路径设置,一般做为路径映射(host:container)
volumes_from 从另外一个服务或容器挂载卷,可指定只读ro,读写rw,默认是读写rw
docker-compose经常使用命令
build 构建或从新构建服务。
kill 中止指定服务的容器,例如:docker-compose kill eureka
logs 查看服务的日志输出
port 打印绑定的公共端口,例如:docker-compose port eureka 8761,这样就能够输出eureka服务8761端口绑定的公共端口
ps 列出全部容器,例如:docker-compose ps
pull 下载服务镜像
rm 删除指定服务的容器,例如:docker-compose rm eureka
run 在一个服务上执行一个命令,例如:docker-compose run web bash
scale 设置指定服务运行容器的个数,以 service=num的形式指定,实例:docker-compose scale user=3 movie=3
start 启动指定服务已存在的容器,例如:docker-compose start eureka
stop 中止已运行的容器,例如:docker-compose stop eureka
up 构建、建立、从新建立、启动、链接服务的相关容器,全部链接的服务都会启动,除非它们已经运行。
docker-compose up 命令会聚合全部容器的输出,当命令退出时,全部容器都会中止,后台运行 docker-compose up -d
docker-compse的网络设置
默认状况下,Compose 会为应用建立一个网络,服务的每一个容器都会加入该网络中,这样,容器就能够被该网络中的其余容器访问,不只如此,该容器还能已服务名做为hostname被其余容器访问。
默认状况下,应用程序的网络名称基于Compose的工程名称,而工程名称基于docker-compose.yml所在目录的名称,
如需修改工程名称,可以使用--project-name标识或COMPOSE_PROJECT_NAME环境变量
默认的是bridge网络架构
Docker Compose,Docker Swarm,Kubernetes之间的区别:
Docker Compose是一个基于Docker的单主机容器编排工具,不能去启动其余主机上的Docker容器
Docker Swarm和Kubernetes是基于Dcoker的跨主机的容器管理平台,
Docker Swarm则是由Docker 公司研发的,在与Kubernetes竞争中已经失势,没必要学习了。
因此,简单了解一下Docker Compose,深刻研究Kubernetes。