mongodbのデータベースとユーザーを初期設定をdocker-composeでやってみた

mongodbのデータベースとユーザーを初期設定をdocker-composeでやってみました

使うイメージ
image: mongo

試行錯誤の結果、
docker-compose.ymlはこんな感じ

version: '2'
services:
  mongo:
    container_name: mongo
    image: mongo
    ports:
    - "27017:27017"
    volumes:
    - ./mongo/data:/data/db
    - ./mongo/init/:/docker-entrypoint-initdb.d/
    environment:
    - MONGO_INITDB_DATABASE=fluentd

MONGO_INITDB_DATABASEは、使うデータベース名を指定します
(mongoコンテナ内の /docker-entry.point に処理が書いてあります)

./mongo/data にmongodbのデータを永続化させます

./mongo/init/init.js に初期化のスクリプトをこんな感じで

var newUsers = [
  {
        user: 'logger',
        pwd: 'password',
        roles: [
            {
                role: 'readWrite',
                db: 'fluentd'
            }
        ]
    }
];

var currentUsers = db.getUsers();
if (currentUsers.length === newUsers.length) {
    quit();
}
db.dropAllUsers();

for (var i = 0, length = newUsers.length; i < length; ++i) {
    db.createUser(newUsers[i]);
}

参考: fluentd + MongoDB でログサーバー構築 - Qiita

これで、
$ docker-compose up -d
で起動

fluentdデータベースにloggerユーザーが書き込めるようになりました
docker runでもパラメータ渡してやれば出来ますが面倒なので、composeを使いました

fluentdの裏に置くための準備でやってみました

docker buildするとimageがnoneになる

phpのimageにNew relicを入れたのdocker imageをつくろうと

$ vim Dockerfile

FROM php:5-apache
RUN a2enmod rewrite
RUN apt-get update \ 
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libjpeg-dev libmcrypt-dev wget \
  && docker-php-ext-install pdo_mysql mysqli mbstring iconv mcrypt zip \ 
  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
  && docker-php-ext-install -j$(nproc) gd \ 
  && wget -O - https://download.newrelic.com/548C16BF.gpg | apt-key add - && \ 
    echo "deb http://apt.newrelic.com/debian/ newrelic non-free" > /etc/apt/sources.list.d/newrelic.list \
&&   apt-get -yq install newrelic-php5

$ docker build -t test .
とすると

$ docker images

REPOSITORY                     TAG                   IMAGE ID            CREATED             SIZE
<none>                         <none>                e1e4ef76e658        1 hour ago        440.3 MB

と、REPOSITORY、TAGがに..
しかたなく

$ docker tag e1e4ef76e658 test

とかして、使ってみましたが、Newrelicが入ってない..
Dockerfileをよくみると、リポジトリ追加後に、apt-get updateを忘れていました
追加して

$ vim Dockerfile

FROM php:5-apache
RUN a2enmod rewrite
RUN apt-get update \ 
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libjpeg-dev libmcrypt-dev wget \
  && docker-php-ext-install pdo_mysql mysqli mbstring iconv mcrypt zip \ 
  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
  && docker-php-ext-install -j$(nproc) gd \ 
  && wget -O - https://download.newrelic.com/548C16BF.gpg | apt-key add - && \ 
    echo "deb http://apt.newrelic.com/debian/ newrelic non-free" > /etc/apt/sources.list.d/newrelic.list

RUN apt-get update && \ 
    apt-get -yq install newrelic-php5

再ビルド
$ docker build -t test .

これで、ちゃんと名前がつくようになりました

Nginxでstat() failed (13: Permission denied)エラー

Centos7 + Nnginx 1.10.3 でerror.logを見てみると

2017/02/17 10:51:27 [crit] 17910#17910: *1 stat() "/home/user/sample/html/" failed (13: Permission denied), client: xxx.xxx.xxx.xxx, server: sample.com, request: "GET / HTTP/1.1", host: "sample.com", referrer: "https://sample.com"

といったエラーがたくさん..
ディレクトリのパーミッションを見てみても

$ ls -al /home/user/sample/html/

drwxrwxr-x 7 user nginx 4096  2月 16 12:10 .

な感じで問題なさそう

いろいろ調べるとNginxの公開ディレクトリを、ユーザーのホームディレクトリ内に作ってて

$ ls -al /home/user

drwx------ 1 user user 4096  2月 16 12:10 .

と、途中の実行権限がないのが原因らしい

$ chmod 701 /home/user

で実行権限を付与
解決しました

参考) nginx 403 forbidden error when server static file under user home directory

kindleタブレットで動くアプリ

amazon primeに入ってタブレットが割引されてたので、kindle fireを買いました
※ kindle paper whiteはアプリ使えないらしいです

Androidタブレットと違って、Google Play Storeでなく、Amazon アプリストアなのでないアプリもあります

実際は、開発元がAndroidで動くアプリを、Kindleでも動くようにして公開してあげればOKなのですが有名アプリじゃないとやってないところが多そうですね

動画系

有名どころの動画系はそろってます

ゲーム系

ゲームは別アカウントでできたりするので、役に立ったりするかも..

有名どころは抑えてる気がします