docker:利用maven映象啟動服務的一個示例
阿新 • • 發佈:2018-12-26
製作一個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指令時,就不會再下載依賴庫了。