环境:MAC OS X 10.12.3 + Docker 1.13.1 + S2I 1.1.5
本文和《构建 Spring Boot Builder Image(基于 centos7)》步骤差不多。
不一样的是 Base Image 使用的是红帽官方的 registry.access.redhat.com/rhscl/s2i-base-rhel7。
好处是镜像来源安全可靠,并且红帽会一直更新维护该镜像,用着放心。
以下操作均在 MAC 机器上执行。
1. 创建 S2I 目录结构
s2i create spring-boot-rhel7 s2i-rhel7-spring-boot
说明:这里 spring-boot-rhel7 是 builder image 名称,s2i-rhel7-spring-boot 是目录名称。
2. 下载并解压 jdk 1.8 和 maven 3
tar zxvf jdk-8u121-linux-x64.tar.gz
mv jdk1.8.0_121 jdk
tar zxvf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 maven
3. 为了能够安装软件,创建 OCP.repo,指向本地 yum 源
OCP.repo 内容如下:
[OpenShift]
baseurl = http://192.168.56.112/repo/
gpgcheck = 0
enabled = 1
4. 定义 Docker file
内容如下:
FROM registry.access.redhat.com/rhscl/s2i-base-rhel7
EXPOSE 8080
LABEL io.k8s.description="Platform for building and running Spring Boot applications" \
io.k8s.display-name="Spring Boot Maven 3" \
io.openshift.expose-services="8080:http" \
io.openshift.tags="builder,java,java8,maven,maven3,springboot"
COPY OCP.repo /etc/yum.repos.d/OCP.repo
RUN yum update -y && \
yum install -y curl wget git iproute iputils net-tools bash-completion && \
yum clean all
# 切换镜像的目录,进入 /usr 目录
WORKDIR /usr
# 在 /usr 下创建 java 目录,用来存放 jdk
RUN mkdir java
# 切换镜像的目录至 /usr/java
WORKDIR /usr/java
# 在 /usr/java 下创建 jdk 目录,用来存放 jdk 文件
RUN mkdir jdk
# 切换镜像的目录至 /usr/java/jdk
WORKDIR /usr/java/jdk
# 将宿主机的 jdk 目录下的全部文件考入至镜像的 /usr/java/jdk 目录下
ADD jdk /usr/java/jdk
# 切换镜像的目录至 /usr/share
WORKDIR /usr/share
# 在 /usr/share 下创建 maven 目录,用来存放 maven 文件
RUN mkdir maven
# 将宿主机的 maven 目录下的全部文件考入至镜像的 /opt/face 目录下
ADD maven /usr/share/maven
RUN ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
# 设置时区,容器时间和宿主机时间同步
# RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 切换镜像的目录至 /opt/app-root/src
WORKDIR ${HOME}
# 设置环境变量
ENV JAVA_VERSON=1.8.0_121
ENV MAVEN_VERSION=3.3.9
ENV JAVA_HOME=/usr/java/jdk
ENV JAVA_BIN=/usr/java/jdk/bin
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV MAVEN_HOME=/usr/share/maven
# Add configuration files, bashrc and other tweaks
COPY ./s2i/bin/ $STI_SCRIPTS_PATH
RUN chown -R 1001:1001 /opt/app-root
USER 1001
# Set the default CMD to print the usage of the language image
CMD $STI_SCRIPTS_PATH/usage
5. 定义 s2i/bin/assemble
#!/bin/bash
set -e
echo "---> Installing application source"
cp -Rf /tmp/src/. ./
echo "---> Building Spring Boot application from source"
echo "--> # MVN_ARGS = $MVN_ARGS"
if [ -f "mvnw" ]; then
./mvnw clean install $MVN_ARGS
else
mvn clean install $MVN_ARGS
fi
# Fix source directory permissions
fix-permissions ./
6. 定义 s2i/bin/run
#!/bin/bash
set -e
APP_TARGET=${APP_TARGET:-target}
echo "---> Starting Spring Boot application"
echo "--> # APP_TARGET = $APP_TARGET"
echo "--> # JAVA_OPTS = $JAVA_OPTS"
echo "---> Running application from jar ($(find $APP_TARGET -name *.jar)) ..."
java $JAVA_OPTS -jar `find $APP_TARGET -name *.jar`
7. 定义 s2i/bin/usage
#!/bin/sh -e
cat <This is a STI springboot maven3 centos base image:
To use it, install STI: https://github.com/openshift/source-to-image
Sample invocation:
sti build git://github.com/codecentric/springboot-sample-app spring-boot-centos7 springboot-sample-app
You can then run the resulting image via:
docker run -p 8080:8080 springboot-sample-app
EOF
8. 构建 spring boot builder image
docker build -t="maping930883/spring-boot-rhel7" .
构建后,启动镜像,检查软件是否都安装了
docker run -it maping930883/spring-boot-rhel7 bash
9. 使用 spring boot builder image 构建应用镜像
s2i build git://github.com/codecentric/springboot-sample-app maping930883/spring-boot-rhel7 springboot-sample-app
这里有一个小问题,就是每次构建应用镜像,都会从网上下载 maven 构件,非常耽误时间。
能不能指向自己私有的 maven 仓库呢?
想一想 maven 的知识,嗯,修改 /usr/share/maven/conf/setting.xml 文件内容。
把本机的 ~/.m2/setting.xml 内容复制过去,
修改这一行,指向镜像中自己的 repository
<localRepository>/opt/app-root/src/.m2/repository</localRepository>
还有别忘了把 localhost 改成 IP 地址,如果有的话。
重新构建 builder image,重新构建应用镜像,这次将会下载到自己私有的 maven 仓库,下次构建应用镜像不用重新下载 maven 构件,速度快了很多!
10. 启动应用镜像
docker run -p 8080:8080 springboot-sample-app
访问 http://localhost:8080,显示画面
至此,说明 spring boot builder image 构建成功!
参考文献:
1. https://blog.codecentric.de/en/2016/03/deploy-spring-boot-applications-openshift/
2. https://hub.docker.com/r/codecentric/springboot-maven3-centos/
3. https://github.com/codecentric/springboot-maven3-centos
4. https://blog.openshift.com/using-spring-boot-on-openshift/
5. https://blog.openshift.com/using-openshift-enterprise-grade-spring-boot-deployments/
本文和《构建 Spring Boot Builder Image(基于 centos7)》步骤差不多。
不一样的是 Base Image 使用的是红帽官方的 registry.access.redhat.com/rhscl/s2i-base-rhel7。
好处是镜像来源安全可靠,并且红帽会一直更新维护该镜像,用着放心。
以下操作均在 MAC 机器上执行。
1. 创建 S2I 目录结构
s2i create spring-boot-rhel7 s2i-rhel7-spring-boot
说明:这里 spring-boot-rhel7 是 builder image 名称,s2i-rhel7-spring-boot 是目录名称。
tar zxvf jdk-8u121-linux-x64.tar.gz
mv jdk1.8.0_121 jdk
tar zxvf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 maven
3. 为了能够安装软件,创建 OCP.repo,指向本地 yum 源
OCP.repo 内容如下:
[OpenShift]
baseurl = http://192.168.56.112/repo/
gpgcheck = 0
enabled = 1
4. 定义 Docker file
内容如下:
FROM registry.access.redhat.com/rhscl/s2i-base-rhel7
EXPOSE 8080
LABEL io.k8s.description="Platform for building and running Spring Boot applications" \
io.k8s.display-name="Spring Boot Maven 3" \
io.openshift.expose-services="8080:http" \
io.openshift.tags="builder,java,java8,maven,maven3,springboot"
COPY OCP.repo /etc/yum.repos.d/OCP.repo
RUN yum update -y && \
yum install -y curl wget git iproute iputils net-tools bash-completion && \
yum clean all
# 切换镜像的目录,进入 /usr 目录
WORKDIR /usr
# 在 /usr 下创建 java 目录,用来存放 jdk
RUN mkdir java
# 切换镜像的目录至 /usr/java
WORKDIR /usr/java
# 在 /usr/java 下创建 jdk 目录,用来存放 jdk 文件
RUN mkdir jdk
# 切换镜像的目录至 /usr/java/jdk
WORKDIR /usr/java/jdk
# 将宿主机的 jdk 目录下的全部文件考入至镜像的 /usr/java/jdk 目录下
ADD jdk /usr/java/jdk
# 切换镜像的目录至 /usr/share
WORKDIR /usr/share
# 在 /usr/share 下创建 maven 目录,用来存放 maven 文件
RUN mkdir maven
# 将宿主机的 maven 目录下的全部文件考入至镜像的 /opt/face 目录下
ADD maven /usr/share/maven
RUN ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
# 设置时区,容器时间和宿主机时间同步
# RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 切换镜像的目录至 /opt/app-root/src
WORKDIR ${HOME}
# 设置环境变量
ENV JAVA_VERSON=1.8.0_121
ENV MAVEN_VERSION=3.3.9
ENV JAVA_HOME=/usr/java/jdk
ENV JAVA_BIN=/usr/java/jdk/bin
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV MAVEN_HOME=/usr/share/maven
# Add configuration files, bashrc and other tweaks
COPY ./s2i/bin/ $STI_SCRIPTS_PATH
RUN chown -R 1001:1001 /opt/app-root
USER 1001
# Set the default CMD to print the usage of the language image
CMD $STI_SCRIPTS_PATH/usage
#!/bin/bash
set -e
echo "---> Installing application source"
cp -Rf /tmp/src/. ./
echo "---> Building Spring Boot application from source"
echo "--> # MVN_ARGS = $MVN_ARGS"
if [ -f "mvnw" ]; then
./mvnw clean install $MVN_ARGS
else
mvn clean install $MVN_ARGS
fi
# Fix source directory permissions
fix-permissions ./
6. 定义 s2i/bin/run
#!/bin/bash
set -e
APP_TARGET=${APP_TARGET:-target}
echo "---> Starting Spring Boot application"
echo "--> # APP_TARGET = $APP_TARGET"
echo "--> # JAVA_OPTS = $JAVA_OPTS"
echo "---> Running application from jar ($(find $APP_TARGET -name *.jar)) ..."
java $JAVA_OPTS -jar `find $APP_TARGET -name *.jar`
7. 定义 s2i/bin/usage
#!/bin/sh -e
cat <This is a STI springboot maven3 centos base image:
To use it, install STI: https://github.com/openshift/source-to-image
Sample invocation:
sti build git://github.com/codecentric/springboot-sample-app spring-boot-centos7 springboot-sample-app
You can then run the resulting image via:
docker run -p 8080:8080 springboot-sample-app
EOF
8. 构建 spring boot builder image
docker build -t="maping930883/spring-boot-rhel7" .
构建后,启动镜像,检查软件是否都安装了
docker run -it maping930883/spring-boot-rhel7 bash
s2i build git://github.com/codecentric/springboot-sample-app maping930883/spring-boot-rhel7 springboot-sample-app
能不能指向自己私有的 maven 仓库呢?
想一想 maven 的知识,嗯,修改 /usr/share/maven/conf/setting.xml 文件内容。
把本机的 ~/.m2/setting.xml 内容复制过去,
修改这一行,指向镜像中自己的 repository
<localRepository>/opt/app-root/src/.m2/repository</localRepository>
还有别忘了把 localhost 改成 IP 地址,如果有的话。
重新构建 builder image,重新构建应用镜像,这次将会下载到自己私有的 maven 仓库,下次构建应用镜像不用重新下载 maven 构件,速度快了很多!
10. 启动应用镜像
docker run -p 8080:8080 springboot-sample-app
访问 http://localhost:8080,显示画面
至此,说明 spring boot builder image 构建成功!
参考文献:
1. https://blog.codecentric.de/en/2016/03/deploy-spring-boot-applications-openshift/
2. https://hub.docker.com/r/codecentric/springboot-maven3-centos/
3. https://github.com/codecentric/springboot-maven3-centos
4. https://blog.openshift.com/using-spring-boot-on-openshift/
5. https://blog.openshift.com/using-openshift-enterprise-grade-spring-boot-deployments/
没有评论:
发表评论