Docker
Docker是一個容器引擎:它允許在沙盒分層的輕量級環境中打包和執行應用程式,並具有自己的獨立檔案系統,作業系統和資源。
通常必須為整體服務建立Dockerfile,並在容器需要與其他服務(例如資料庫或redis)互動時建立docker-compose.yml。
首先,您必須使用您的應用程式建立一個fat-jar檔案。 還有一個Dockerfile,如下所示:
Dockerfile:
FROM openjdk:8-jre-alpine
ENV APPLICATION_USER ktor
RUN adduser -D -g '' $APPLICATION_USER
RUN mkdir /app
RUN chown -R $APPLICATION_USER /app
USER $APPLICATION_USER
COPY ./build/libs/my-application.jar /app/my-application.jar
WORKDIR /app
CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "my-application.jar"]
複製程式碼
Nginx
當使用具有多個域的Docker時,您可能希望使用nginx-proxy映像和letsencrypt-nginx-proxy-companion映像在單個計算機/ ip中提供多個域/子域,並使用let’s encrypt自動提供HTTPS。
配置nginx-proxy和letsencrypt-nginx-proxy-companion之後,你的docker-compose.yml檔案(沒有附加服務)可能如下所示:
docker-compose.yml:
version: '2'
services:
web:
build:
context: ./
dockerfile: Dockerfile
expose:
- 8080
environment:
- VIRTUAL_HOST=mydomain.com
- VIRTUAL_PORT=8080
- LETSENCRYPT_HOST=mydomain.com
- LETSENCRYPT_EMAIL=myemail@mydomain.com
networks:
- reverse-proxy
restart: always
networks:
backend:
reverse-proxy:
external:
name: reverse-proxy
複製程式碼
可以使用docker-compose up -d啟動它,如果服務失敗或系統重啟後它將重新啟動。
如果指定域的DNS指向您的伺服器,並且您已正確配置了nginx-proxy及其配套,則let's encrypt配套將與let's encrypt連線,並將自動為您獲取和配置證照。 因此,您將能夠通過以下方式訪問您的純http服務:https://mydomain.com/ nginx將處理SSL證照,並將通過純HTTP與伺服器連線。
Tomcat和Jetty
生成war檔案並將其放在Tomcat或者Jetty的webapps資料夾下。