web 应用的自动化打包和发布; 自动化测试和持续集成、发布; 在服务型环境中部署和调整数据库或其他的后台应用; 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。二、准备工作
环境条件:
linux 系统,不建议 windows docker 最新版本 jdk 1.8 maven3.0
本文采用的工程来自第一篇文章的工程,采用 maven 的方式去构建项目,并采用 docker-maven-plugin 去构建 docker 镜像。
三、改造工程、构建镜像改造 eureka-server 工程
在 pom 文件加上插件:
- org.springframework.boot spring - boot - maven - plugin com.spotify docker - maven - plugin 0.4.3 $ {
- docker.image.prefix
- }
- /${project.artifactId} src/main / docker / $ {
- project.build.directory
- }
- $ {
- project.build.finalName
- }.jar
Spotify 的 docker-maven-plugin 插件是用 maven 插件方式构建 docker 镜像的。
imageName 指定了镜像的名字,本例为 forep/eureka-server dockerDirectory 指定 Dockerfile 的位置 resources 是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。
修改下配置文件:
- server: port: 8761eureka: instance: prefer-ip-address: true client: registerWithEureka: false fetchRegistry: false
编写 dockerfile 文件:
- FROM frolvlad/alpine-oraclejdk8:slimVOLUME /tmpADD 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
FROM
:
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 cleanmvn package docker:build
构建 eureka-server 镜像成功。
同理构建 service-hi 镜像 pom 文件导入同 eurek-server 修改下配置文件:
- eureka: client: serviceUrl: defaultZone: http: //eureka-server:8761/eureka/ # 这个需要改为eureka-serverserver: port: 8763spring: application: name: service-hi
在这里说下:defaultZone 发现服务的 host 改为镜像名。
dockefile 编写同 eureka-server
构建镜像:
- mvn cleanmvn package docker:build
这时我们运行 docke 的 eureka-server 和 service-hi 镜像:
- docker run -p 8761: 8761 -t forezp/eureka-serverdocker 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-server restart: always ports: - 8761:8761 service-hi: image: forezp/service-hi restart: always ports: - 8763:8763
输入命令: docker-compose up
发现 2 个镜像按照指定的顺序启动了。
源码下载:https://github.com/forezp/SpringCloudLearning/tree/master/chapter11
五、采用 docker-compose 编排并启动镜像
docker-compose 也可以构建镜像,现在我们采用 docker-compose 的方式构建镜像。
现在以 eureka-server 为例:将 Dockerfile 移到 eureka-server 的主目录,改写 ADD 的相对路径:
- FROM frolvlad/alpine-oraclejdk8:slimVOLUME /tmpADD ./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-server ports: - 8761:8761 service-hi: build: service-hi ports: - 8763:8763
命令构建镜像并启动:
- docker-compose -f docker-compose.yml -f docker-compose-dev.yml up
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-17/20571624.html