読者です 読者をやめる 読者になる 読者になる

iyuichiの私的開発ログ

渋谷で働くWebエンジニアのログ. Java, Android, iOS, Docker, GCP, AWS, ゲーム開発

CentOS7上でNodeをDockerで動かす ~ コンテナbuild時に名前解決ができない時にしたこと

開発 Docker nodejs

docker composerを使ってnode.jsのコンテナをビルドしようとしたら結構はまったのでメモ。

環境としては、
ホスト: CentOS Linux release 7.2.1511 (Core)

$ docker version
Client:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Wed Apr 27 00:34:42 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Wed Apr 27 00:34:42 2016
 OS/Arch:      linux/amd64

$ docker-compose --version
docker-compose version 1.7.1, build 0a9ab35

こんな感じです。

コンテナのイメージはDocker Hubにあるものを利用します。
https://hub.docker.com/_/node/
onbuildというイメージをベースに使うとnpm installしてnpm startしてくれるみたいなのでこれを使ってみることにしました。

Dockerfileには1行だけ記述してpackage.jsonと同じディレクトリに置きます。

FROM node:6-onbuild

docker composerも使うので、docker-composer.ymlを以下のように記述。
nodeappの下にDockerfileとpackage.jsonがあります。

version: '2'
services:
  node-app:
    build: ./nodeapp
    image: node-app:20160616

ファイルの構成としてはこんな感じ。

├── docker-compose.yml
└── nodeapp
    ├── Dockerfile
    ├── README.md
    ├── app.js
    └── package.json

これでdocker-compose up すればうまくいくはず!だったんですがnpm installでリポジトリが見つからずbuildのところで失敗。
DNSが引けてないんだろうというところまではすぐあたりがつきましたがその解決方法をググってやってみてもなかなかうまくいかず、はまりポイント。

自分の環境では、/etc/sysconfig/docker とか /etc/default/docker といったファイルがなく、
それぞれファイルを作って

DOCKER_OPTS="--dns 8.8.8.8"
OPTIONS="--dns 8.8.8.8"

なんて書いてdockerのサービスを再起動してみても状況が変わらず。

自分の環境でうまくいったのは、/usr/lib/systemd/system/docker.service を以下のように変更

ExecStart=/usr/bin/docker daemon -H fd:// 
↓
ExecStart=/usr/bin/docker daemon -H fd:// -dns=8.8.8.8

その後以下のようにデーモンの再読み込みとDockerのサービスを再起動をして解決!

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

とりあえずうまくいってよかった。

Slack APIで画像ファイルをアップロードする

開発

Botkitを使ってボットを作っていました。
ボットでチャンネルに常駐してBuild successというメッセージがきたら

  • ダウンロードリンクを取得
  • QRコードの画像ファイルを作成
  • 作成した画像ファイルをSlackに投稿

だいたいこんなことをやりたいボットです。

QRコードを作るのは簡単で以下のモジュールを使ってすぐに実装できました。
GitHub - soldair/node-qrcode: node js server side qr code generator utilizing node-canvas

使い方はこんな感じ。

        var QRCode = require('qrcode');
        QRCode.save('./qr.png' , 'http://google.com', function(err){
            if(err){
                console.log(err);
            }
        });

さて作成した画像をslackに投稿したいのですが、ここでハマりました。。
少しググったら以下の記事を見つけたので同様に試してみたのですが、どうも画像ファイルがtext/plainとして認識されてしまい文字化けしたような意味不明のファイルが投稿されてしまいます。

qiita.com

それで以下のAPIドキュメントを参考にしつつnodeのrequestモジュールを使って色々試行錯誤の沼に。。
files.upload method | Slack

だいぶ色々試して時間かかったのですが、
結論、以下の方法でできました。

slack apiで画像ファイルをアップロードする

追記

このプルリクがマージされるとBotkitだけで普通にアップロードできるようになりそうな。
Added multi-part file upload to files.upload by olirogers · Pull Request #112 · howdyai/botkit · GitHub


What Is Node?

What Is Node?

SonyのSmartEyeglass

iyuichi.hatenablog.jp

これちゃんと開発進んでいるんだろうか?気になる。

developer.sonymobile.com

HerokuのFree Dynoの仕様が変わってた

development 開発 heroku

ちょうど1年ほど前に変更になって以下の記事を書いていました。
1日に18時間までの制限がボットとかには少し使いづらい仕様でした。

iyuichi.hatenablog.jp

それがFree SSLと共に発表されていましたが、Flexible Free Dynoというものに変わった模様。
blog.heroku.com

クレジットカード登録していれば月に1000dyno hoursがアカウント単位で割り振られて、この範囲内であれば無料で使えますよということのようです。(登録していない場合は550 free dyno hours)

24時間動かすような複数のプロジェクトを1アカウントで管理している場合は要注意!

ということで皆さん確認しておきましょう。

Heroku: Up and Running

Heroku: Up and Running

LINEがとうとう上場か

www.nikkei.com

旬を過ぎてしまった感はあるものの大型の上場であることは間違いないですね。
市場から資金を調達してどのような事業展開を見せるのか?

本業のメッセージアプリはアジアを中心にシェアを持っているが、これからは他社のサービスから移ってもらえないと伸びは鈍化必至。

www.nikkei.com

上場企業としてはこういうところちゃんとしないとね!

プロジェクトマネージメントとは?

brevis.exblog.jp

プロジェクトとは、

  • 目的
  • 制約条件(期限、予算など)

があって、その計画、および遂行をすること。

そして、そのマネージメントをするということは、
制約条件の中で生み出せる価値を最大化すること。

そんなことを上記の記事を読んで改めて考えた。

はじめてのプロジェクトマネジメント 日経文庫

はじめてのプロジェクトマネジメント 日経文庫

GitHubの価格体系が変わってた!

github 開発 development

github.com

個人ユーザに対しては完全に値下げになりました。
$7/monthでプライベートリポジトリも作り放題。

Organizationだと小規模な開発だったらプライベートリポジトリに制限がなくなった分お得ですが、
今までと同じ最低料金の$25だと5ユーザまでで、追加は$9/monthとなります。
5ユーザはなかなか厳しい。