freedom-man.com

ブログは俺のセーブポイント

Tag: docker (page 1 of 2)

DockerでSFTP開発環境を作る

サービス連携の用途でSFTPをプログラムから利用することがあると思いますが、今回はDockerコンテナを使ってSFTP開発環境の作り方を紹介します。

Continue reading

公式のRubyのDockerイメージのbundlerの挙動

少しハマったので備忘録。公式のRubyのDockerイメージを使うとbundler経由でインストールしたものをボリューム用コンテナで永続化しても二回目以降の起動時でうまく反映されない事象が起きました。

Continue reading

Dockerを使ったCLIツール配布

homebrewやcurl -sL {url} | shなどの/usr/local/binに置く以外にもdockerを使って配布できますよ、という備忘録。

Continue reading

Salesforceのデータバックアップ用Dockerfile作ったので公開してみた

Apex書くのに飽きたため業務の効率を上げるため、Salesforceの各オブジェクトごとの

レコードをCSVでフルバックアップするスクリプト書いてDockerfileにしてみました。

S3の設定をすれば各csvをgzip化して、S3にアップロードするようにもなっていたり。

DataLoader使えば良いじゃん説がありますがJavaとXMLの設定がめんどかった

+herokuみたいなone offでクリーンなエクスポートをしてみたかったってのが動機っす。

 

完成品はこちら

Dockerhubにも登録してます→tzmfree/sfdc-exportjs

 

使い方は、ログ用のディレクトリを作成して

環境変数セットしたDocker走らせるだけ

 

ボリュームで指定したディレクトリ(ホスト側に作ったディレクトリ)にログとかCSVファイルが格納される仕様っす。

CSVファイルをごにょりたい場合はdocker run後の処理でそのCSVを煮るなり焼くなりすればOK。

スケジュール起動したい場合はホスト側のcrondでdocker runごとブン回してください。

以下はDockerfileの備忘っす。

Dockerfileの書き方

MAINTAINERは作った人の名前。

FROMはベースとなるDockerイメージ。

今回ベースとしているphusion/baseimageはDocker使う時のハマりどころを色々と回避してくれてる

ベースイメージで、sshdとかcrondとかも初期装備されてる便利なDockerイメージ。

Dockerfileでよく使うのはRUNとADD。

RUNは実行するコマンドで大体パッケージインストールやgit clone等のセットアップ系を行います。

ADDは実行ディレクトリ配下にある特定のファイルをアップロードする操作で

今回はエクスポート担当のNode.jsスクリプトをアップロードしてます。

Dockerhubへの登録とか

今回はgithubやbitbucketにpushしたら自動的にビルドしてDockerhubにアップロードしてくれる

Automated Buildという機能を利用しました。

設定は超簡単で、Dockerhubにログイン後にAdd Repositoryのボタンから

Automated Buildを選択して

dockerhub_automatedbuild1

gitのサービス選んで

dockerhub_automatedbuild2

リポジトリ選んで

dockerhub_automatedbuild3

テキトーに設定するだけ

dockerhub_automatedbuild4

あとはgithubとかのリモートリポジトリ側にwebhookの設定が自動で追加されるっぽいので

pushしたら都度ビルドしてくれます。

ただし通常のwebhookによる自動化と同様、README上げただけでもビルド走ります。

雑感

今更ですがherokuone-off dynoの考え方が良いなーと思っていて

環境変数の設定変更だけで色んな環境に対応できたり

Immutableで環境自体汚さなかったりするのが個人的には美しく感じます。

まぁ、この量のスクリプトならnpm install && node *** で事足りる感じもしますが…。

Dokku Alternative触ってみる。

Dokku AlternativeというOSSを使うと、Dockerを利用して

herokuみたいなPaaSを作れるということなので試してみましたー。

Dokku Alternativeは本家のDokkuに色々と機能を追加したOSSみたいです。

 

参考URLはこちら↓

Dokku Alternative·個人用PaaSにどうぞ。Dokkuに便利な機能を追加 MOONGIFT

Herokuのように簡単に使えるDockerベースのPaaS | KRAY Inc

Dockerを使ったミニPaaSのdokkuをパワーアップさせた「Dokku Alternative」を試す – さくらのナレッジ

 

今回はまっさらなVMに入れてみます。

1. Ubuntuインスタンスを立ち上げる

今回はDigitalOceanで立ち上げました。

スペックはメモリ512MBの一番安いプランで、OSはUbuntu 14.04×64を選択。

Dokku-altはUbuntu 14.04 LTSにしか対応してないっぽいです。

dokku-ubuntu-digitalocean

立ち上げたら、セキュリティ系の諸々の初期設定をした後、スワップファイルの設定をしてください。

これをしないとメモリ不足でインストールがコケます。

設定したら、以下のコマンドでswap領域が有効になっているかを確認

/etc/fstabにも登録しておきます

2. Dokkuのインストール

インストールは超簡単で以下のコマンドを実行するだけ。

インストールが成功すると初期設定用のサーバが立ち上がるので

http://{サーバーのIP or ホスト名}:2000にアクセスして設定を行います。

dokku-setup

IPアドレスだとアプリに対してサブドメイン形式のURLをアサインできません。

