Docker はコンテナエンジンです。 レイヤー化された軽量な環境で、独立分離されたファイルシステム、OS、およびリソースを使用して、アプリケーションを コンテナ化および実行ができます。
モノリシックなサービスの場合は Dockerfile
を作成し、コンテナ間でやり取りが必要な場合 (データベースや redis など) は
docker-compose.yml
を作成します。
まずは、あなたのアプリケーションの fat-jar ファイル を作成します。
次に、下記のような 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"]
Docker コンテナをデプロイするには、 Docker コンテナの作成 を参照してください。
複数のドメインで Docker を使用する場合、 nginx-proxy イメージと letsencrypt-nginx-proxy-companion イメージを使用して、 単一のマシン / IP で複数のドメイン / サブドメインを提供したり、暗号化して HTTPS 通信を可能にしたりできます。
nginx-proxy
と letsencrypt-nginx-proxy-companion
を設定したうえで、
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
等が正しく設定されているならば、
letsencrypt-nginx-proxy-companionは letsencrypt と通信し、証明書を自動的に取得して設定します。
https://mydomain.com/ のようにアクセスすると、 nginx が SSL 証明書を処理して プレーンな HTTP を経由してあなたのサーバへ
アクセスするので、 HTTP 通信だけサービスに HTTPS からアクセスできるようになります。
war ファイル を作成し Tomcat の webapps
ディレクトリに配置する必要があります。
例: https://github.com/ktorio/ktor-samples/tree/master/deployment/tomcat-war
war ファイル を作成し、 Jetty の webapps
ディレクトリに配置する必要があります。
例: https://github.com/ktorio/ktor-samples/tree/master/deployment/jetty-war