- 投稿日:2019-08-29T20:46:37+09:00
docker for macでinsecure registryを設定する
macOSのメニューバーにあるDockerアイコンから
Preferences...
を選択し、プリファレンスを表示します。Daemonタブの
Insecure registries:
に対象のサーバを追加します。最後に
Apply & Restart
ボタンをクリックして適用します。
- 投稿日:2019-08-29T18:48:08+09:00
Docker For Macが遅い:対策の実験
前回のまとめた資料から実際テストしてみた内容をまとめてみました。(人^─^)会社のLaravelプロジェクトのdockerの開発環境で試してました。
問題になりそうなところ
先ずdocker-compose.ymlを分析して同期する対象を決めてみました。
docker-composer.ymlversion: '2' services: mysqldata: <- *1 image: busybox volumes: - ./docker/mysql/storage:/var/lib/mysql mysql: build: ./docker/mysql volumes_from: - mysqldata <- *1 ports: - ${DOCKER_NUM}4306:3306 environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=app_db php: container_name: web_php build: ./docker/php ports: - ${DOCKER_NUM}8888:80 - ${DOCKER_NUM}443:443 volumes: - .:/var/www/html <- *2 links: - mysql smtp: image: phpdockerio/mailhog:latest ports: - ${DOCKER_NUM}1025:1025 - ${DOCKER_NUM}8025:8025「*1」 : DBA
DBのファイルをDocker化する場合はvolumesが適切かと思います。SyncするとDatabaseファイルの構成上、大変なことになると思います。
Docker for Macの場合はvolumesが遅いのでMacに直接にインストールしてDockerから接続するか、Docker化するがvolumnsはしない(DB内容はDBAに接続してみるかDockerの中に入ってみる)と思います。
「*2 」: 今回はこれだけdocker-syncの対象にしてみいます。
現在の速度
Top画面を表示してみました。全体的に遅い(google developer toolsでみると20秒以上)です。特にHtml(DB関連かな)が遅いですね。Σ(´Д`)ハッ!!
100Mのファイルを作成します。Docker内部で実行します。
# time dd if=/dev/zero of=speedtest bs=1024 count=102400 102400+0 records in 102400+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 86.2196 s, 1.2 MB/s real 1m26.162s user 0m1.110s sys 0m8.190sウヒャ━━ヽ(゚Д゚)ノ━━!!
では、docker-syncを利用して同期してみましょう。
同期するように変更
先ず、docker-syncをインストール
# gem install docker-sync Fetching: thor-0.20.3.gem (100%) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.つ〜〜 ( ´з`)・∵.ブッ
# sudo gem install docker-sync次は監視するための物ですが、今回は使ってません。
# brew install fswatch自分のPCはrsyncがインストールされているので、省略します。(´∀`*)ウフフ
実際、テストしてみると大きく同期なのでファイルの権限的な部分の問題が多かったので他のファイルも一部修正しました。
docker-sync.ymlversion: '2' syncs: document-root: sync_strategy: rsync notify_terminal: true sync_host_ip: 'auto' sync_host_port: 10872 sync_excludes: [ '.git', '.idea', 'vendor', 'docker', '*.yml' ] sync_args: '-v' src: ./ sync_userid: '33'「sync_userid」についてはContainerのユーザー番号です。
docker-composer.ymlversion: '2' services: mysqldata: image: busybox mysql: build: ./docker/mysql ports: - ${DOCKER_NUM}4306:3306 environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=app_db php: container_name: web_php build: ./docker/php ports: - ${DOCKER_NUM}8888:80 - ${DOCKER_NUM}443:443 environment: - APACHE_RUN_USER=www-data - APACHE_RUN_GROUP=www-data volumes: - document-root:/var/www/html links: - mysql smtp: image: phpdockerio/mailhog:latest ports: - ${DOCKER_NUM}1025:1025 - ${DOCKER_NUM}8025:8025 volumes: document-root: external: true修正後の速度
DBを同期&マウントしてないので、「初期のデータベースを更新」が比較的に早い(25分くらい)ですね。キタ━━(p゚∀゚q)━━!!
では、100Mのファイルを作成します。
# time dd if=/dev/zero of=speedtest bs=1024 count=102400 # time dd if=/dev/zero of=speedtest bs=1024 count=102400 102400+0 records in 102400+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 1.41639 s, 74.0 MB/s real 0m1.432s user 0m0.140s sys 0m1.240s同じくTop画面を表示してみました。全体的に2秒くらいで画面が表示されました。♪(´ε` )
課題&疑問点
- ログファイルやコンテイナーのファイルを見るのが面倒で、速度に問題がないまま共有する方法が必要かと思います。
- 結局DBの問題ではないのか?DB以外はマウント(volumes)を利用しても使えるレベルではないか? 検証しないとわかりません。(;´v_v)ゞ
- 次回は「CE 17.12 (edge) 」を試してみましょう!! -> 初期状態の「docker-composer.yml」で試してみました。結果としては4・5秒くらいでTop画面が表示されました(DBの使用頻度にもよると思います)。テストはできるレベルですね。
- 投稿日:2019-08-29T17:55:39+09:00
Docker For Macが遅い
「クソみたいに遅いじゃん。」自分の経験ではないですが、今後の為に資料を調査して理由・対応方法を咲くってみました。
遅い理由
結論としては「Docker For Mac」がosxfsを採用している。あ!!それよりosxfsがOSXのFSEvents APIとLinux’s inotify APIをマッピングさせているのが原因です。
参考:https://forums.docker.com/t/file-access-in-mounted-volumes-extremely-slow-cpu-bound/8076/158
- osxfsの throughput は250 MB/s -> これはほとんどのAPPで問題にならないはず
- コンテナ内からosxfsに対するファイルIOのシステムコールはlatencyが遅い。書き込み時で200μs -> 通常のファイルシステムであれば under 10μs(クソやられた感じ)
対応方法
じゃ、簡単!!「Docker For Mac」を使えなければ良い。( ゚Д゚)ヴォケ!!
VirtualBoxを利用
docker-machineでVirtualBox上に立ち上げたdocker環境で開発環境を構築する。うん、面倒だ〜〜〜(;^ω^)
Docker For Macを使わない
CE 17.12 (edge) チャンネルを使うこと。(・д・)チッ
参考:https://blog.hanhans.net/2017/05/10/docker-user-guided-caching/
コンテイナ間を爆速で同期する
例としてはdocker-syncをおすすめします。rsyncで設定が簡単かな。
対策の実験
- 投稿日:2019-08-29T17:42:29+09:00
Dockerを使ってWebサイトをSSL化
目的
DockerとLet's EncryptをつかってWebサイトをSSL化させる。
前提条件
ドメインの取得して名前解決できること。
本構成イメージ
順番はあまり関係ないが、⑤は最後に行う。
①exampleexpressイメージ作成
app.jsvar express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(3000, function () { console.log('Example app listening on port 3000!'); });packages.json{ "name": "exampleexpress", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.14.0" } }DockerfileFROM node:onbuild EXPOSE 3000 CMD node app.js以下のコマンドでイメージを作成する。
docker build -t exampleexpress .②証明書を発行
以下のコマンドを実行
export LETSENCRYPT_EMAIL=<youremailaddress> export DNSNAME=www.example.com docker run --rm \ -p 443:443 -p 80:80 --name letsencrypt \ -v "/etc/letsencrypt:/etc/letsencrypt" \ -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \ quay.io/letsencrypt/letsencrypt:latest \ certonly -n -m $LETSENCRYPT_EMAIL -d $DNSNAME --standalone --agree-tos③expressnginxイメージを作成
nginx.confuser nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /dev/stdout main; sendfile on; keepalive_timeout 65; server { listen 80; server_name _; return 301 https://$host$request_uri; } server { listen 443 ssl; #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location ^~ /.well-known/ { root /usr/share/nginx/html; allow all; } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://expresshelloworld:3000; } } }DockerfileFROM nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf以下のコマンドを実行
docker build -t expressnginx .④ネットワーク作成
以下のコマンドを実行
docker network create -d bridge expressnet
⑤Webサーバを動かす
以下のコマンドを実行
docker run -d \ --name expresshelloworld --net expressnet exampleexpress docker run -d -p 80:80 -p 443:443 \ --name expressnginx --net expressnet \ -v /etc/letsencrypt:/etc/letsencrypt \ -v /usr/share/nginx/html:/usr/share/nginx/html \ expressnginxその他
証明書の更新
以下のコマンドを実行export LETSENCRYPT_EMAIL=me@example.com export DNSNAME=www.example.com docker run --rm --name letsencrypt \ -v "/etc/letsencrypt:/etc/letsencrypt" \ -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \ -v "/usr/share/nginx/html:/usr/share/nginx/html" \ quay.io/letsencrypt/letsencrypt:latest \ certonly -n --webroot -w /usr/share/nginx/html -d $DNSNAME --agree-tos
- 投稿日:2019-08-29T17:37:04+09:00
Docker for Windows の問題
Docker for Windows はいくつかの問題を抱えている。
どうしてもDockerしたいなら、LinuxのVMを立てるか、一部Docker+Docker以外運用にするか。volumeしたディレクトリはオーナーがrootになりchownが効かない
MongoDBやSubversionなど、永続化(volume/マウント)するべきデータディレクトリのオーナーがrootだと起動できないアプリケーションは多い。
しかしDocker for windowsでは、volumeしたディレクトリはなぜかroot所有になり、chownも効かない。Dockerを終了したときにデータも消える、という運用しかできない。
参考: https://github.com/moby/moby/issues/35665
共有しているディレクトリをvolumeすると、データは永続するがなぜか見えない
見出しの通り、Dockerとしては問題なく永続使用できるが、エクスプローラから見えなくなる。
原因不明..
Windowsを再起動するとvolumeが効かないことがある
こちらも原因不明。データは残っているしアプリケーションは動くが、マウント出来ていないことがたまにある。
しかしdocker restartコマンドを実行すると解決する。
- 投稿日:2019-08-29T15:56:55+09:00
Docker監視用のZabbix Agent
以前、会社のシステムをDocker化する際にZabbix Agentのために「monitoringartist/dockbix-agent-xxl-limited」を利用していました。参考元:https://team-6.hatenablog.jp/entry/2017/08/11/220510
一ヶ月くらいテスト期間が終わり運営を初めて間も無く急に以下のエラーがで動かなくなってしましました。
Freeware licence - Usage of this binary is restricted to official monitoringartist Docker images only.提供しているサイトにその理由が書いておりました。
参考元:https://github.com/monitoringartist/dockbix-agent-xxl
一ヶ月くらいはなんで動いたのかと思いましたが、先ずは対応が優先なので色々検索して見ましたがほとんどが同じ製品を使う例かDockerにZabbixサーバーを入れて利用する内容でした。
検索をしても「monitoringartist/dockbix-agent-xxl-limited」を利用して監視する内容ばかりでした。もうちょっと頑張って検索したらOSが違いますが、基本的にはLinux(CentOs)なので試して以下のURLの内容を参考で実行しました。
参考元:https://qiita.com/_BSmile_/items/5fe13bb6305de8f98ccd
お〜上手くいっている!!
.....エラー
だが、こちらの内容では以下のDockerログように起動されないです。
cannot load module "zabbix_module_docker.so": /usr/lib/modules-load.d/zabbix_module_docker.so: invalid ELF header参考元で利用している
モジュールは既になくなったので、モジュールは以下のところでDebian8をダウンロードしました。(注意:ダウンロードのリンク次第が一度リダイレクトされるのでHtmlを開いて元のURLを利用してダウンロード)https://github.com/monitoringartist/zabbix-docker-monitoring
参考元通りに実装したログを分析したら参考元でCoreOs用のZabbixAgent(こちら) が古すぎるのが原因そうでした。
対策
先ず、docker-zabbix-coreos/etc/zabbix/(*1)をクロンしておく。
その後、以下のURL(Agentが3.0を想定)から該当するもの「zabbix-agent_3.0.18-1%2Bjessie_amd64.deb」をダウンロードして「files/zabbix-agent_2.2.7+dfsg-1.1_amd64.deb」の代わりに利用する。
Dockerfileの「zabbix-agent_2.2.7+dfsg-1.1_amd64.deb」ファイル名をダウンロードしたファイル名「zabbix-agent_3.0.18-1+jessie_amd64.deb」に変更する。
これでOKでした。「monitoringartist/dockbix-agent-xxl-limited」と同じことが出来ました。
FROM debian:jessie MAINTAINER kugyon.i <fatty.rabbit.75@gmail.com> ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && \ apt-get -y install locales && \ dpkg-reconfigure locales && \ locale-gen C.UTF-8 && \ /usr/sbin/update-locale LANG=C.UTF-8 && \ echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && \ locale-gen ENV LC_ALL C.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US.UTF-8 ENV TERM xterm RUN apt-get -y install \ ucf \ procps \ iproute \ supervisor COPY etc/supervisor/ /etc/supervisor/ RUN apt-get -y install --no-install-recommends \ curl \ jq \ libcurl3-gnutls \ libldap-2.4-2 \ netcat-openbsd \ pciutils \ sudo COPY files/zabbix-agent_3.0.18-1+jessie_amd64.deb /root/ RUN dpkg -i /root/zabbix-agent_3.0.18-1+jessie_amd64.deb COPY etc/zabbix/ /etc/zabbix/ RUN mkdir -p /var/lib/zabbix && \ chmod 700 /var/lib/zabbix && \ chown zabbix:zabbix /var/lib/zabbix && \ usermod -d /var/lib/zabbix zabbix && \ usermod -a -G adm zabbix COPY etc/sudoers.d/zabbix etc/sudoers.d/zabbix RUN chmod 400 /etc/sudoers.d/zabbix RUN apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN curl -k -o /usr/lib/modules-load.d/zabbix_module_docker.so -O https://raw.githubusercontent.com/monitoringartist/zabbix-docker-monitoring/gh-pages/debian8/3.0/zabbix_module_docker.so RUN echo 'LoadModulePath=/usr/lib/modules-load.d/' > /etc/zabbix/zabbix_agentd.conf.d/docker-module.conf RUN echo 'LoadModulePath=/usr/lib/modules-load.d/' >> /etc/zabbix/zabbix_agentd.conf.d/docker-module.conf RUN echo 'LoadModule=zabbix_module_docker.so' >> /etc/zabbix/zabbix_agentd.conf.d/docker-module.conf RUN echo 'AllowRoot=1' >> /etc/zabbix/zabbix_agentd.conf.d/docker-module.conf COPY entrypoint.sh / RUN chmod +x /entrypoint.sh EXPOSE 10050 ENTRYPOINT ["/entrypoint.sh"]
- 投稿日:2019-08-29T15:27:51+09:00
ECS FargateでRails動かそうとして2ヶ月かかって手元に残ったもの【3.Fargate編】
弊社の基幹システムをVPSからAWSに移行するにあたって、まずはrailsを動かしてみる、という段階で無事に死にました☆
今後のための備忘録です。前記事:ECS FargateでRails動かそうとして2ヶ月かかって手元に残ったもの【2.Build編】
前回まででやったこと
今回やったこと
今回はいよいよコンテナをfargteで動かして、ALBも用いて公開してみようと思います。
VPC
RDS
- エンジンのタイプはmysqlで設定して、バージョンも合わせます。
- データベースの承認情報は
docker-compose
ファイルなどで設定した環境変数と合わせます。- VPCはデフォルトのもの、セキュリティグループはデフォルトを消して新規作成します。
ALB
「サービス」 → 「ES2」 → 「ロードバランサー」を選ぶ。
IAM
ECSのアクセス権限を設定します。
「サービス」 → 「IAM」 → 「ロール」 → 検索ボックスに「ecs」と入力して、「ecsTaskExecutionRole」を選択ECS
「サービス」 → 「ECS」
タスク定義
「コンテナの追加」がポイントになります。
ECRで設定した「web」と「server」のリポジトリをそれぞれ指定します。クラスター
サービス
VPCを設定します。(点線部上)
次にロードバランサーも設定します。
これでサービスを動かせば、ひとまず設定は完了です。
起動確認
「サービス」 → 「EC2」 → 「ロードバランサー」 を選択して下部のメニューにアドレスがあるのでそこからコピペしましょう。
最後に
私自身、手探りで2ヶ月かかって、やっと起動にこぎつけました。
まだまだ設定が十分でない部分はあると思います。
今後も自分自身の備忘録として、更新を続けていきたいと思います。ここまでできたこと
次記事:S3編。。。?
- 投稿日:2019-08-29T15:26:23+09:00
Docker+Vue.js+Vuetify環境構築
この記事について
VSCodeのRemoteを使って、Dockerコンテナー内に、Vue.js+Vuetify環境を構築するためのメモです。
対象
- VSCodeはある程度使い慣れている
- VSCodeのRemote container拡張機能は使った事がある
dockerfile作成
EXPOSE 9000でポート指定をする事を忘れないように。
最悪コピペでもOKdockerfileFROM node:lts WORKDIR /app RUN npm install -g npm && \ npm install -g @vue/cli EXPOSE 9000 CMD ["/bin/sh"]dockerビルド
VSCode Remote Containerを使用して、ビルドを行う。
Vue-Cliインストール
shell$ npm install -g @vue/cliVueプロジェクト作成
コマンドを叩いた後に、途中で選択肢が出るので、
default
とUse NPM
を選択shell$ vue create sandbox > default (babel, eslint) > Use NPMVSCode RemoteでPORT設定
Forewd Port from Containerを選択し、
8080
を入力Vueの動作確認
shell$ cd sandbox $ npm run serveコマンドを叩いた後に、
localhost
にアクセス
http://localhost:8080/studio動作確認できたら、
ctrl+c
で一旦終了。Vuetify インストール
コマンドを叩いた後に、選択肢があるので
Default (recommended)
を選択shell$ vue add vuetify > Default (recommended)
- 投稿日:2019-08-29T15:26:23+09:00
GitHub PagesにDocker+Vue.js+Vuetifyでページを公開
この記事について
VSCodeのRemoteを使って、Dockerコンテナー内に、Vue.js+Vuetify環境を構築するためのメモです。
対象
- VSCodeはある程度使い慣れている
- VSCodeのRemote container拡張機能は使った事がある
dockerfile作成
EXPOSE 8080でポート指定をする事を忘れないように。
最悪コピペでもOKdockerfileFROM node:lts WORKDIR /app RUN npm install -g npm && \ npm install -g @vue/cli EXPOSE 8080 CMD ["/bin/sh"]dockerビルド
VSCode Remote Containerを使用して、ビルドを行う。
Vue-Cliインストール
shell$ npm install -g @vue/cliVueプロジェクト作成
カレントディレクトリにvueプロジェクトを作成する
コマンドを叩いた後に、途中で選択肢が出るので、
yes
>default
>Use NPM
を選択shell$ vue create . > Y > default (babel, eslint) > Use NPMVSCode RemoteでPORT設定
Forewd Port from Containerを選択し、
8080
を入力Vueの動作確認
shell$ npm run serve
コマンドを叩いた後に、
localhost
にアクセス
http://localhost:8080/studio動作確認できたら、
ctrl+c
で一旦終了。Vuetify インストール
コマンドを叩いた後に、選択肢があるので
Default (recommended)
を選択shell$ vue add vuetify > Default (recommended)ビルドディレクトリ変更
/node_modules/@vue/cli-service/lib/options.js
options.js<省略> exports.defaults = () => ({ // project deployment base publicPath: '', // for compatibility concern. TODO: remove in v4. baseUrl: '', // where to output built files // outputDir: 'dist', outputDir: 'docs', assetsPublicPath: '', // where to put static assets (js/css/img/font/...) assetsDir: '', // filename for index.html (relative to outputDir) indexPath: 'index.html',ビルド
docsディレクトリにビルドされたファイルが格納されるので、そのままGitHub Pagesにデプロイできます。
shell$ npm run build
Vue routerを入れる
shell$ vue add router
- 投稿日:2019-08-29T12:14:35+09:00
phpの開発環境用のdocker-compose
fattyrabbit/php-fpmを利用したローカル開発環境のdocker-compose全体ソース:https://bitbucket.org/FattyRabbit/php-dev-docker-compose/src/master/
概要:phpの開発(laravelの開発用)のためにlocal環境を作成する目的で、以下を目指しました。
- 出来る限り軽い
- 他のバージョンのPhpを同時に動かす
それで選択したのが「nginx」+「php-fpm」の構成しました。
php-fpmのカスタマイズ
元になるphpのfpmは問題点としてListenポートが「9000」固定で複数のfpmを同時に利用できないところが問題でした。その為にphpのfpm(まずは7.3)のDockerfileを改善してContainerを実行する際にポートを設定出来るように修正を加えました。
改善したphp-fpmのソース:
https://bitbucket.org/dockerfile_test/php-fpm/src/master/nginx
何回かテスト中に問題として出たのがサーバーの設定ファイルの修正があった場合、Dockerfile内でCOPYを利用すると再Buildしても上手く更新されない場合がありましたので、サーバーの管理をvolumesで管理するように設定しました。
これでDockerの再起動や中のデモンの再起動でも設定の変更が反映されるようになりました。docker-compose.xmlproxy: build: nginx container_name: proxy build: context: . dockerfile: docker-nginx/Dockerfile volumes: - ./etc/logs/nginx:/etc/nginx/logs - ./etc/nginx/conf.d:/etc/nginx/conf.d - ./etc/nginx/letsencrypt:/etc/letsencrypt - ./www:/var/www/ ports: - 80:80 - 443:443php-fpm
このではListenのポートを「9001」にしてみました。
docker-compose.xmlphp-7.3: build: context: . dockerfile: docker-php-7.3/Dockerfile args: LISTEN_PORT: 9001 container_name: php-7.3 volumes: - ./www:/var/www/ - ./etc/php/php.ini:/usr/local/etc/php/php.ininginxの設定
実際のウェブサーバーでphpを利用する設定です。
/etc/nginx/conf.d/default.conflocation ~ \.php$ { fastcgi_pass php-7.3:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
- 投稿日:2019-08-29T10:37:50+09:00
docker runしたら「no matching manifest for windows/amd64 10.0.18362 in the manifest list entries.」と出る
環境
- Windows10
- Docker for Windows
エラー
PS C:\> docker run nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx C:\Program Files\Docker\Docker\Resources\bin\docker.exe: no matching manifest for windows/amd64 10.0.18362 in the manifest list entries.対処方法
Settingで
"experimental": true
を定義して、Apply
experimentalは実験とか検証とかそういう意味みたいですね。
- 投稿日:2019-08-29T10:25:54+09:00
「gawkで基本統計量を計算する」をdockerで
gawkで基本統計量を計算する
https://qiita.com/EjiriAkira/items/e92e919bb9ee1c52b7aeをdockerで利用してみた。
それだけでは芸がない。自分のデータで分析もしてみる。
スクリプトの1つが、ファイル名固定になっているのに手を入れ、ファイル入力する方式にした。
bas.sh#!/bin/bash # https://qiita.com/EjiriAkira/items/e92e919bb9ee1c52b7ae # https://qiita.com/kaizen_nagoya/items/c362cb343a412fe12d46 . ./basic_statistics.sh IFS=',' read n min max med ave sum svar uvar ssd usd skew kurt text <<< $(calc_basic_statistics $1) echo "==============================" printf "n = %d\n" ${n} printf "min = %G\n" ${min} printf "max = %G\n" ${max} printf "med = %G\n" ${med} printf "ave = %G\n" ${ave} printf "sum = %G\n" ${sum} printf "svar = %G\n" ${svar} printf "uvar = %G\n" ${uvar} printf "ssd = %G\n" ${ssd} printf "usd = %G\n" ${usd} printf "skew = %G\n" ${skew} printf "kurt = %G\n" ${kurt} echo "==============================" printf "${text}" echo "==============================" echo -n -e "${text}"上記ファイルで$1のところ。
データは自分のqiitaの書き込みの20件ごとのいいねの数の分布を用いた。
d50.txt14 5 6 15 13 6 8 9 8 6 8 9 12 15 14 13 10 15 11 7 15 12 10 10 6 9 9 8 6 4 6 6 11 8 14 15 12 14 10 10 5 8 12 12 15 11 11 7 14 1225までのデータ、12までのデータファイルも用意。
# ./bas.sh d12.txt ============================== n = 12 min = 5 max = 15 med = 8 ave = 8.91667 sum = 107 svar = 10.2431 uvar = 11.1742 ssd = 3.20048 usd = 3.34279 skew = 0.840341 kurt = -0.537908 ============================== n=12 min=5 max=15 med=8 ave=8.91667 sum=107 svar=10.2431 uvar=11.1742 ssd=3.20048 usd=3.34279 skew=0.840341 kurt=-0.537908 ============================== n=12 min=5 max=15 med=8 ave=8.91667 sum=107 svar=10.2431 uvar=11.1742 ssd=3.20048 usd=3.34279 skew=0.840341 kurt=-0.537908 # ./bas.sh d25.txt ============================== n = 25 min = 5 max = 15 med = 10 ave = 10.28 sum = 257 svar = 10.7616 uvar = 11.21 ssd = 3.28049 usd = 3.34813 skew = 0.0464061 kurt = -1.36321 ============================== n=25 min=5 max=15 med=10 ave=10.28 sum=257 svar=10.7616 uvar=11.21 ssd=3.28049 usd=3.34813 skew=0.0464061 kurt=-1.36321 ============================== n=25 min=5 max=15 med=10 ave=10.28 sum=257 svar=10.7616 uvar=11.21 ssd=3.28049 usd=3.34813 skew=0.0464061 kurt=-1.36321 # ./bas.sh d50.txt ============================== n = 50 min = 4 max = 15 med = 10 ave = 10.12 sum = 506 svar = 10.3856 uvar = 10.5976 ssd = 3.22267 usd = 3.25539 skew = -0.0191191 kurt = -1.16719 ============================== n=50 min=4 max=15 med=10 ave=10.12 sum=506 svar=10.3856 uvar=10.5976 ssd=3.22267 usd=3.25539 skew=-0.0191191 kurt=-1.16719 ============================== n=50 min=4 max=15 med=10 ave=10.12 sum=506 svar=10.3856 uvar=10.5976 ssd=3.22267 usd=3.25539 skew=-0.0191191 kurt=-1.16719docker
起動は
$ docker run -it kaizenjapan/gawk -bin/bashで利用できる。dockerに入ったら、
docker/ubuntu# cd /home/awkExcelとの比較
エクセルでの結果は
50 25 12 14 5 6 15 13 6 8 9 8 6 8 9 12 15 14 13 10 15 11 7 15 12 10 10 6 9 14 9 5 8 6 6 15 4 13 6 6 6 8 11 9 8 8 14 6 15 8 12 9 14 12 10 15 14 10 14 5 5 13 6 8 10 15 12 15 13 12 11 6 15 7 8 11 15 9 11 12 8 7 10 6 14 10 8 12 6 9 合計 506 合計 257 合計 107 平均 10.12 平均 10.28 平均 8.916666667 範囲 11 範囲 10 範囲 10 最小 4 最小 5 最小 5 最大 15 最大 15 最大 15 標準誤差 0.45575432 標準誤差 0.656097554 標準誤差 0.923898243 中央値 10 中央値 10 中央値 8 最頻値 6 最頻値 6 最頻値 6 標準偏差 3.222669701 標準偏差 3.280487769 標準偏差 3.200477395 分散 10.3856 分散 10.7616 分散 10.24305556 尖度 -1.167191039 尖度 -1.36321223 尖度 -0.537907774 歪度 -0.01911908 歪度 0.046406059 歪度 0.840341472 元資料に記載がみあたらない計算式は
範囲 =MAX(B1:B50)-MIN(B1:B50)
標準誤差 =STDEVP(B1:B50)/SQRT(COUNT(B1:B50))考察
記事のいいねがついている数の範囲にぶれがあまりない。20づつのまとまりごとに、12、25、50を比べているから見えた現象の可能性がある。まとまりを変えると違う現象が見えてくるかもしれない。
6から9がつづいたり、10以上がつづいたりのぶれがあり、この周期による影響もあるかもしれない。
いいねがついた記事を先に追記するため、いいねがつかなかった記事はなかなか良くならないという傾向がある。
100viewsでいいねがついていない記事は追記するようにしている。
いいねがついた記事への追記を優先させているかもしれない。平均より中央値が低く、最頻値がもっと低いのは、ときどき突出した数値を叩き出すものがある分類によくある現象。
Qiita(6)行動分類
https://qiita.com/kaizen_nagoya/items/dc683fc6c054e3c187df
Qiita(7)投稿
https://qiita.com/kaizen_nagoya/items/456b8d0d27806543615b
Qiita(8)週5回の確認作業の流れ
https://qiita.com/kaizen_nagoya/items/592e5eed915fbbc3e0ff
Qiita(11)「Qiitaいいな〜自分のいいね分析」自分版
https://qiita.com/kaizen_nagoya/items/11955909b0302d9ba999
Qiita(13)なぜ少しづつQiitaの記事を追記しているか
https://qiita.com/kaizen_nagoya/items/fa8b102a92d094437416Qiita(16)Qiita記事 いいね と views の関係
https://qiita.com/kaizen_nagoya/items/d30240b2a9adec288caQiita(18)記事を書くときに注意していること
https://qiita.com/kaizen_nagoya/items/3a6e08309231aa05fb27
Qiita(23)書きかけの項目の一覧を書きかけ
https://qiita.com/kaizen_nagoya/items/45db8672c1081c1e78e1Qiita(27)views一覧を作るまで(第一日目)
https://qiita.com/kaizen_nagoya/items/7de46ac898e776834605Qiita(35) Qiita: いいね, follow, follower, ストック, views
https://qiita.com/kaizen_nagoya/items/1f0c56ebd05c5495f72e参考資料
エクセルでの標準誤差の計算方法
http://www.ipc.shimane-u.ac.jp/food/kobayasi/se_excel.html=stdev(データ範囲)/sqrt(count(データ範囲))
標準誤差の計算
http://hp.brs.nihon-u.ac.jp/~kaki/dat_arr_xls_se.html=stdevp(データ範囲)/sqrt(count(データ範囲))
【Excel】エクセルで標準誤差を計算する方法 標準誤差と標準偏差との違い
http://kenkou888.com/category13/excel_hyoujungosa.htmlデータそのものの標準偏差を求めるために、STDEVP関数を使用します。なお、STDEV関数やSTDEV.S関数は標本から母集団の標準偏差を予想するときにします。
#文書履歴(document history)
ver. 0.01 初稿 20180829 朝
ver. 0.02 追記 20180829 午前
ver. 0.03 考察追記 20180829 午後
https://b.hatena.ne.jp/guide/bbutton