この先インストールスクリプトなども書きたいが…その時の最新の方法でやりたい思いもあり、.bashrcなどはbrewで入れるものもあるので、ansibleとか、ローカル環境プロビジョニングツール導入の方がいいのでしょうか、ううむ
明日はdockerfile 明後日はpythonパッケージをやりたい
pip コマンドスタイル
pip install -e "git+ssh://git@github.com/hoge/fuga.git#egg=hoge.piyo&subdirectory=hoge.poko"
requirements.txt スタイル
-e git+ssh://git@github.com/hoge/fuga.git#egg=hoge.piyo&subdirectory=hoge.poko
TakesxiSximada/sximada.boilerplate
"setup.pyを記載してpackagingしたほうが良いです。" とのこと。 他、 "Dockerfileを置いてあげると親切かも" とも。
ディレクトリ構成として、
"こんな感じで" とのこと。
see: いまさら聞けないDocker入門(3):Dockerfileとdocker buildコマンドでDockerイメージの作成 (1/2) - @IT
「Dockerfile」ファイルは、プログラムのビルドでよく利用されるmakeツールの「Makefile」ファイルと同様に、Dockerコンテナーの構成内容をまとめて記述するシンプルなテキスト形式のファイルです。
とのこと。
つまり、こいつを使って、Docker (よくわかってないけど) コンテナを自動作成できるっぽい。
自動作成に使うコマンドが docker build
コマンド。
Mac の Homebrew でやるの事前準備としてはとりあえず
$ brew cask install virtualbox docker-machine $ docker-machine create --driver virtualbox default # default という名前で仮想マシンを作る $ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/peketamin/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval "$(docker-machine env default)" $ echo 'eval "$(docker-machine env default)"' >> ~/.bash_profile # (or .bashrc) # 上記の export 群も .bash_profile に入れる $ docker-machine start $ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b901d36b6f2f: Pull complete 0a6ba66e537a: Pull complete Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7 Status: Downloaded newer image for hello-world:latest Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/userguide/
ですかね? (参考: Dockerのインストール - 74th)
分からない…。とりあえず Dockerfile なるものを使って、 AWS S3 のモックサーバーである jubos/fake-s3 を動かしてみることから始める。
Docker Hub を見ると
$ docker pull lphoward/fake-s3
と書いてあるので、それをする。ここからどうしたらいいんだろう… hello-world に倣う。
$ docker run lphoward/fake-s3 [2015-12-19 08:10:56] INFO WEBrick 1.3.1 [2015-12-19 08:10:56] INFO ruby 2.1.5 (2014-11-13) [x86_64-linux-gnu] [2015-12-19 08:10:56] INFO WEBrick::HTTPServer#start: pid=1 port=4569
おっ、起動したっぽい。 ipython を起動して boto からアクセスしてみる
In [1]: from boto.s3.connection import S3Connection, OrdinaryCallingFormat In [2]: connection = S3Connection("fake", "fake", is_secure=False, port=4569, host='127.0.0.1', calling_format=OrdinaryCallingFormat()) In [3]: conn = S3Connection("fake", "fake", is_secure=False, port=4569, host='localhost', calling_format=OrdinaryCallingFormat()) In [4]: conn.create_bucket('test_bucket') ... ... ...
例外吐いてタイムアウトした…。
Dockerについての調査まとめ、基本機能+主な特徴+Vagrantの連携 あたり にあるように -p
オプションを使ってみる。
しかしそれでもダメっぽいので、更に、 MacでDockerを利用するときの初期設定 | Recruit Jobs TECHBLOG に従い、VirtualBox 上でポートフォワード設定をする。なるほど! VirtualBox 経由だからそういうのが必要なのね。 (これも見た: Docker初心者が遭遇するエラーをまとめてみた | Recruit Jobs TECHBLOG)
$ docker run -p 4569:4569 lphoward/fake-s3
# 続き In [5]: conn.create_bucket('test_bucket') Out[5]: <Bucket: test_bucket> In [6]: # 通ったっぽい!
docker 側の出力
[2015-12-19 09:07:10] INFO WEBrick::HTTPServer#start: pid=1 port=4569 10.0.2.2 - - [19/Dec/2015:09:07:16 UTC] "PUT /test_bucket/ HTTP/1.1" 200 0 - -> /test_bucket/
おおっ!
…そして、 test_bucket
はどこに作られた…?
コンテナにログインして見ればわかる?
^C # 一度落とした $ docker run -i -t -p 4569:4569 lphoward/fake-s3
… ジョブをバックグラウンドにもできない!だから ls
も出来ないー!
doker --help
してみると
exec Run a command in a running container
というのがあった。これで ls
できそう…?
docker exec 672518ad092c ls bin boot dev etc fakes3_root home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
おあー! fakes3_root
ディレクトリあったたよー!じゃーこの中に test_bucket
作られてるハズ!
$ docker exec 672518ad092c ls fakes3_root
…なにも出ない…。あ、さっき、再起動したからか?そういうもの? もう一度コンテナ起動 → ipython で テストバケット作成 → docker exec してみる。
$ docker exec 672518ad092c ls fakes3_root 127 $ docker exec 672518ad092c ls fakes3_root/127 test_bucket
なんか、127 っていうディレクトリはできているものの、作成出来ている!
なんとなくわかった!
コンテナを起動しただけで fakes3サーバーが立ち上がり、ファイルシステムにはファイル置き場のエンドポイントが出来ている。これを最初から定義してあるコンテナの定義ファイルが Dockerfile 、 という感じなのかな?
で、こういうのもパッケージに同梱してあげると、親切だという、そういうことですね…!?
pythonの修行
Python学びたての頃にお世話になったコンテンツのうちの一つが”The Python Standard Library by Example”だった。
— SHIMIZU Taku (@takuan_osho) 2015, 12月 5
The Python Standard Library by Example (Developer's Library)
あと
パッケージング mq
あとは
あ、関係ないけど
Team Geek ―Googleのギークたちはいかにしてチームを作るのか
会社にあるかな…?
参考: rbenv インストールから Bundler を使用した Rails のローカルインストールと起動まで - Qiita
brew update brew install rbenv rbenv install 2.2.3 (その時の最新) rbenv rehash rbenv (global or local or shell) 2.2.3 # とりあえず shell を選択 rbenv exec gem install bundler rbenv rehash rbenv exec bundle init vim Gemfile
↓
# A sample Gemfile source "https://rubygems.org" gem "git-pr-release"
↓
rbenv exec bundle install
使用時
bundle exec git-pr-release
痛いニュース(ノ∀`) : 「人を殺した」17歳少年がJAに自首 - ライブドアブログ能登出身者として、近くに警察が無い場合の候補としてそこを選ぶ気持ちはわかる。
2015/11/30 21:49
能登出身者として、近くに警察が無い場合の候補としてそこを選ぶ気持ちはわかる。 - peketamin のコメント / はてなブックマーク
PythonとかScrapyとか使ってクローリングやスクレイピングするノウハウを公開してみる! - orangain flavor
Scrapyは便利なのですが、ダウンロードしたタイミングでスクレイピングするアーキテクチャになっているのは、あまりよろしいと思えません。ダウンロードした生のHTMLは一度データベースに保存しておき、オフラインでスクレイピングを行うべきです。
以上を踏まえ実運用では、単純にHTMLをMongoDBに保存するだけのItem Pipelineと、ジョブキューサーバーにジョブを追加するだけのItem Pipelineを作成し、スクレイピングは別プロセスで行っています。スクレイピングには lxml を使っていますが、正直Rubyの Nokogiri のほうが直感的に書けると思います。別プロセスであれば、あまりPythonにこだわる必要はありません。