トップ 最新 追記
RSS feed

ただのにっき


2020-07-23(木) [長年日記]

WSLの代わりにDockerを使う

自宅で仕事をするようになって、さすがにWSLのI/Oの遅さに嫌気が差してきた今日このごろ。

世間的にはWindows10 2004*1のWSL2がたいへん評判が良くて、おれもはやく移行したいんだけど、2004にまだけっこう致命的なバグがあって、関係するデバイスを持つうちのPCにはまだ当てられそうにない。PCも古いので買い換える予定なんだけど、まだ機種選定中なものだから、WSL2までのつなぎとして、同じHyper-V上の仮想環境であるDockerをWSLの代わりに使うことにした。

といってもやったことはそんなに難しくはない。ちょっとした自作ツールはだいたいRubyで書いてあるので、ベースにするイメージを「ruby:2」にしてDockerfileを書く。rubyの公式イメージは使い慣れたdebianをベースにしているので都合がいい:

FROM ruby:2
ENV USER tdtds
ENV LANG ja_JP.UTF-8
RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y sudo docker ...【必要なパッケージ諸々】 && \
    apt-get clean && apt-get autoremove -y && \
    echo Asia/Tokyo > /etc/timezone && \
    dpkg-reconfigure -f noninteractive tzdata && \
    sed -i "s/# $LANG/$LANG/" /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales && \
    update-locale LANG=$LANG && \
    gem install 【必要なgem諸々】
RUN useradd -m -u 1000 $USER && \
    usermod -aG sudo $USER && \
    chsh -s /usr/bin/zsh $USER
COPY docker-init.sh /usr/local/bin/
USER $USER
CMD /usr/local/bin/docker-init.sh

docker-init.shの中身は基本的に「sleep infinity」でいいんだけど、docker run後にマウントされたホスト側のファイルをコピーしたり、ユーザ権限で一度だけ走らせたい諸々の設定なんかを書いてもいい。おれはホスト側にあるdotfilesをホームディレクトリにコピーするコマンド群を書いてる。

これをビルド:

docker build . -t debian

入れるパッケージが多くなると、さすがにそこそこ時間がかかる。いままでこの手の設定はAnsibleでコツコツ書いてメンテしていたのに、Dockerfileでは冪等性を気にせずダラダラ書けてしまって、堕落もいいところだ。うっかり変なものを入れて環境を汚してしまってもビルドし直せばいいというのは、精神的な安定が得られて良い。

ビルドできたらdetachモードで実行する:

docker run -d -v C:/:/mnt/c \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always --name debian debian

C:をまるごとマウントするのは大胆すぎるかも知れないので、使いながら絞っていく予定。/var/run/docker.sockをマウントすると中からdockerコマンドでホスト側のdockerを呼び出せる。あと--restart=alwaysでホストOS再起動時とかにこのコンテナを自動実行してくれるようにする。

ところで、なにか変更を加えるたびにDockerfileを修正してビルドし直すのは馬鹿げているので、ベースイメージが変わったとき以外はこれでごまかす:

docker commit debian debian

あとはWindows Terminalに*2こんなセクションを作ればOK:

{
   "guid": "{afde4fd8-6a2e-44bf-869d-548dd9a859f2}",
   "name": "Docker shell",
   "commandline": "wsl docker exec -it debian zsh -l",
},

commandlineには最初、「docker exec ~」とだけ書いていたんだけど、これだとサスペンドするつもりでCtrl+Zを入力するとシェルが死んでしまう。どうやらDockerが提供するttyは端末制御が不完全? wslコマンドでラップすることでこの問題は抑制できたので、当面はこれで。「脱WSLする」という当初の目的が最後の最後で崩れているが見なかったことにする。

で、使ってみるとかなり快適なので、これはひょっとして、WSL2いらないんじゃね? みたいな気分になってる。もちろんホスト側のファイルシステムにアクセスするのはやや待たされるんだけど、それはたぶんWSL2でも同じだしなぁ。メモリ食いと言われているWSL2に比べて、Dockerではリソースの制限できるし。

*1 後世のためのメモ: 2004年版の古いエディション、という意味ではない(Windows Serverのネーミングとかぶるのでややこしい)。Windows10においては2020年4月のアップデートという意味である。

*2 ターミナルも最近Windows Terminalに移行した。開発環境もvscodeだし、なんかMicrosoft大スキ人間みたくなってる(笑)。


2020-07-21(火) [長年日記]

グスタフ、新品が好き

[写真]新品のガーゼケットの上に陣取るグスタフ

猫が10歳をすぎて新しい習性(?)を身につけたりするものかどうかよく知らないんだけど、グスタフの最近の流行りは「新しいファブリック」らしい。

先週、新しい枕カバーをおろしたところ、すぐにその枕の上にどっかと寝転がって満足気に寝るようになったんだけど(人間が寝るときにはどいていただく)、今日、こんどは夏に向けて新品のガーゼケットをおろしたら、そっちに移動して一日中そこで寝るようになった。夜になってもおれの足元(のガーゼケットの上)で寝るものだから、暑くてしょうがない。

どちらもいったん洗ってから使っているから、そんなにド新品って感じでもないんだけど、何が気に入ったんですかね……。

Tags: gustav

2020-07-19(日) [長年日記]

ミリシタ3周年記念イベント「CHALLENGE FOR GLOW-RY D@YS!!!」

[スクリーンショット]250138pt 67710位

ミリシタ3周年おめでとう!(出遅れ)

で、恒例になった「育成するとSSR+にまでなる周年記念衣装3種付きSR」をちょっとがんばれば全52人分獲得できるイベントだが、実は11日の終了直前に相当なバグが発覚し、それの再集計やらなんやらで今日になってようやくランキングが公開された。結局八方丸く収まる形での再集計ができなかったようで、いろいろ歪な形での幕引きになったようだ。おれはご覧の通りぜんぜんがんばらなかったクチなので(笑)、なんの影響も受けてないんだけど(詫びガシャチケだけおこぼれをもらうタイプ)、上位陣はヒヤヒヤだったろうなぁ。

これを「プロデューサー交代によるレベルダウン」とみるか「コロナ禍の影響が出てきた」とみるか、まぁ両方だとは思うけど、これまであまりに順調で完璧な運営で怖いくらいだったんだし(ついこの間までほぼ3年間メンテによる停止がなかった)、これくらいは許容範囲じゃね? とは思うんだけど。

7thライブが中止になって、記念曲「Glow Map」のMVと同じ風景を観ることがなかわなかったのが悲しいし、こないだ発表になった(待ちに待った)TVアニメ化をみんなと喜べなかったのが悔しい。なによりこの感情のぶつけ先がないのがまったく歯がゆいのだけど、おれらより中の人たちの方がもっと残念だろうしなぁ、これからも応援するよ。ガシャには課金しないけど(笑)。

THE IDOLM@STER  MILLION THE@TER WAVE 10 Glow Map
765 MILLION ALLSTARS
ランティス
¥2,977


トップ 最新 追記
RSS feed