新しいフォルダ (2)

2016-10-25

Lightbend Activatorテンプレートの作り方メモ

こんな感じ

具体的には

  1. activatorで適当な元テンプレから引っ張ってくるか、あるいは自前でsbtプロジェクトを作る
  2. プロジェクトルートにactivator.propertiesを置いてname、title、descriptionを書く
  3. プロジェクトをギッハブにpushする
  4. Contribute Template - Lightbend Activator | @lightbend のフォームにリポジトリのロケーション(https)を貼る
  5. 待つ
  6. そのうちサイトが生成される

公開が完了したら、activator newした時のプロジェクトテンプレートから選べるようになります。便利ですね。

2016-07-07

Dockerコンテナがstart出来なかったりRemoval In Progressってなって消せなかったりした時の対処法

最近ずっとDocker介助おじさんとなっていますこんにちは。

Docker、便利なんですけどつらいことも色々多い。

Dockerを運用していると、コンテナの再起動や削除時にコンテナのステータスがRemoval In Progressとなってコンテナを削除できなくなったりすることがちょいちょいあります。

こういう時は大体Dockerデーモン再起動しか無くて本当につらいのですが*1再起動したらしたで、今度は止まったコンテナ立ち上げようとして下記みたいに言われてstartが失敗したりするわけです。

Error response from daemon: rpc error: code = 6 desc = "mkdir /run/containerd/{container id}: file exists"

こうなるともうコンテナ削除するしか無いですし、削除したら部署の皆さんに「コンテナ起動できなかったので再デプロイお願いします」って頼まなきゃいけないのでだるいのです。

で、今日もつらいつらいと言いながらいろいろガチャガチャやっていたらデーモン再起動無しに状況を切り抜けられたのでそのメモです。

ちなみにDockerは1.11です。


Removal In Progressとなって削除できないコンテナを削除する

ググると、 /var/lib/docker/container/{container id} 消せとか出てくるんですけど、僕の状況だと既にそんなディレクトリ無かったり、安全のためにデーモン止めてから作業しろとあったりして、いや止めたくないんじゃみたいな気持ちがあったのですが、そういう場合、当該コンテナが実行しているプログラム(CMDとかENTRYPOINTに指定されているやつ)を何とか探して

$ ps aux | grep {プログラム名}

でコンテナ内のプロセスを探します。

その親プロセスが多分

docker-containerd-shim {container id} /var/run/docker/libcontainerd/{container id} docker-runc

みたいなやつになっていると思うので、このコンテナIDを指定してdocker stopします。恐らくdocker ps -aしてもこのコンテナIDはいないと思うんですが、何か知らないですけど通ります。

多分何らかの原因でコンテナ(プロセス)の停止に失敗してリソース掴みっぱなしになってるとかで削除できなかったんでしょうね。

これで僕の環境だとRemoval In Progressが消えました。


startしようとするとエラーになるコンテナをstartする

エラーになるコンテナIDを控えておいて

$ ps aux | grep {container id}

プロセスを探します。

そうすると多分上記と同じく

docker-containerd-shim {container id} /var/run/docker/libcontainerd/{container id} docker-runc

みたいなプロセスが出てくると思うんですが、今度はさっきと逆で、このプロセスの子プロセスをみます。

それがこのコンテナのCMDやらENTRYPOINTやらで指定したコンテナ内で動いてるPID 1だと思うんですが、そのPID 1と思われるプロセスをkillすると、そのプロセスと一緒に上記のdocker-containerdほげほげみたいなプロセスも一緒に死ぬとおもいます。

killしても死なない場合は kill -KILLで殺しますが、その場合、docker-containerdほげほげが残るのでそいつもkillします。

この状態で、さっきstartに失敗したコンテナを再度docker startすると起動に成功します。

これもきっとなんかしらの原因でプロセス殺すのに失敗してたんでしょうね…。


まとめ

社会は厳しいやっていくしか無い


