一、docker简介

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。 
Docker通常用于如下场景:

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker 的优点

  • 1、简化程序: 
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

  • 2、避免选择恐惧症: 
    如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

  • 3、节省开支: 
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

二、准备工作

环境条件:

  • linux系统,不建议windows
  • docker最新版本
  • jdk 1.8
  • maven3.0

本文采用的工程来自第一篇文章的工程,采用maven的方式去构建项目,并采用docker-maven-plugin去构建docker镜像。

三、改造工程、构建镜像

改造eureka-server工程

在pom文件加上插件:

<build><plugins><plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- tag::plugin[] --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- end::plugin[] --> </plugins> </build>

Spotify 的 docker-maven-plugin 插件是用maven插件方式构建docker镜像的。

  • imageName指定了镜像的名字,本例为 forep/eureka-server
  • dockerDirectory指定 Dockerfile 的位置
  • resources是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。

修改下配置文件:

server:port: 8761
eureka:instance:prefer-ip-address: trueclient:registerWithEureka: false fetchRegistry: false 

编写dockerfile文件:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar #RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE 8761 

docker file编写指令:

  • FROM
    FROM <image>FROM <image>:<tag> FROM <image> <digest> 

FROM指令必须指定且需要在Dockerfile其他指令的前面,指定的基础image可以是官方远程仓库中的,也可以位于本地仓库。后续的指令都依赖于该指令指定的image。当在同一个Dockerfile中建立多个镜像时,可以使用多个FROM指令。

  • VOLUME

格式为:

     VOLUME ["/data"]

使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。

  • ADD

从src目录复制文件到容器的dest。其中src可以是Dockerfile所在目录的相对路径,也可以是一个URL,还可以是一个压缩包

  • ENTRYPOINT

指定Docker容器启动时执行的命令,可以多次设置,但是只有最后一个有效。

  • EXPOSE

为Docker容器设置对外的端口号。在启动时,可以使用-p选项或者-P选项。

构建镜像

执行构建docker镜像maven命令:

mvn clean
mvn package docker:build

构建eureka-server镜像成功。

同理构建service-hi镜像

  • pom文件导入同eurek-server
  • 修改下配置文件:
eureka:client:serviceUrl:defaultZone: http://eureka-server:8761/eureka/ # 这个需要改为eureka-server
server:port: 8763 spring: application: name: service-hi 

在这里说下:defaultZone发现服务的host改为镜像名。

  • dockefile 编写同eureka-server

  • 构建镜像:

mvn clean
mvn package docker:build

这时我们运行docke的eureka-server 和service-hi镜像:

docker run -p 8761: 8761 -t forezp/eureka-server docker run -p 8763: 8763 -t forezp/service-hi 

访问localhost:8761

四、采用docker-compose启动镜像

Compose 是一个用于定义和运行多容器的Docker应用的工具。使用Compose,你可以在一个配置文件(yaml格式)中配置你应用的服务,然后使用一个命令,即可创建并启动配置中引用的所有服务。下面我们进入Compose的实战吧。

采用docker-compose的方式编排镜像,启动镜像:

version: '3'
services:eureka-server:image: forezp/eureka-serverrestart: alwaysports:- 8761:8761 service-hi: image: forezp/service-hi restart: always ports: - 8763:8763

输入命令: docker-compose up

发现2个镜像按照指定的顺序启动了。

五、采用docker-compose编排并启动镜像

docker-compose也可以构建镜像,现在我们采用docker-compose的方式构建镜像。

现在以eureka-server为例: 
将Dockerfile移到eureka-server的主目录,改写ADD的相对路径:


FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD ./target/eureka-server-0.0.1-SNAPSHOT.jar app.jar #RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE 8761

同理修改service-hi目录;

编写构建镜像docker-compose-dev文件:

version: '3'
services:eureka-server:build: eureka-serverports:- 8761:8761 service-hi: build: service-hi ports: - 8763:8763 

命令构建镜像并启动:

docker-compose -f docker-compose.yml -f docker-compose-dev.yml up 

转载于:https://www.cnblogs.com/kuoAT/p/9144325.html

