コンビニで偶然売ってたので購入。最後の一個だったようだ。
いまは普通のタバコと併用中ww
最新のiPhone7だわー。自分のじゃないけどw
ホームボタンは、3Dタッチで言えば強く押すに反応する感じになっていた。 これだとホームボタンのダブルクリックがやりにくくて困る。 ホームボタンが物理ボタンじゃないのは違和感しかないけど、防水のためには仕方ないのか。
iPad miniは、iPad対応アプリだと画面レイアウトがスマホ版と違ってちょっと慣れない。 あと、iPad miniで許しがたいのがフリック入力モードが存在しないこと、仮想キーボードが画面中央に固定表示されて入力フォームの上にかぶさって画面が見えないこと。 設定でなんとかできないと死ねる。
→設定でなんとかできた・・・。キーボードは固定モードがよろしいようで。設定→一般→キーボードに日本語−かなを追加して、設定→一般→キーボードのフリックのみをオンにするとフリック入力もできた。
しかしまあ、Dockerって凄い変動が激しいプロダクトだなーww
Windows版だけで言えば、boot2docker (使ったことないけど) → Docker-toolbox (Windows 7,8,8.1用。Oracle Virtual Boxを使う)(シェルはGit for Windowsのbash.exeを使う) → Docker for windows (Windows 10 Pro用。Hyper-Vを使う)(シェルはPowerShellを使う)と変動している。
正直、PowerShellよりbash.exeを使ってほしかったが...(ぉぃ)。
余談だが、CentOS7のrpm名で言うと、docker or docker-engine → docker-ce と変わっている。 Docker APIのバージョンは1.12から1.27へと駆け上がっている。
毎月リリースする予定って話だから恐ろしい。
凄い開発速度だ...。
何食ってんだろ...。
...。
さて、docker本体は何をするものか、というと、デプロイ環境を隔離して、組み合わせを自由にできる基本セットという感じのモノ。
本当に似てるかどうかはわからんけど、ソースコード配布を自分でコンパイル時々自分でソース修正時代から、バイナリパッケージ配布時代(rpmとかpkgとか)への変化に似ている気がする。
アプリのバイナリ一式、アプリが必要とする各種ライブラリ一式をファイルシステム丸ごと固めて、外部へのファイルマウントやネットワーク接続は管理され限定されつつも可能で、CPU、メモリ、ファイルは他の連中と混ざらないように隔離されている。
たとえば、1台のマシンにapacheやnginxを2個3個起動しようとすると、設定ファイルの場所を個別に変えたりとか、ポート番号が衝突するから手動で変えたりとか、名前ベースの仮想ホスト設定するとか面倒くさいことになる。 互換性試験のためバージョンの異なるapacheを同時に2個建てようとか思うとさあ大変。バイナリパッケージ管理システムへの反逆みたいな感じになるw
dockerの中に隔離されているapacheなどのソフトからは、設定ファイル類はいつもの場所にある(ように見せている)し、ポート番号はいつもの80で待っているので、rpmバイナリはそのまま利用できる。 ポート番号はdockerがポートフォワードする機能を持っていて、docker外部から49023へアクセスがあったらdocker内部の80に転送してくれるし、apacheからDB向け接続なども別途転送してくれる。
というわけで、1台のマシンの中にapache/nginxをそれぞれ10個でも20個でも建てても混乱が起きない(ような管理ソフトが作成できる下地ができた)。
docker-composeというDocker社のツールを使うと、複数の公式dockerイメージ(nginxとtomcat)を連携設定をdocker-compose.ymlに書いておいて、まとめて起動できる。 (普通はApacheの設定ファイルとTomcatの設定ファイル、文法がそれぞれ違うものに対して連携する設定を手で打ち込んでいたものだが。)
逆に、データセンタの中で空いている適当なマシンでdockerを走らせて(マシン間でIP:ポート転送するソフトは必要だが...実はもう付いてるw)も良いので、パワーが必要なクラウド方面でも有効利用できそうだ。
あとは、なんか良さげな管理ソフトがあれば、1台のマシンを限界まで有効活用したり、複数のマシンパワーを有効活用できたり、死んでしまったアプリを自動で別に建て直したりできるあたりが良い点。
悪い点は、docker用のファイルシステムイメージ(dockerイメージ)を作ったり、組み合わせを作ったりするのが面倒臭いwwことと、Linux限定であること(Windowsアプリは無理)、特殊訓練を受けた人がカリカリにチューニングした設定よりは要求リソースが大きく、パフォーマンスでも落ちる点。 ここはソフトで自動管理だから仕方ないし、5万台の設定だと人力チューニングするのも無理なので、コンピューティングパワーで押し切るところ。
以下のサイトに、ダウンロードできるdockerイメージが色々公開されている。
流行りモノだけあって、いろいろな会社がdockerイメージの公式版を登録しているようだ。
実際に使う際には、公式版のイメージがそのまま使えればよし、公式イメージにちょっと設定を加えて自作dockerイメージを作って使ってもよし、さらにdockerイメージを複数組み合わせて一気にシステム全体を作ってもよし、となる。
現状、バージョンアップが鬼のように高速で、ネット上の記事が数日でダメになる勢いを感じるので、割と茨の道っぽいところもあるww
Vagrantみたいに、コマンドラインからOSインストール画面を一切見ずにVMを立てたりもできるので、 生でOracle Virtual Box使うより楽なVagrantの代用品としてインスタンスを建てるのに使うのも良いかも。
p.s.
そういえば、Hyper-Vを有効にするとOracle Virtual Boxが使えなくなるって噂は本当なのだろうか...。 先にOracle Virtual BoxとVagrantをアンインストールしてからDocker for Windowsをインストールしたので 真実がわからん
Docker tomcat 公式イメージ探索
Tomcatの公式イメージから、8.0.44-jre7, 8.0-jre7, 8.0.44, 8.0 (8.0/jre7/Dockerfile) を見てみる。
Dockerfileは、dockerイメージをbuildするときのレシピというか設定ファイル。これに従ってdockerイメージ(積層型ファイルシステムと関連情報)が作られる。
FROM openjdk:7-jre
ベースにしてるのはopenjdkのdockerイメージ。openjdk:7-jreと書いてあれば、openjdkの公式イメージ使用でタグは7-jre。 余談だが、個人提供のイメージはhoge/openjdk:tag みたいに、/の左に個人名がつく。
EXPOSE 8080 CMD ["catalina.sh", "run"]
メインプロセス(pid=1)として実行されるのはcatalina.sh。 外部に晒すポートは8080指定か。AJPポート8009はデフォルトでは公開されてないのね。
apache/nginxからtomcatに振る場合は、URLで判定してreverse proxyにするのか。
ウチの自宅鯖の場合、Apacheからperl cgiアプリ複数/sh cgiアプリ複数/Tomcatアプリ複数をURLと拡張子見て色々起動しててデパート地下街みたいになってるけどww、 dockerの考え方に従えば、個々のアプリは全部個別のdockerコンテナにして、入り口にURLで振り分けるnginx置いた方が良いよね、ということか。
なるほど。
既存の自宅鯖に適用するの面倒だなぁコレw 個々のアプリの個別バージョンアップとか、個別アプリごとの有効化無効化はぐっとやりやすくなるのは間違いないけど。
FreeBSDでdocker使うのはLinux互換ABI機能を使ってzfsじゃないとダメとか色々大変そう。 Amazon AWSに借りているVPS鯖ではどうかな...。メモリ1GBしか積んでないぞ...。ぐぬぬ。Amazon AWSもっと安くしてくれよん。
Dockerイメージを走行させるサービス(dockerホスティング)は色々なクラウドサービスで提供してるから、そこに俺wiki(tomcatイメージベース)のdockerイメージ焼いてぶっこめばいいのか。
Tomcatのwarを置かせてくれるレンタルサービスってほとんど無いくらいマイナーだった(Tomcatはwar単位のサーブレットアプリの管理機能を持ってたけど、クラウドホスティング会社が扱うにはちょっと向いてなかった。落ちるときは道連れだったし。)けど、dockerイメージなら中の言語もバイナリパッケージ構成もなんでも良くて、待ち受けポートの話、DB接続の話、永続化するファイルシステムボリュームの話に単純化されるわけで、wordpressみたいなメジャーな奴だけでなく、変態マイナー言語使用のバイナリ構成でもホスティングサーバ上で走行を許されることになる。
最小限のOSバイナリ一式を含んで、pid=1に/bin/bashを指定されているdockerイメージなら、VMインスタンス代わりにもなるかも。 外部公開するWebサーバとかを建てるなら、nginxイメージとかtomcatイメージの方を使えばいい。
なんだか、話がずいぶんと簡単になったなぁ、という印象。
注意:FreeBSD版のdockerはdocker-freebsd-20150625で、2年ほどメンテナンスされていないようなので、まじめに使おうとしてはいけない模様。
上のDocker - FreeBSD Wikiを見たら、root file systemがzfsじゃなくても動かせそうだったので、ちょっと試してみる。 FreeBSD版dockerのコンテナドライバはjailらしい。
# zfsカーネルモジュールをロード。zfsはライセンスが違うのでカーネル内蔵にできない。 kldload zfs # ファイルシステム上に4GBのファイルを作る。HDDだと1分くらいかかる time dd if=/dev/zero of=/usr/local/dockerfs bs=1024K count=4000 # zfs pool を上の4GBファイル上に作る zpool create -f zroot /usr/local/dockerfs # zfs一覧表示。poolを作っただけだが、ファイルシステムも勝手に作られる。 zfs list # 以下表示例 # NAME USED AVAIL REFER MOUNTPOINT # zroot 55K 3.75G 19K /zroot # zpool一覧表示 zpool list # 以下表示例 # NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT # zroot 3.88G 82K 3.87G - 0% 0% 1.00x ONLINE - # zfsでファイルシステムを作る。マウントポイント指定付き。 zfs create -o mountpoint=/usr/docker zroot/docker # zfs一覧表示。/usr/dockerが増えている。 zfs list # 以下表示例 # NAME USED AVAIL REFER MOUNTPOINT # zroot 108K 3.75G 19K /zroot # zroot/docker 19K 3.75G 19K /usr/docker
sysrc -f /etc/rc.conf zfs_enable="YES"
余談だが、zfsはzfs xxxコマンド(zfs listとか)を使った場合でも自動でマウントされる。
さらに余談だが、zfsは/etc/fstabを見ない。
pkg install docker-freebsd ca_root_nss
sysrc -f /etc/rc.conf docker_enable="YES"
service docker start
ssh root@n3050 ~ $ docker version Client version: 1.7.0-dev Client API version: 1.19 Go version (client): go1.8 Git commit (client): 582db78 OS/Arch (client): freebsd/amd64 Server version: 1.7.0-dev Server API version: 1.19 Go version (server): go1.8 Git commit (server): 582db78 OS/Arch (server): freebsd/amd64 ssh root@n3050 ~ $
普通は https://hub.docker.com/explore/ Explore - Docker Hub をブラウザで見るのが良い。
ssh root@n3050 ~ $ docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 3409 [OK] jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8... 72 [OK] nimmis/java-centos This is docker images of CentOS 7 with dif... 26 [OK] gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glu... 19 [OK] kinogmt/centos-ssh CentOS with SSH 15 [OK] egyptianbman/docker-centos-nginx-php A simple and highly configurable docker co... 9 [OK]
実行結果。あれ。エラーで止まる。
ssh root@n3050 ~ $ docker pull centos latest: Pulling from centos 6b4988a50482: Extracting [========> ] 11.7 MB/70.49 MB 12bb2fef2ea5: Download complete 3bea5ca0a170: Download complete Pulling repository centos Repository not found ssh root@n3050 ~ $
実行結果。ダウンロードできた。
ssh root@n3050 ~ $ docker pull centos:6 6: Pulling from centos bc115598a151: Pull complete 061d0bd4322e: Pull complete 21b7bbb1e4be: Pull complete Digest: sha256:f94fda3b0eaf5858fe27e57838bc0a041633eadbc0d42154c6115c72a815e7a1 Status: Downloaded newer image for centos:6 ssh root@n3050 ~ $
docker run -t -i centos:6 /bin/bash
んんんw uname -a 表示が謎だww Linux 2.6.32 FreeBSD 11.0-RELEASE-p9 って何だw
ssh root@n3050 ~ $ docker run -t -i centos:6 /bin/bash [root@ /]# uname -a Linux 2.6.32 FreeBSD 11.0-RELEASE-p9 #0: Tue Apr 11 08:48:40 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [root@ /]# cat /etc/centos-release CentOS release 6.9 (Final) [root@ /]#
ssh root@n3050 ~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 409d009cdde5 centos:6 "/bin/bash" 31 seconds ago Up 29 seconds compassionate_pare ssh root@n3050 ~ $
[root@ /]# exit exit ssh root@n3050 ~ $
ssh root@n3050 ~ $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 409d009cdde5 centos:6 "/bin/bash" 3 minutes ago Exited (0) 26 seconds ago compassionate_pare ssh root@n3050 ~ $
コンテナIDの指定では、他のコンテナと区別ができれば、先頭数文字タイプすれば良い模様。
ssh root@n3050 ~ $ docker rm 409 409 ssh root@n3050 ~ $
起動くらいは普通にできてワロタw
イメージ名 centos:6って、Linux用のバイナリファイルシステム一式だよなぁ...。 FreeBSDのLinux 64bit binary comapt機能おそるべし。
linux-c6-6.8_4パッケージを使って、CentOS 6環境を作る個々のrpmをインストールしなくても、バイナリイメージでファイルシステム丸ごと拾って隔離して使えるので、これがガチで動いたら意外に便利かもしれんね...。
docker execは動かないらしいので、真面目に使おうとすると大変そうだけどw
ウチだとノートン先生のアドオンが邪魔して有効になってなかった。
タブをたくさん開いてても複数プロセス処理にはならず、どうも別ウィンドウを開くとプロセスが増えるような動きをするっぽい。