1. 程式人生 > >docker:利用maven映象啟動服務的一個示例

docker:利用maven映象啟動服務的一個示例

製作一個docker映象如果從頭開始做就實在太麻煩也沒必要了,以下的示例是基於maven官方映象用maven啟動一個自定義的應用服務的示例.

詳細的解釋參見Dockerfile中的註釋:

# docker image of facelog service
# version 1.0.3
# description: maven 外掛啟動方式
# 基於maven 3.5.2映象製作 
FROM maven:3.5.2-jdk-7
MAINTAINER guyadong(10[email protected])
# 建立系統帳戶 gdface,避免使用root帳戶,maven映象預設使用的是root.
RUN groupadd -r facelog && useradd -r -m -g facelog facelog # 新增一些基本的描述 LABEL version="1.0.8" description="facelog service docker" # 設定應用服務所需的環境變數, # 避免每個變數一行的定義方式,減少映象層數 ENV FACELOG_VERSION=1.0.8 \ FACELOG_DEBUG=false \ FACELOG_DEBUG_PORT=8000 \ SERVICE_PORT=26411 \ REDIS_HOST=localhost \ REDIS_PORT=6379
\ REDIS_PASSWORD="" \ DATABASE_HOST=localhost \ DATABASE_PORT=3306 \ DATABASE_SCHEMA=test \ DATABASE_USER=root \ DATABASE_PASSWORD="" # 複製應用服務自己的entrypoint指令碼 COPY facelog-entrypoint.sh /usr/local/bin # dos to unix 換行符轉換,避免在windows下建立映象時因為windows CRLF格式換行符造成的錯誤
RUN sed -i 's/\r$//g' /usr/local/bin/facelog-entrypoint.sh # 定義映象入口 ENTRYPOINT ["facelog-entrypoint.sh"] # 建立應用服務的可寫卷掛載點 RUN mkdir /data && chown facelog:facelog /data # 指定以新建立的系統使用者啟動容器 USER facelog # 執行外掛的容器初始化 RUN mvn com.gitee.l0km:facelogservice-maven-plugin:${FACELOG_VERSION}:docker-init VOLUME /data WORKDIR /data # 定義暴露的服務埠 EXPOSE $SERVICE_PORT $FACELOG_DEBUG_PORT CMD set -x; \ if [ "$FACELOG_DEBUG" = true ] ; then \ MAVEN_OPTS="-Xrunjdwp:transport=dt_socket,server=y,address=$FACELOG_DEBUG_PORT,suspend=n"; \ else \ MAVEN_OPTS=''; \ fi ; \ mvn com.gitee.l0km:facelogservice-maven-plugin:${FACELOG_VERSION}:run # 最後一行:maven呼叫外掛方式啟動自定義服務

上面的Dockerfile中有一行RUN 執行自定義外掛的docker-init (goal)程式碼。其實這個docker-init啥也沒幹,但執行後,maevn會自動將自定義服務的所有依賴庫都下載寫入到映象並固化。
這樣每次容器啟動執行CMD定義的maven指令時,就不會再下載依賴庫了。