電子工作のための箱を3Dプリンタで作る
電子工作したPCBを格納するケースがほしいのだけれども、タカチのケースを買うか、そこらへんのプラボックスに穴を開けたりするかを考えなければいけないのだけれども、3Dプリンターを持っているなら良い解決策があります。それがCustomizable electronics box generator。カスタマイズが可能でちょいちょいと設定すると3Dプリンタで印刷できるSTLファイルを出力できます。
使い方
もし、右側のcustomizerが開かれていない場合は、windowメニューのHide Customizerにチェックがついているので外すと現れるはずです。
タイトル | 設定内容 |
---|---|
Description | 設定の説明 |
Render | レンダリングの設定。箱の設定ではない |
РСВ | PCBを乗せるための足やサイズの設定 |
Box | 箱自体の厚みやネジ穴の設定など |
Holes | 穴あけ設定。32個まで設定できる |
Sleeves | 吊り下げ用?の穴を作る |
Mounts | 設置するためのマウントタブを作る |
Hole array | 通気孔のための連続した穴を開けるための設定 |
Text | テキスト |
Docker上でDockerUIを試してみる
Dockerの仕組みはすばらしいですよね。簡単に仮想環境を作成できるのでポコポココンテナを作成しまくっちゃいます。ただ、これらの操作はすべてCUIから行わないといけないので、う〜んと思っていました。じゃあここらでお父さんNode.jsでGUI作っちゃうぞーって思って、Amazonで下記の書籍をポチりました。
はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する-
- 作者: 松島浩道
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/03/15
- メディア: 大型本
- クリック: 15回
- この商品を含むブログ (5件) を見る
Node.js面白いなぁと思いながらDocker調べてたら、DockerUIというソフトウェアがあるではありませんか。いったい俺のNode.jsの勉強はどこに向かえば良いのだと。。。とりあえずNode.jsはおいておいて、DockerUIを試してみることにします。
インストール
サイトに書いてあるように、Dockerのイメージが既にレポジトリに登録されているのでそれをそのまま利用させてもらいます。
$ sudo docker pull crosbymichael/dockerui
またDockerUIはDocker Remote APIを利用するので、それの準備もします。以下のように/etc/init/dockerd.confで-Hオプションと-api-enable-corsオプションを指定してdockerdを起動するように設定します。
description "Docker daemon" start on filesystem or runlevel [2345] stop on runlevel [!2345] respawn exec /usr/local/bin/docker -d -H="unix://var/run/docker.sock" -H="tcp://172.16.35.134:4243" -api-enable-cors
ファイルを書き換えたらdockerdを一度ストップした後スタートします。
$ sudo stop dockerd $ sudo start dockerd
あとは、DockerUIのコンテナを起動します。上記の例だとIPは172.16.35.134なので、それを指定してコンテナを立ち上げます。
$ sudo docker run -d crosbymichael/dockerui /dockerui -e="http://172.16.35.134:4243" 68de52ae510f $ sudo docker port 68de52ae510f 9000 49153
あとはブラウザでアクセスするだけ。 http://172.16.35.134:9000
ダッシュボード
今はDockerのページへのリンクが張られているだけですね。。。
コンテナ一覧
コンテナの一覧を見ることが出来ます。IDをクリックすると下記のページが表示されます。
このページではコンテナの停止や、開始、kill、コンテナの削除などが行えます。
イメージ一覧
イメージの一覧が見れ、削除などもできますね。さらにここで、イメージをビルドすることも出来るようです。
Docker情報
Dockerの情報が一覧できます。
Dockerでmroongaを動かす
ほぼ前回と同様なのでDockerfileだけ記載しておきます。
From ubuntu:quantal # my.cnfをコピー ADD my.cnf /etc/mysql/my.cnf # security updateを追加 RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ quantal-updates main restricted" >> /etc/apt/sources.list RUN echo "deb-src http://us.archive.ubuntu.com/ubuntu/ quantal-updates main restricted" >> /etc/apt/sources.list RUN apt-get update # /sbin/initctlが原因でmysql-serverが起動しない問題へのhack RUN dpkg-divert --local --rename --add /sbin/initctl RUN ln -s /bin/true /sbin/initctl # mysql-serverのインストール RUN echo 'mysql-server-<version> mysql-server/root_password password password' | debconf-set-selections RUN echo 'mysql-server-<version> mysql-server/root_password_again password password' | debconf-set-selections RUN apt-get install -y -o Dpkg::Options::="--force-confold" mysql-common RUN apt-get install -y mysql-server RUN (/usr/bin/mysqld_safe &); sleep 3; echo "grant all privileges on *.* to root@'%';" | mysql -u root -ppassword RUN echo "deb http://packages.groonga.org/ubuntu/ quantal universe" > /etc/apt/sources.list.d/groonga.list RUN echo "deb-src http://packages.groonga.org/ubuntu/ quantal universe" >> /etc/apt/sources.list.d/groonga.list RUN apt-get update; apt-get -y --allow-unauthenticated install groonga-keyring RUN apt-get update RUN (/usr/bin/mysqld_safe &); sleep 3; apt-get -y install mysql-server-mroonga RUN apt-get -y install groonga-tokenizer-mecab RUN apt-get -y install groonga-normalizer-mysql EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]
DockerでMySQLを動かす
Dockerでデーモンを動かそうとするとinitctlがうまく動かないので、service start mysqlとか出来ないんです。だから直接mysqld_safeを起動するのですが、baseイメージからDockerfileでインストールすと、簡単にインストールできない。というのも、apt-get install mysql-serverしたときにいろいろオプションを対話的に入力しろといわれるので、Dockerfileで素直には出来ないんです。
いろいろ調べてみると、そういったパラメタをあらかじめ設定してインストールする方法があって、debconf-set-selectionsというコマンドがそれに相当するみたいです。もっと簡単にできる方法を id:nkwhr さんに教えてもらいました。DEBIAN_FRONTEND=noninteractiveと環境変数に設定すればいいみたいです。下記のスクリプトは修正済みです。また普通にapt-getすると設定ファイルがあるよとダイアログが表示されてしまうので、これも抑制したい。これにはdpkgに--force-confoldというオプションがあってこれを指定すると古いファイルをそのまま使うようにあらかじめ設定しておけます。また、apt-getにはdpkgに引数を渡すことが出来る仕組みがあったのでこれ経由で引数を渡します。
From ubuntu:quantal # my.cnfをコピー。 Dockerfileのディレクトリにmy.cnfファイルをおいておく必要があります ADD my.cnf /etc/mysql/my.cnf # security updateを追加 RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ quantal-updates main restricted" >> /etc/apt/sources.list RUN echo "deb-src http://us.archive.ubuntu.com/ubuntu/ quantal-updates main restricted" >> /etc/apt/sources.list RUN apt-get update # /sbin/initctlが原因でmysql-serverが起動しない問題へのhack RUN dpkg-divert --local --rename --add /sbin/initctl RUN ln -s /bin/true /sbin/initctl # my.cnfは上書きしない RUN apt-get install -y -o Dpkg::Options::="--force-confold" mysql-common RUN DEBIAN_FRONTEND=noninteractive apt-get install -q -y mysql-server # passwordなしでリモートからrootでログインできるようにする RUN (/usr/bin/mysqld_safe &); sleep 3; echo "grant all privileges on *.* to root@'%';" | mysql -u root -ppassword EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]
my.cnfは下記の通り
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 myisam-recover = BACKUP query_cache_limit = 1M query_cache_size = 16M log_error = /var/log/mysql/error.log expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/
これでmysqlのイメージは作ることが出来ます。
sudo docker build -t="cpw/mysql" .
あとは以下のコマンドを実行してmysql-serverを実行できます。
$ sudo docker run -d cpw/mysql 3ec822a71a3a $ sudo docker port 3ec822a71a3a 3306 49289 $ mysql -u root -h 172.16.35.134 -P 49289
データを永続化したい
上記の手順だけだとデータが永続化されません。Dockerでコンテナからホストのディレクトリをマウントすると組み合わせて設定をすると永続化することも可能です。下記のようにしてホストマシンのディレクトリをコンテナのディレクトリにマウントします。初めてマウントした状態だとDBは存在しない状態なので、一度コンテナからDBを作成します。
$ sudo run docker run -v /var/docker/mysql:/var/lib/mysql -i -t cpw/mysql /bin/bash root@048a4c9afd4e:/# mysql_install_db root@048a4c9afd4e:/# mysqld_safe & root@048a4c9afd4e:/# echo "grant all privileges on *.* to root@'%';" | mysql -u root root@048a4c9afd4e:/# exit $ sudo docker run -v /var/docker/mysql:/var/lib/mysql -d cpw/mysql $ sudo docker port ca9f3b7fc39b 3306 49292 $ mysql -u root -h 172.16.35.134 -P 49292
時間のかかるリダイレクト処理でプログレスバーを出す
Dockerでmroongaを動かすことに成功しました。とりあえず、その記事はまた後ほど書きますが、今パフォーマンス計測のためにデータを投入中です。で、投入するデータが凄くでかいので普通にこんな感じにコマンドを実行すると思います。
mysql -u root -h 172.16.35.134 -P 49194 test2 < dumpForML.sql
でもこれって実行しているときどこまで進んでいるのかまったく分からなくて、動いてるのか動いていないのか分からなくなってしまいますよね。そういうときに使えるのが pv コマンド。パイプで転送した容量と全体の容量を見てるんでしょうねぇ。
pv dumpForML.sql | mysql -u root -h 172.16.35.134 -P 49194 test2 50MB 0:00:07 [6.41MB/s] [==> ] 3% ETA 0:03:21
かなり便利です。
Dockerでいらなくなったコンテナを一括削除する
Dockerでいろいろ試しているといろんなパッケージを追加しまくったりして、いがいにすぐディスクが圧迫されていきます。ひとつひとつ削除しているのは結構つらいので、一括で削除したいときがあります。というかさっきそんな感じでした。
mroongaをDockerで動かしたくて、、、、いろいろapt-getを繰り返していたらディスクがいっぱいになっちゃいました。ということで、以下のコマンドを実行すると既に停止しているコンテナを一括で削除できます。
for id in $(docker ps -a | grep Exit | cut -d " " -f 1); do docker rm $id; done
Dockerでコンテナからホストのディレクトリをマウントする
Dockerで作る仮想環境のことをコンテナというんですね。知りませんでした。恥ずかしい。
さてDockerでpersistentボリュームを使いたくて調べていました。とりあえず前回の記事で再利用可能なボリュームを定義できるようになったんですけど、このオプションが -v でした。そして、今回やりたいことはホストのディレクトリをマウントですけど、実はこれも -v オプションなんです。なんじゃそりゃ!
docker0.4.8の頃までは-bで指定していたみたいですが、どうも -b と -v まマージされたようで、同じオプションなのに違うことをやっているようです。しかもさらに混乱したのはDockerfileでVOLUMEコマンドがあるので、もちろんコマンドラインの-vと同じように指定できると思ったらこちらはバインドはできないようです。
違いは -v の引数に<container dir>とするか<host dir>:<container dir>とするかの違いのようです。ということで現状では下記のようにコマンドラインで指定すればホストのディレクトリをマウントできます。
$ sudo mkdir /host_dir # ホストにもディレクトリがないと $ sudo echo "OK?" > /host_dir/msg # 確認用にファイルをおいておく $ sudo docker run -v /host_dir:/container_dir base /bin/bash -c "cat /container_dir/msg" OK?