LinkedKeeper 部署 ACK

本篇文章,我们看一下如何基于阿里云K8S部署自己的应用。从整体部署来看,首先,阿里云提供了容器镜像服务,可用于我们应用基于容器化Dockerfile的镜像构建,其次,基于容器服务 - Kubernetess实现了容器化部署,整个过程如下图所示,不过其中还使用到了SLB、EIP、NAT、ECS、VPC、VSW等等,我们来一起看下。

First,我们通过阿里云容器服务 - Kubernetess创建一个K8S集群:

成功创建了K8S集群之后,如何把它做成Docker镜像?

步骤一:在Dockerfile中使用多阶段构建打包Java应用镜像

从Docker 17.05版本开始,使用docker build命令开始支持多阶段构建。

多阶段构建指在Dockerfile中使用多个FROM语句,每个FROM指令都可以使用不同的基础镜像,并且是一个独立的子构建阶段,多条FROM就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。最大的使用场景是将编译环境和运行环境分离,直接一个Dockerfile就可以解决。

什么是基础镜像?

  • Docker镜像官网(Docker Hub): https://hub.docker.com
  • 阿里云容器Hub:https://dev.aliyun.com

LinkedKeeper托管在Github上,通过阿里云容器镜像服务(ACR)的镜像构建服务,进行多阶段构建。

Second,开通阿里云容器镜像服务,绑定Github代码源,创建镜像仓库。

使用多阶段构建Dockerfile(multi-stage)

在LinkedKeeper Maven项目中新建Dockerfile文件,并在Dockerfile文件添加以下内容。

# First stage: complete build environment
FROM maven:3.5.0-jdk-8-alpine AS builder

# add pom.xml and source code
ADD ./pom.xml pom.xml
ADD ./linkedkeeper-web /linkedkeeper-web
ADD ./linkedkeeper-usercenter /linkedkeeper-usercenter
ADD ./linkedkeeper-service /linkedkeeper-service
ADD ./linkedkeeper-manager /linkedkeeper-manager
ADD ./linkedkeeper-dao /linkedkeeper-dao
ADD ./linkedkeeper-domain /linkedkeeper-domain

# package jar
RUN mvn clean package

# Second stage: minimal runtime environment
FROM openjdk:8-jre-alpine
FROM tomcat:8.5.32-jre8

# copy jar from the first stage
RUN rm -rf /usr/local/tomcat/webapps/*
COPY --from=builder /linkedkeeper-web/target/linkedkeeper-web-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war

RUN mkdir -p /usr/local/tomcat/upload/temp/

EXPOSE 8080

# startup tomcat
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

说明:该Dockerfile文件使用了二阶段构建。

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。