DNSレコードを設定するか、hostsファイル弄るかでホスト名でアクセスできるようにすれば

サブドメイン形式({アプリ名}.{サーバーのホスト名})が利用できます。

公開鍵は、git pushするときのsshの秘密鍵に対応する公開鍵を入力すればOK。

設定はこれだけ!

3. アプリをpushしてみる。

あと、テキトーなアプリをpushすればデプロイできちゃいます。

デプロイすると、http://{アプリケーション名}.{2で指定したサーバのホスト名}のURLでアクセスできます。

 

アプリはdockerで動いているので、デプロイするとdockerのインスタンスが立ち上がっているのを確認できます。

サーバにリモートログインしてdokkuコマンドを叩くと、アプリの作成や削除、DBインスタンスの作成等

dokkuのアプリ設定を色々と弄れます。

4. 管理用コンテナを作成する

このままでもgit pushだけでデプロイできる素晴らしい環境なんですが

DBコンテナ作って既存のアプリに紐付けたり、既存のアプリを削除したりするには

CUIでの操作になるため、ちょっと面倒です。

幸いdokku-altには管理画面用のコンテナがあり、以下のdokkuコマンドでインストールできます。

インストールがうまくいくと、http://dam.{ホスト名}のURLで管理画面UIにアクセスできます。

最初はUserが居ないとエラー画面が表示されるので

サイドメニューのUsersの[Add User]ボタンから、適当にユーザを作成して、ログインを行います。

dokku-manager-first

dokku-adduser

ダッシュボードを開くと、ホストサーバが表示されているので、設定マークをクリックします。

※Deploy New Appは押しても何も起こりませんでした…。

dokku-dashboard

Sync Appsを押すと、既にデプロイされているアプリと管理アプリ自体のコンテナが表示されます。

dokku-hosts

ここでアプリケーションの追加・削除したりできます。

Deploy Git Appで任意のgitリポジトリからデプロイ出来そうな雰囲気ですが

鍵の設定がよくわからず、断念orz

dokku-gitapp

よく見ると、Webhookはこれから対応するような文言が見当たるのでCIとかにも対応しそうな感じ。

 

今回は先ほど作成したnodeアプリのコンテナにMongoDBのコンテナをつなげてみます。

まずは、Add DBからDBコンテナを作成します。

dokku-adddb

初回はDBコンテナのイメージを取得するせいか、Ajaxのタイムアウトエラーが出たんですが

その場合でもちゃんとコンテナが作成されていました。

DB用のコンテナ作成後は対象のアプリのリンクをクリックします。

dokku-dev1

Add DB Linkをクリックして先ほど作成したMongoDBのコンテナとリンクさせます。

dokku-addlink

これでNode.jsのアプリからMongoDBに接続することが可能になりました。

接続情報はサーバ側で以下のコマンドを叩くことで確認することが可能です。

(もしかしたらGUIでの方法もあるのかも)

接続情報をソースにベタ書きするのはアレなので、コンテナ内の環境変数にセットします。

Add Configからキーバリューで値をセットします。

dokku-setdbconfig

こんな感じになります。

dokku-aftersetdbconfig

あとはソースコードの修正をします。

まずはNode.jsからmongo叩くためにパッケージをインストール

こんな感じでindex.jsを修正

あとはgit pushすると新しいアプリが立ち上がって

WebアプリにアクセスするとMongoDBにレコードが差し込まれます。

コマンドラインからMongoDBにアクセスするには

でMongoDBの対象コンテナ(イメージ=ayufan/dokku-alt-mongodb)のIDを確認して

でコンテナのプライベートIPアドレスを取得。

あとはプライベートIPを使って、MongoDBに接続すればOK。

こんな感じでドキュメントを取得できます↓

5. SSLの設定

Dokku-altの管理画面ですが、デフォルトのままだと非SSLで

クレデンシャル晒している状態なのでSSL対応します。

今回は検証用ということで、オレオレ証明書で。

キー、証明書を作ったら dokkuコマンドで、管理用Webアプリに登録します。

keyを登録した時点でコンテナが再起動してSSLが有効になります。

その他注意点

以下のようにdokkuコマンドを使ってアプリ再起動したときには

dockerのコンテナは起動しているものの

フォワーディング(ホストOSのnginxで受け取ってコンテナにフォワーディング)の設定が

されないようで、アクセスしようとすると500エラーが返って来てしまいます。

この場合は、以下のコマンドでリビルドすれば、適切にフォワーディングされるようになりました。

 感想

dokkuはシングルホストなのでスケールしないし、可用性的に問題が有ったりするので

商用には厳しい感じですが、アプリを検証したりプロトタイプ作ったりするような

簡単な用途には有用な気がします。

DigitalOceanの$5/monthのプランでもそれなりに動いていますし。

herokuとかのPaaSに移行するとしてもremoteリポジトリ変えるだけなので楽ちんです。

ただしherokuと違ってスケジューラやone-offなコンテナはありません。

ホスト側自由にいじれるんで、どうしても使いたい場合はcronとかシェルで対応しちゃえばOKですw

Older posts

© 2018 freedom-man.com

Theme by Anders NorenUp ↑