9、Ktor學習-部署之容器;

Melrose發表於2019-03-07

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資料夾下。

相關文章