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

docker-composeに関して

dockerで環境構築する場合は基本的に下記のような流れをとると思います。 それぞれの出来合いのイメージをpull イメージに様々なライブラリをインストール それらをコンテナとして起動&連携 …

no image

herokuでのLet’s Encrypt設定

herokuで運用しているアプリでhttps設定(Let’s Encrypt)をしたいという要望があり、調査、設定をすることに。 当然herokuでなくても大丈夫です。 過去に行ったhtt …

no image

負荷調査のセオリー

以前にも下記リンクで負荷調査について記事を書いたんですが、もう少し掘り下げてみようかと。 サーバーの過負荷の発見 理論編 サーバーの過負荷の発見 メモリ使用率の調査&抽出、置換(awk,sed)コマン …

no image

jenkinsでのSSH鍵認証&herokuからのソース取得

jenkinsでGitからソースを取得するときに鍵認証をかけている場合はそれ用の設定が必要になります。 基本的な考え方ですが、userがjenkinsだったときに、ssh鍵認証やherokuでどのよう …

no image

nginx基本

データベースについて勉強していましたが、実務でnginxを触る機会があったので、これを機に勉強。 Contents1 参考文献2 nginx基礎3 コアモジュール4 httpモジュール5 設定ファイル …