SpringCloud学习成长之 十一 Docker部署cloud项目相关推荐

  1. SpringCloud学习笔记(1)- Spring Cloud Netflix

    文章目录 SpringCloud学习笔记(1)- Spring Cloud Netflix 单体应用存在的问题 Spring Cloud Eureka Eureka Server代码实现 Eureka ...

  2. SpringCloud学习笔记(1)- Spring Cloud Alibaba

    文章目录 SpringCloud学习笔记(1)- Spring Cloud Alibaba 服务治理 Nacos 服务注册 Nacos 服务发现与调用 Ribbon 负载均衡 Sentinel 服务限 ...

  3. SpringCloud学习笔记(6)----Spring Cloud Netflix之负载均衡-Ribbon的使用

    1. 什么是负载均衡? 负载均衡,就是分发请求流量到不同的服务器. 负载均衡一般分为两种 1. 服务器端负载均衡(nginx) 2. 客户端负载均衡(Ribbon) 2. 服务提供者(spring-c ...

  4. 又到了上云时刻啦!!!阿里云 Docker部署SpringBoot项目 方便测试的部署方式

    又到了上云时刻啦!!!阿里云 Docker部署SpringBoot项目 方便测试的部署方式 部署思路: 具体步骤: 1.打成jar 2.上传到服务器 3.启动JDK容器 4.进入JDK 容器 启动 项 ...

  5. docker部署sprinboot项目

    掌握了基本的docker知识之后,我们就想尝试使用docker来部署一下项目,由于现在越来越多的项目都是直接以jar包启动的,即springboot项目,下面就简单演示一下使用用docker部署一个j ...

  6. go项目部署:docker部署go项目直接运行二进制文件部署(两种方式进行部署)

    go项目部署:docker部署go项目&直接运行二进制文件部署 引言:之前断断续续的接触到项目部署,一直没有详细的了解部署,于是最近就好好的专研一下项目的部署,前期准备:一个自己或者别人的具有 ...

  7. 使用Docker部署SpringBoot项目(避坑+超级详细版本)

    使用Docker部署SpringBoot项目(避坑+超级详细版本) 首先呢,非常感谢我们一起相遇在这个地方,想必此刻的你也是在一个学习求知的过程,我们一样,我们都是在求知的路上匍匐前进!看到这篇文章, ...

  8. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  9. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

最新文章

  1. mongodb权限管理
  2. CSDN创始人蒋涛:AI定义的开发者时代
  3. labuladong的算法小抄pdf_随机算法:水塘抽样算法
  4. android studio 第一个程序显示radle d 'https://services.gradle.org/distributions/gradle-5.4.1-all.zip'.
  5. 临床科研设计的主要内容
  6. ie 不执行回调函时_「Excel VBA操作IE篇」10分钟内设置完成,3句代码打开IE浏览器
  7. java中的string类型_Java中的字符串类型(String)
  8. linux oom-killer
  9. 如何让阿三 Windows 10、11 的恢复分区(Recovery Partition)恢复到 “盖茨” 模式
  10. Postgresql的使用-1 创建数据库
  11. 小插件,通过js实现邮箱自动提示功能
  12. OpenCV 实现读取摄像头、视频读取保存 (C++)
  13. 【初/中级前端面经】中小型公司面试时都会问些什么?
  14. 定位漏水_即使在移动中也要防止销售漏水
  15. OpenGL---GLUT教程(四) GLUT动画
  16. 常用的http响应状态码大全
  17. Bootstrap3基础 table-responsive 响应式表格
  18. C++控制台操作(基本操作的代码)
  19. 范畴(Category)
  20. 原画师培训需要多少学费?原画师零基础一般要学多久

热门文章

  1. shell+ftp+中文乱码_Ftp 命令出现中文乱码问题如何解决,求指教,非常感谢
  2. FreeSWITCH 总体架构
  3. 强行杀windows服务
  4. 微软研发流程(ALM)管理培训会议(比亚迪汽车)
  5. 河南多校大一训练赛 C 青蛙的约会
  6. 值类型与引用类型比较与区别
  7. 红杉树信息助力XToolsCRM “SaaS”领域的巨人联盟
  8. QML与Qt C++ 交互机制详解
  9. Windows消息循环机制详细概述
  10. Windows静态库和动态库的调用方法汇总