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

Portainerを利用して個人環境のコンテナ管理をする

PortainerはDockerホストのコンテナ等の情報をブラウザで確認・操作できるツールです。

f:id:naokirin:20170219232457p:plain

知らずのうちに溜まっていくボリュームやイメージなどが視覚化されるので便利です。
またブラウザ上でコンテナにシェルでログインすることもでき、かなり快適に操作することができます。

最近、Dockerを使う際にPortainerを利用して、非常に便利だったので導入をメモ程度に残しておきます。

Mac(docker-machine)の場合

現在のdocker-machineの状態を確認する

$ docker-machine env

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.102:2376"
export DOCKER_CERT_PATH="/Users/username/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env)

$ docker-machine config default

--tlsverify
--tlscacert="/Users/username/.docker/machine/machines/default/ca.pem"
--tlscert="/Users/username/.docker/machine/machines/default/cert.pem"
--tlskey="/Users/username/.docker/machine/machines/default/key.pem"

この時点で、dockerのホストマシンがなければ作成する。

portainer を起動する

以下のコマンドを叩くだけ

$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

これで9000番ポートにportainerが起動する。

portainer でdockerの情報を確認する

先程のDOCKER_HOSTのIPアドレスに9000番ポートでブラウザからアクセスすれば、adminのパスワード設定画面が表示されるので、設定後に再度ログイン画面でパスワードを入力してログインする。

f:id:naokirin:20170212204652p:plain

基本的な使い方は以上。

portainer でリモートホストに接続する

複数のホストで起動している場合はリモート接続して、1つのportainer上で確認したいこともある。

その場合に、ホストがMacの場合、最初に表示したdocker-machineコマンドで確認した DOCKER_HOST と ca.pem、cert.pem、key.pemを利用してEndpointを追加する。

f:id:naokirin:20170212212211p:plain

Linux の場合

dockerd の設定をする

Linuxの場合、ホストに接続する場合、docker daemon(dockerd)の設定で tcp:// が設定されていない場合があるので以下のページを参考に設定してデーモンを再起動する。

http://docs.docker.jp/engine/reference/commandline/dockerd.html

あとはMacの項で書いた「portainerを起動する」から同じように実行できます。

木構造を描くアルゴリズムについて(Reingold-Tilford Algorithm)

最近、UnityでPlayable APIというものを調べる機会がありました。

その際にそのPlayableの木構造をUnity上で表示できるEditor拡張としてPlayableGraphVisualizerというものがあると知ったので軽く見ていて、「Reingold Tilford」というものが出てきて調べていたので、それをまとめておきます。

(ちなみに、PlayableGraphVisualizer - https://bitbucket.org/Unity-Technologies/playablegraphvisualizer

結論としてはこの「Reingold Tilford」は「Reingold Tilford アルゴリズム」と呼ばれるもので、木構造を階層的に“きれいに”表示するためのアルゴリズムです。木構造のグラフ表示の機能を持ったJavascriptのライブラリなどではこの単語が出てくることもあるようですが、私は初めて見ました。

木構造を綺麗に描くための手法と歴史

いろいろ調べていて、非常に参考になったのが以下のサイトでした。

続きを読む

Unityでスクリプトの一部分の処理をProfilerに表示してもらう

Unity

今日は非常に初歩的なTips的な話です。
Unityのドキュメントをちゃんと読んでれば知ってるくらいの知識、ということで。

Unityでゲームを開発していると(というよりはゲームを開発しているとよくあるとは思うのですが)、どうもダメージを食らったときにもっさりしているから軽くしよう、とかいう話が上がったりします。 このときにProfilerやスクリプトにログを埋め込んだりであれやこれやと調べたりするわけですが、Profiler上で表示される粒度が大きすぎて結局どこが問題か調べきれないといったことがあります。 この際に、Unityには便利な機能として、Profiler.BegineSample()/EndSample()があります。

続きを読む

ネットワーク周りの知識のまとめ (物理層)

ネットワーク

ネットワーク周りの知識をまとめておこうと思います。
今回は物理層だけど、無線部分とかは全然かけていないので気が向いたら書きます。。。
(ツイストペアケーブルと光ファイバーケーブルについて書くだけで結構疲れたw)

続きを読む

MySQL(InnoDB)のインデックスについての備忘録

最近、インデックスについて調べることがあったので、忘れないうちに出来る限り情報を残しておこうと思います。

ちなみにMySQLのバージョンは5.5および5.6の情報を元にしています。

続きを読む

Eric EvansのDDDを読んでます(4)

DDD 読書

今回は第6章(ドメインオブジェクトのライフサイクル)まで。

集約

集約はエンティティやバリューオブジェクトを1つのオブジェクトとみなし、扱います。 これにより関連をわかりやすくし、また不変条件を維持することで、オブジェクトの一貫性を保つようにします。

集約は小さなエンティティやバリューオブジェクトだけでは複雑化してしまう関連をシンプルにする役目のようです。また外部からのアクセスを集約のルートになるオブジェクトへのアクセスに制限することで、集約内の不変条件の維持を楽にできるようにしています。

実際のオブジェクト指向プログラミングでも、理解しやすく同時に変更されるような単位にクラスを分離していても、それらにアクセスするのはあるルートになるクラスのみで、他とのやりとりはそのルートになるクラスとしか行わないといったような設計をすることがあるのでイメージはしやすい感じがします。

ファクトリ

ファクトリは集約のインスタンスを生成し、生成されるオブジェクトに複雑な生成の責務を持たせることなく、またクライアントに集約の内部を晒すことがないようにします。

いわゆるGoFデザインパターンの生成に関するパターンに当たるタイプだと考えるとイメージできるかなと思いました。

リポジトリ

リポジトリは永続化されたオブジェクトに対して、メモリ上にあるかのようにアクセスできる方法を提供します。これによりクライアントが実際に内部でどのような永続化技術が使われているかを意識しないで済むようにできます。

またリポジトリで書かれている点で「テストで使用するために、ダミーの実装で置き換えるのが容易になる」というのも書かれていました。

第6章は各パターンはイメージしやすいものが多かったように感じました。 これ以降の章も読み進めつつ、実際の応用について学んでいきたいと思います。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

プログラミングで考えていることについて考察してみる

プログラミング全般

まえがき

前回までDDDの読書記事書いてたのですが、7章くらいまで読んだあたりで先にやりたいことができてしまったので、一旦中断しています。(6, 7章は年末年始の間に記事書きます)

今回は年末ということで今年の振り返り的な記事を書きます。

続きを読む