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