Swiftがインストールされているイメージを探す
で対象のSwift Versionを見つける。swiftで検索するといくつかのイメージが見つかる。
今回はdocker-swiftで提供しているイメージを使う。
Dockerfile
サンプルプロジェクトはVapor + SwiftPMで構成されているので、各種設定ファイルをコンテナ上でコピーします。
FROM swift:4.0.3
USER root
RUN mkdir -p /server
COPY ./Config /server/Config
COPY ./Sources /server/Sources
COPY ./Makefile /server/Makefile
COPY ./Package.resolved /server/Package.resolved
COPY ./Package.swift /server/Package.swift
ENV PORT 9000
EXPOSE 9000
WORKDIR /server
RUN make build
CMD ["make", "run"]
サンプルプロジェクトは以下にあります。
https://github.com/Nonchalant/VaporProtobufSample
Swift Core Library
今回のベースイメージにしたswift:4.0.3はubuntuで動いています。macOSとLinuxOSで動くSwift Core Libraryは別物です。
LinuxOS用のFoundationは実装途中なので一部使えない機能((URLSessionなどが一部使えません。実装ステータスはStatus.mdで確認できます))があるので、macOSで開発する際も時々LinuxOSで動くDockerコンテナで確認するとよいと思います。実装されていない機能はCライブラリなどで代替するしかなさそうです。