9、Ktor学习-部署之容器;

570 阅读1分钟

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文件夹下。