docker
docker-compose
Vapor

Vaporをdocker-compose上で走らせる

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プロジェクトのディレクトリに以下のファイルを作成します。

docker-compose.yml
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アプリを走らせる方法については、なかなか見つからなかったので、なかなか面倒だったため、この項目が参考になればと思っております。