おまけ

と言う話もあるんですが、overlayfsはinode食い潰すという問題があり、問題が改善されているoverlayfs2はDocker1.12以降かつカーネル4以上となっておりこちらも色々厳しい。CentOSカーネルが4以上になるのはいつですかね…。

*1:弊社のDocker環境は1ホスト辺りに複数のアプリAPIが雑多に乗っているのでデーモン落とそうと思うと色々だるい

2016-03-16

公式のDockerRegistryにオレオレ証明書入れてバックエンドをS3にしたらpushとかがうまくいかなかったメモ

大して量無いので経緯と結論だけ。


insecure-registryの設定なしにプライベートDockerRegistry使おうと思うと証明書発行して突っ込む必要ありますが、まさかプライベートレジストリで使うだけでちゃんとした証明書買うのもだるいので大体オレオレ証明書突っ込むと思います。

が、証明書作って

/etc/docker/cert.d/{registry host}/

に入れるとDockerデーモンがローカルに元々入っているルート証明書を使わなくなるので、DockerRegistryとの通信はできますが、逆に言うとDockerRegistryとしか通信できなくなり、バックエンドにS3使ってる場合「x509: certificate signed by unknown authority」とか言われてつらい。


解決方法はDockerプライベートリポジトリ(Docker Registry)構築レシピ | Developers.IOにある通り、ルート証明書へのシンボリックリンクを突っ込めばまぁ行ける。行けるけども…。


それならもう正直insecure-registryに指定したほうが楽じゃんみたいな世界となった。

2015-12-19

富山の寒ブリ食べる会をやりました


こちらです

なぎせさんが持ってきた日本海の天然寒ブリを東京で食べる会 - connpass


約1年弱程前の

と言うつぶやきに端を発しています。


半年以上会場探しとかをサボっていて、いざ準備し始めた頃に現実世界がいろいろバタバタしてあまり時間が取れず、計画不足感があり参加して頂いた皆様には申し訳ありませんでした。


振り返り

  • 会場は角筈地域センター
    • 18人であの規模で調理しようと思うと調理時30人を交渉するクッキングルームでもやや手狭
    • ボウル、バット、各種鍋(圧力鍋含む)、各種食器、箸、すり鉢、レンジ、ジャー等大体のものは揃ってる
    • ラップなどの消耗品、調味料などは無し
      • ただし近くにコンビニとスーパーがあるのである程度現地調達できる
    • 食器調理器具の片付けは洗って拭いて元の場所に戻すまで
      • キッチンペーパーだと足りないか不便なので清潔なふきんを何枚か用意したほうが良さそう
    • 手を消毒する消毒用アルコールはあるけど手洗い用石鹸はない
  • 時間
    • 作業がシェアードナッシングに分担する形が決まってくるまでは混乱気味になり時間がかかる
    • 何やかんやで片付けには1時間くらいかかる
      • 会場は終了時間で鍵返却を含む完全撤収なので早め早めに動いたほうが良い
    • 今回夜間1と夜間2の2枠の時間(約3時間)で会場を予約したけど時間的には結構厳しかった
      • 作りながらある程度出来上がった時点で流れで「いただきます」になり、食いながら流れで片付けに移行し終始バタバタしてしまった
  • 料理
    • 僕は料理わからないので基本的になぎせさんに丸投げだった
    • 料理は割と残った(食べる時間があまりなかったというのもある)
  • ごみ処理
    • 夜間に生ごみをスポットで引き取ってくれる業者はこの宇宙には存在しないと思ったほうが良い
    • ゴミの量はぎゅうぎゅう詰めて45Lのゴミ袋1つとペットボトルビン類が数本と言う感じ
    • 今回はタクシーで直接ゴミを家まで持ち帰ったがもちろん乗車拒否される可能性もあるのでごみ処理に課題があったと言う感じ
      • ただしタクシーで持って帰れるなら経費はタクシー代だけなので業者に頼むよりは割安になる感(距離による)
  • 費用
    • 最終的にかかった経費は約10万
      • 一人あたり約6000円
      • 比率として大きいのはやはりなぎせさん費用
        • 食材費、とくにブリ
        • 遠征費用(宿代、往復のガソリン代等)
      • 詳しい内訳忘れたけど東京分の費用は2万前後ぐらいだったと思う
        • 主には会場費(4400円)とゴミ持って帰るためのタクシー代(約1万)
        • 現地調達の野菜類やジップロック、薬味、調味料、買い足しのキッチンペーパー等は全体からすると誤差の範囲内という感じ(数千円くらい)
    • 当初30人計算だった所実質18人だったのでもっと参加費上がるかと思ったけどそうでもなかった
      • ひとえになぎせさんの買い付けスキルの賜物
  • ぶり
    • ぶり1匹を18人で食べると一人あたり450g程
    • 味に関しては美味しかった以上の感想がない

