Day1:Linuxのしくみ - 終わりなき旅 -
お久しぶりです。
前回のGCPシリーズは何とか一週間完走、アウトプットを継続して行う大変さや効果を実感しました。
ブログの更新はいったん終えましたが、今年中の GCP Associate 資格取得を目指して引き続き学んでいきます。
本日からは第二弾として、「Linuxのしくみ」について学び始めようと思います。
Linuxの「しくみ」を完全に理解したい。
次のお題は何にしようかと考えていたころ、少し前にとある事象に悩んだ事を思い出しました。
Dockerではdb接続できるtomcat、K8s環境だとconnection poolingが作れずエラーになる事象が解決しないまま週末を迎えることになってしまったのが心残り・・・
— 丼 (@domb_ri) November 1, 2019
この問題は解消(というか回避)しました。
原因は「DB接続用jarを配置している CLASSPATH が Kubernetes 環境だと認識されず、見つけてもらえなかった」から。
どうやら「Docker on Ubuntu 環境だと CLASSPATH に記載してなくても catalina/bin 配下を勝手に path 通してくれてるらしい?のに、K8s環境では CLASSPATH に明記しないと認知してくれないっぽい」という挙動だったのです。
うーん、なんだろう。。
実はもう一つ問題になったことが「確かにあるはずのclassファイルが、K8sでは読み込めてDockerでは読み込めず404エラーになる」という現象。
これは LANG=ja_JP.UTF-8 の設定有無が挙動を左右している様子でした。
Dockerイメージを固めたときに設定してあった LANG は認識されておらず、Deployment に記載した LANG が効いているからK8s環境では正しく動作する、と。
ここで二つの疑問が生まれました。
- Docker にとっての環境変数って何だろう?
- そもそも環境依存の設定をDockerイメージ作る段階で埋め込んでいいのか?
一先ず Docker のしくみを再確認しようと思い、自分で調べたり、職場の方と話したりした末に以下の考えにたどり着きました。
職場で「Nginx docker imageのディストリビューションってなに」と聞かれたり、コンテナの絵の中に「OS」の文字が現れたりしたのだけど、
— 丼 (@domb_ri) November 13, 2019
そもそもここが曖昧なんじゃないかと思い始めている。みんなが。https://t.co/c9uUy3X28Y
- Dockerコンテナと、ホストの関係性の理解が曖昧なのではないか?
よし、この発見を職場でも共有してみよう!
と思ったはいいものの、この記事をよくよく読むと、DockerというよりかはLinuxというOSの在り様を理解していないと、なんだか輪郭がぼんやりしてしまうのです。
つまり、
Linuxの「しくみ」を完全に理解したい。
— 丼 (@domb_ri) November 14, 2019
やっと表題にたどり着いた。
こういう経緯から、Linuxのしくみを完全に理解したい終わりなき旅が幕を開けたのでした。
To be continued...
P.S. 終わりなき旅といえばこちら。いい曲だった(実は初めてちゃんと聴きました)
www.youtube.com