VaporのプリセットのテンプレートではDockerを使うための設定があるのですが、docker-composeとなると、あまり参考となるような情報が多いとはいえず、なかなか四苦八苦させられたので、自身が対応してうまくいった方法を以下に述べてみます。
前提
macOS High Sierra以降をインストールしたMacで実行しました。
以下のソフトウェアをインストールしている必要があります。インストールしていない場合は、インストールする必要があります。
- Xcode
- Homebrew
- Docker for Mac
- docker-compose
- Vapor
各種ツール類をインストール
※ この節はXcode, Homebrew, Docker for Mac, docker-compose, Vaporをインストールしていない場合のインストール手順です。全てインストール済みであれば Vaporプロジェクトを作成する までスキップしてください。
Xcodeのインストール
Xcodeをインストールしていない場合は、App Storeを起動、「Xcode」を選択して、インストールを行います。
インストール完了後、一度Xcodeを起動して、「Welcome to Xcode」の画面が開くかどうかを確認しておくとよいでしょう。
Homebrewのインストール
Homebrewをインストールしていない場合は、以下のコマンドでインストールができます。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Docker for Macとdocker-composeのインストール
Docker for Macとdocker-composeをインストールするには、以下のコマンドで行えます。
brew cask install docker
brew install docker-compose
Vaporのインストール
Vaporをインストールするには、まずは vapor/homebrew-tap
をtapします。
brew tap vapor/homebrew-tap
brew update
その後、以下のコマンドでインストールできます。
brew install vapor
Vaporプロジェクトを作成する
※ この節はVaporプロジェクトを作成したことのない場合の手順です。不要であれば docker-composeでVaporプロジェクトを走らせる までスキップしてください。
プロジェクトを作成する
Vaporプロジェクトを作成する場合は、以下のコマンドでおこなえます(ウェブアプリを作成する場合)
vapor new --web FooBar
上記の場合は、FooBarという名称のウェブアプリテンプレートで作成することができます。 --web
の部分を --api
とすればAPIテンプレート、 --auth
とすれば認証機能のテンプレートが適用されます。
また、任意のテンプレートを使用したい場合は --template=(GitHubのリポジトリ名またはGitのリポジトリのURL)
とすることもできます。
Xcodeプロジェクトを生成する
Xcode用のプロジェクトを生成する場合は、作成したプロジェクトのディレクトリにて、以下のコマンドを入力することで行えます.
vapor xcode
この時に、Package.swift
で指定されたライブラリー群もインストールされます。
docker-composeでVaporプロジェクトを走らせる
前置きが長くなりましたが、ここからdocker-composeでVaporを走らせる方法について説明していきます。
docker-compose.ymlを作成する
まずは、作成したVaporプロジェクトのディレクトリに以下のファイルを作成します。
version: '3'
services:
web:
build:
context: .
dockerfile: web.Dockerfile
container_name: vapor_web
image: web:dev
environment:
ENVIRONMENT: dev
ports:
- 8080:80
stdin_open: true
tty: true
restart: unless-stopped
docker file: web.Dockerfile
の部分については、Dockerfileの名前に応じて適宜変更を行ってください。
docker-composeをビルドして実行する
docker-compose.ymlを作成したら、以下のコマンドでdocker-composeの関連づけられたコンテナをビルド、実行します。
docker-compose build
docker-compose up -d
ビルド・実行完了後、ブラウザで 127.0.0.1:8080
をひらけば、「It works」のページが表示されればdocker-composeでVaporアプリを実行できています。
その後、以下のコマンドでdocker-composeの関連づけられたコンテナが終了します。
docker-compose down
最後に
今回はVaporアプリをdocker-compose上で走らせる方法について書いてみました。docker-composeは、ウェブサーバーとMySQLサーバー、Redisサーバーなど複数のDockerコンテナを走らせるような構成の時にはかなり力を発揮するという利点があり、VaporアプリでもMySQLと連携させるような時にはかなり力を発揮すると言えます。
しかしながら、docker-composeでVaporアプリを走らせる方法については、なかなか見つからなかったので、なかなか面倒だったため、この項目が参考になればと思っております。