こんなところですかね。

参加して頂いた皆さん、協力して頂いた皆さん、色々至らなくて申し訳なかったですがありがとうございました!

f:id:kamekoopa:20151219183837j:image

2015-10-20

Go言語の開発環境構築したメモ

メモです。

Goをインスコするためにgvmをインスコする

Ubuntu使ってるんですがaptにあったのなんかすごい古いっぽかったのでソースインストールかなぁと思ってたら、どうやらgvmと言うrbenvみたいなやつがあるらしくそれ使ったほうがいいとのことです。

gvmをインスコするためにgvmを削除する

gvmって聞いて、あれ?Groovyでもそんなんなかったっけ?と思ったらやっぱりありました。なんかそれでgvmはsdkmanに名前変わったらしいです。

gvm(groovyの方)は起動して指示に従えばさくっとsdkmanに更新され、互換性のために.gvmディレクトリが.sdkmanディレクトリへのシンボリックリンクに変わったり、gvmコマンドがsdkコマンドへのaliasに変えられたりします。

が、この状態でgvm(golangの方)をインスコするといろいろ競合してつらい思いをすることになるっぽいので、sdkmanへの更新が終了したらaliasと.gvmリンクを削除しておきます。

gvm(golangの方)をインスコする

ググれば出てきます。

pkgsetを作る

golangはGOPATH決めたらライブラリ含め全てのソースはその配下に収める流儀で好きな場所にアプリディレクトリ作れないらしく、例えばIDEがworkspaceとかprojectsディレクトリとかを持ってる場合、クッこれが世界の選択か…と言う気分になるらしいです。

gvm使うとpkgsetとかいうのが作れて、任意のGOPATHが作れていろいろ切り替えられるらしいです。

mnrtks’s blog | gvmを用いてRevelの開発環境を作成

に従って、

cd ~/IdeaProjects
mkdir hogehoge
cd hogehoge
gvm pkgset create --local
gvm pkgset use --local

とすると、アプリごとにローカルなpkgsetを作れていろいろ分離できるとのこと。

IntelliJ IDEAgolangプラグイン入れる

IDE厨なので何をするにもIDEが無いと何も出来ないのでプラグイン入れます。

IntelliJ IDEAでGoLangの環境構築 2015春 - tehepero note(・ω<)

見れば大体大丈夫だと思います。

ただ、ローカルのpkgsetの様子まではIDEAさん分からないのでGOPATH分からんぞみたいなことを警告してきます。

その場合は、上記の例で言うとhogehogeディレクトリを指定すれば大丈夫っぽいです。

Hello World 実行する。

src/{yourdomain}/{name}/{app} でHello World書きます。

コード右クリックして実行選ぶとビルドされて実行され、golang完全にマスターできます。

バージョン管理

hogehoge/src/{yourdomain}/{name}/{app} でgit initするとのことです。

まとめ

なんか世界観がいろいろ違って大変でした(こなみかん)