openshift/origin学习记录(9)——S2I镜像定制(基于Git)
參考《開源容器云Openshift》一書,制作一個Tomcat的S2I鏡像(從Git下載代碼,Maven打包,部署到Tomcat上。)
從Svn下載代碼的S2I鏡像可以參考https://github.com/nichochen/openshift-tomcat-svn,這個貌似是《開源容器云Openshift》作者的github項目。
準備環(huán)境
- 在Master上下載S2I的二進制執(zhí)行文件。
- 解壓到/usr/bin目錄下。
- 通過s2i create命令創(chuàng)建一個名為tomcat-s2i的S2I Builder鏡像。第二個參數tomcat-s2i為S2I Builder鏡像名稱。第三個參數tomcat-s2i-catalog定義了工作目錄的名稱。
執(zhí)行find tomcat-s2i-catalog查看目錄。
s2i目錄下為S2I腳本。
其中:
編寫Dockerfile
編寫一個制作Tomcat的S2I鏡像。Dockerfile的內容如下:
# tomcat-s2i FROM maven:3.3-jdk-7 # TODO: Put the maintainer name in the image metadata MAINTAINER huliaoliao # TODO: Rename the builder environment variable to inform users about application you provide them ENV BUILDER_VERSION 1.0 #TODO: Set labels used in OpenShift to describe the builder image LABEL io.openshift.s2i.scripts-url=image:///usr/libexec/s2i \io.k8s.description="Tomcat S2I Builder" \io.k8s.display-name="tomcat s2i builder 1.0" \io.openshift.expose-services="8080:http" \io.openshift.tags="builder,tomcat" WORKDIR /opt ADD ./apache-tomcat-8.5.5.tar.gz /opt RUN useradd -m tomcat -u 1001 && \ chmod -R a+rw /opt && \ chmod a+rwx /opt/apache-tomcat-8.5.5/* && \ chmod +x /opt/apache-tomcat-8.5.5/bin/*.sh && \ rm -rf /opt/apache-tomcat-8.5.5/webapps/* # TODO: Copy the S2I scripts to /usr/libexec/s2i, since maven:3.3-jdk-7 image # sets io.openshift.s2i.scripts-url label that way, or update that label COPY ./s2i/bin/ /usr/libexec/s2i # This default user is created in the image USER 1001 # TODO: Set the default port for applications built using this image EXPOSE 8080 ENTRYPOINT [] # TODO: Set the default CMD for the image CMD ["/usr/libexec/s2i/usage"]在本Dockerfile中,io.openshift.s2i.scripts-url=image:///usr/libexec/s2i標簽指定了S2I依賴的腳本所在的路徑。S2I執(zhí)行器將到此路徑中查找所需要的執(zhí)行腳本。
通過USER dev定義了一個新用戶,并指定該用戶為容器的啟動用戶。以root用戶作為啟動用戶在某些情況下存在安全風險。
編輯S2I腳本
- 編輯s2i/bin/assemble腳本(負責源代碼的編譯、構建以及構建產出物的部署)。
在腳本最末尾添加如下代碼:
cp -Rf /tmp/src/. ./ mvn -Dmaven.test.skip=true package find . -type f -name '*.war'|xargs -i cp {} /opt/apache-tomcat-8.5.5/webapps/ mvn clean這段代碼會觸發(fā)一次Maven構建,并將構建產生的WAR包拷貝到Tomcat服務器的webapps目錄下進行部署。
完整的assemble腳本如下:
- 編輯s2i/bin/run腳本(S2I流程生成的最終鏡像將以這個腳本作為容器的啟動命令)。
替換為以下內容:
bash -c "/opt/apache-tomcat-8.5.5/bin/catalina.sh run"腳本內容為啟動Tomcat服務器。
執(zhí)行鏡像構建
- 下載對應版本的Tomcat安裝包。
- 構建鏡像。s2i create命令為用戶生成了一個Makefile,通過make指令可以啟動Docker build。
導入鏡像
- 將tomcat-s2i鏡像推送到自己的鏡像倉庫。
此步省略。
- 將tomcat-s2i鏡像導入Openshift中生成相應的Image Stream。
導入openshift項目里,以便該Image Stream可以被其他項目引用。
- 查看導入的Image Stream。
為了讓OpenShift識別出這個鏡像是S2I的Builder鏡像,需要編輯剛導入的Image Stream,添加注解“tags”
# oc edit is/tomcat-s2i -n openshift主要是修改annotations下的內容,如紅框所示,這里只是簡單的添加。
修改完成后保存退出。
驗證
登錄web console,我的web console中已有新創(chuàng)建的鏡像。
構建成功。
總結
以上是生活随笔為你收集整理的openshift/origin学习记录(9)——S2I镜像定制(基于Git)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现163邮箱发送邮件功能
- 下一篇: 提莫攻击 findPoisonedDur