skillup

技術ブログ

サーバー・ネットワーク

herokuへのdockerコンテナ送付とdocker volumeについて

投稿日:

herokuへのdockerコンテナ送付

Herokuですが、通常のソースをgitであげる以外にも、Dockerのコンテナをアップロードすることが可能です。

herokuにはProcfileという設定ファイルがあり、PHPだと、

web: vendor/bin/heroku-php-apache2

のように書きます。(書かなくてもdefaultで決まっています。)

herokuでのhttpd.conf設定

PHPのheroku(ヘロク)へのデプロイ

これはheroku上のdyno(heroku上で動くプラットフォームみたいなもの。コンテナ?とほぼ同義)を書いています。

通常はgitでソースをpushして、dynoの上に展開しますが、これをherokuで用意するのではなく、Dockerのコンテナをあげることができます。

ファイル構成

Dockerfile

↑これだけが最低限必須(あとは後述する必要な設定ファイルなどあれば置いておきましょう。)

コマンド

注意点

  • Dockerfileが必須。docker-composeでやっていると、 image: などでDockerfile書かなくてもいけるので要注意
  • docker-compose.ymlの情報は伝達されない。docker-composeでよく行うPORTのbindや設定ファイルの同期ができない
  • PORT→環境変数を使う必要あり(要調査)
  • 設定ファイル→Dockerfile内の記述で COPY conf.yml /etc/conf.ymlなどと書いておき、コンテナに直接設置
  • 基本的に上記のコマンドでできるのはwebアプリ側だけ、DBはaddonなどに別途インスタンスを付与する必要がある。

Dockerで作成したRailsアプリをHerokuにデプロイ

docker volumeの記述

dockerのコンテナとローカルPCのファイルの同期などは

と書けばOKです。一般的にwebアプリなどは開発ソースを同期させる必要があるので上記のように書くと思います。

DBも /var/lib/mysql 直下のバイナリデータを同期しておかないと、コンテナ起動のたびに、初期化されてしまいます。そのため、実データを同期する時に今まで、

のように書いていました。一応これで動いていたので、間違いにきづかなかったのですがdataフォルダが初期化できない・・などのエラーが別端末で出てこれがまずいと発覚しました。

よく調べてみるとデータベースのバイナリデータなどは下記のように書くことが正解のようです。

docker側の設定でローカルと同期する領域などを内部で自動的に決めているようですね。

Dockerのデータを永続化!Data Volume(データボリューム)の理解から始める環境構築入門

 

-サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

SSH鍵認証に関して

SSHの鍵認証についてやり方自体は流れ作業でできていましたが、根本的なところが理解していないので復習。 まずは通常の流れを。 1 クライアント(自分のPC)で公開鍵・秘密鍵を作成。[crayon-65 …

no image

VPCでEC2+RDSを構築

以前の記事で、VPCを使ってEC2の環境を作りましたが、一般的にwebアプリはwebサーバーとDBがセットになることがほとんどだと思いますので、AWSでこの環境を構築してみようと思います。 Conte …

no image

ansibleでのインストール

ansibleについてのメモなど。 Contents1 ansibleって何?2 インストール前準備3 ansibleインストール4 SSH鍵登録5 具体的なソフトウェアのインストール6 参考リンク& …

no image

監視検知処理に関して

実務で監視のスクリプトを書くことがあったんでメモしときます。 監視検知とは例えばあるディレクリに変化(ファイルの作成・更新・削除など)があった時に、それをトリガーにして何らかの処理を行うと言う仕組みに …

no image

サーバー設定ファイルについて nginx

最近はwebサーバーのシェアとしてnginxが徐々に伸びてきていますね。 先日apacheについて解説をしましたが、nginxについて書きたいと思います。 Contents1 設定ファイル2 参考リン …

アーカイブ