DockerはLinuxが持つコンテナ技術を使ったアプリケーション仮想化技術です。
アプリケーションを動かすために必要な各種ライブラリ等を一つのDockerイメージに
まとめることで、さまざまな環境へのデプロイが容易になります。
例えばWindowsやmacOSを使って開発・テストしたDockerイメージを
そのままクラウド上のLinuxの本番環境で使うことができます。
クラウド上の環境が仮想マシンであるため、Dockerは仮想マシンと併用して使うことが多いですが
仮想マシン技術とは無関係の技術です。実際Linux環境において仮想マシンは必須ではありません。
WindowsとmacOSでは仮想マシンを使いますが、これはOSがLinuxではないからです。
Dockerは主にアプリケーションを動かすために設計されているのでデータを保存するのには適していません。
データはDockerイメージの外部、ボリュームを使ってホスト環境に保存するかネットワーク通信で外部サーバーに保存します。
またDockerコンテナは一つのサービスを実行し、複数のサービスが必要な場合はdocker-composeやk8sなどを使って連携させます。
Dockerを仮想マシンの代替として、コンテナ内で複数のサービスを起動しようとすると困難が待ち受けています。
それはDockerの設計方針とあっていないからです。
Dockerイメージ(Dockerfile)はアプリケーション開発者が作成します
動かすのに必要なもの全てがDockerイメージに含まれるので
インフラ担当者はそれを動かすだけ、本来のインフラの作業に集中できるようになります
Dockerは主にウェブ業界でサービスのデプロイの必須技術になりました
情報共有しましょう
http://www.docker.io/
前スレ Docker Part4
https://mao.5ch.net/test/read.cgi/linux/1597591176/
注意 Dockerを仮想マシンの代替として使いたいと考えてる人は、DockerではなくLXCを使いましょう
LXC(Linux Containers)
https://mao.5ch.net/test/read.cgi/linux/1330826939/
Docker Part5
レス数が900を超えています。1000を超えると表示できなくなるよ。
2020/12/02(水) 19:13:07.36ID:y3Zdr8oB
2021/03/10(水) 17:23:38.64ID:+wwE/KLD
勝ちとか負けとか変なこだわりがある人がいるんすねぇ...
2021/03/10(水) 17:33:58.17ID:Q8+Vst7D
明らかにいつもの奴だしワンパだからレスバしても発展性ないんだよね
ワッチョイが待ち遠しい
ワッチョイが待ち遠しい
2021/03/10(水) 20:21:58.42ID:ivn403GC
レスバに勝ちたい!
812運用情報臨時板でワッチョイ導入議論中
2021/03/10(水) 20:23:03.03ID:uMYHMW6J あなたはそうなんですね
813運用情報臨時板でワッチョイ導入議論中
2021/03/10(水) 22:19:10.06ID:jGOWOSeF Docker images and their layers explained
https://dominikbraun.io/blog/docker/docker-images-and-their-layers-explained/
https://dominikbraun.io/blog/docker/docker-images-and-their-layers-explained/
814login:Penguin
2021/03/11(木) 21:12:05.15ID:T3GHjcYC815login:Penguin
2021/03/11(木) 21:27:47.14ID:/6wLYBLL イメージレイヤーってすごいよね
複数イメージで共有してディスク領域や転送時間を節約できるし
いろいろ変更してもコンテナを立ち上げ直したら綺麗さっぱり消えるし
複数イメージで共有してディスク領域や転送時間を節約できるし
いろいろ変更してもコンテナを立ち上げ直したら綺麗さっぱり消えるし
816login:Penguin
2021/03/11(木) 23:39:18.14ID:T3GHjcYC 別に何も凄くないw
2021/03/12(金) 10:29:24.57ID:Is0xlw0S
はてぶでバズってたけど
https://sysdig.jp/blog/dockerfile-best-practices/
特定のUIDにバインドしない
↑
UIDをバインドしないとパーミッションで書き込みできないんだよなLinuxでは
https://sysdig.jp/blog/dockerfile-best-practices/
特定のUIDにバインドしない
↑
UIDをバインドしないとパーミッションで書き込みできないんだよなLinuxでは
818login:Penguin
2021/03/12(金) 10:43:06.08ID:Ckt9hMHN >>817
いいね。ベストプラクティスが広まればVMの代わりとして使おうとするやつも減るかも
これらのベストプラクティスはVMとして使えなくする制約に近いから
1. 不要な特権を避ける
コンテナを root で実行しないようにする
特定のUIDにバインドしない
実行可能ファイルを root が所有し、書き込み可能ではないものする
2. 攻撃対象を減らす
マルチステージビルドを活用する
distroless イメージを使うか、ゼロからビルドする
イメージを頻繁に更新する
暴露されたポートに注意する
3. 機密データの漏洩を防ぐ
Dockerfileの命令にシークレットや認証情報を入れないようにしましょう
ADDよりもCOPYを優先してください
Dockerのコンテキストを意識し、.dockerignoreを使用する
4. その他
レイヤーの数を減らし、インテリジェントに並べる
メタデータとラベルを追加する
lintersを活用してチェックを自動化する
開発中にイメージをローカルでスキャンする
5. イメージのビルドの先には
docker socketとTCP接続を保護します
イメージに署名し、実行時に検証します
タグの変異を避ける
環境を root で実行しない
ヘルスチェックを含める
アプリケーションの機能を制限する
いいね。ベストプラクティスが広まればVMの代わりとして使おうとするやつも減るかも
これらのベストプラクティスはVMとして使えなくする制約に近いから
1. 不要な特権を避ける
コンテナを root で実行しないようにする
特定のUIDにバインドしない
実行可能ファイルを root が所有し、書き込み可能ではないものする
2. 攻撃対象を減らす
マルチステージビルドを活用する
distroless イメージを使うか、ゼロからビルドする
イメージを頻繁に更新する
暴露されたポートに注意する
3. 機密データの漏洩を防ぐ
Dockerfileの命令にシークレットや認証情報を入れないようにしましょう
ADDよりもCOPYを優先してください
Dockerのコンテキストを意識し、.dockerignoreを使用する
4. その他
レイヤーの数を減らし、インテリジェントに並べる
メタデータとラベルを追加する
lintersを活用してチェックを自動化する
開発中にイメージをローカルでスキャンする
5. イメージのビルドの先には
docker socketとTCP接続を保護します
イメージに署名し、実行時に検証します
タグの変異を避ける
環境を root で実行しない
ヘルスチェックを含める
アプリケーションの機能を制限する
2021/03/12(金) 11:38:18.03ID:fsIGodsX
やっぱdockerならではのめんどくささってあるよな
820login:Penguin
2021/03/12(金) 14:34:19.65ID:M0oFRexN >>819
これが面倒って感じるんだな ほぼ Dockerfile だけなのに無知は恥だよ
これが面倒って感じるんだな ほぼ Dockerfile だけなのに無知は恥だよ
821login:Penguin
2021/03/12(金) 15:29:28.39ID:Ckt9hMHN822login:Penguin
2021/03/12(金) 15:41:38.41ID:y0GdntGH >Dockerfileの命令にシークレットや認証情報を入れないようにしましょう
ってDockerは単体でシークレット提供して無いじゃん。
何でdaemonで動いてる癖にdocker composeから使えるsecret提供しないんだ?
ってDockerは単体でシークレット提供して無いじゃん。
何でdaemonで動いてる癖にdocker composeから使えるsecret提供しないんだ?
823login:Penguin
2021/03/12(金) 16:05:45.99ID:M0oFRexN っていっても今じゃ Buildx もあるしな
824login:Penguin
2021/03/12(金) 16:25:00.07ID:Ckt9hMHN >>822
お前シークレットを何だと思ってるんだ?
アプリのバイナリの中に秘密情報入れないだろ
Dockerも同じでDockerイメージの中に秘密情報を入れたりしないんだよ
で、Dockerコンテナ(=アプリ)起動時に、Dockerの外の情報に
環境変数やボリュームでアクセスできるんだから何の問題もない
お前シークレットを何だと思ってるんだ?
アプリのバイナリの中に秘密情報入れないだろ
Dockerも同じでDockerイメージの中に秘密情報を入れたりしないんだよ
で、Dockerコンテナ(=アプリ)起動時に、Dockerの外の情報に
環境変数やボリュームでアクセスできるんだから何の問題もない
825login:Penguin
2021/03/12(金) 16:26:32.40ID:Ckt9hMHN 訂正
Dockerコンテナ(=アプリ)起動時に、環境変数やボリュームで
認証情報を含む任意の情報を渡せるんだから何の問題もない
Dockerコンテナ(=アプリ)起動時に、環境変数やボリュームで
認証情報を含む任意の情報を渡せるんだから何の問題もない
826login:Penguin
2021/03/12(金) 16:28:55.28ID:y0GdntGH >>824
馬鹿は黙っててね。よろしくw
馬鹿は黙っててね。よろしくw
827login:Penguin
2021/03/12(金) 16:30:36.11ID:Ckt9hMHN 馬鹿じゃないから黙らないし
何も言い返せないのはお前だ
何も言い返せないのはお前だ
828login:Penguin
2021/03/12(金) 16:32:17.57ID:y0GdntGH 何度もいうが匿名掲示板で馬鹿を見抜くのもエンジニアのスキル。
とっくの昔に概出なのに理解できてねーとか
マジなんでそんな馬鹿が生きていけるんだ?
とっくの昔に概出なのに理解できてねーとか
マジなんでそんな馬鹿が生きていけるんだ?
829login:Penguin
2021/03/12(金) 16:33:38.32ID:Ckt9hMHN 戯言言うばかりで「言い返さない」のが何よりの証拠
2021/03/12(金) 16:38:18.19ID:rhpCrQLw
> 概出
バカは見つかったみたいだな
バカは見つかったみたいだな
831login:Penguin
2021/03/12(金) 16:41:22.67ID:y0GdntGH 馬鹿って本当、大変だよな!一人でシコシコ自己満足のプログラムばっかり作って悦に浸ってるんだろうw
チーム開発なんてやったことも無いんだろうねw
チーム開発なんてやったことも無いんだろうねw
832login:Penguin
2021/03/12(金) 16:44:40.33ID:Ckt9hMHN な?「言い返してない」の部分を見なかったことにしてるだろ?
833login:Penguin
2021/03/12(金) 16:53:57.09ID:y0GdntGH ヒントは概出。
ちゃんと過去を遡れば話は出ている。
馬鹿には理解できないだろうけどw
・・・俺って優しいな!771とか馬鹿発見したらレスしないもんなw
カネも貰ってないのに手取り足取り教えてあげたしねーけどw
お前のレスは大体一発目で「あ、この人現場で作業してないな」ってのが透けて見えるんだよw
その癖謎の上から目線だから、ただの馬鹿にしか見えないww
本当、馬鹿ってどうしようもないよな!
ちゃんと過去を遡れば話は出ている。
馬鹿には理解できないだろうけどw
・・・俺って優しいな!771とか馬鹿発見したらレスしないもんなw
カネも貰ってないのに手取り足取り教えてあげたしねーけどw
お前のレスは大体一発目で「あ、この人現場で作業してないな」ってのが透けて見えるんだよw
その癖謎の上から目線だから、ただの馬鹿にしか見えないww
本当、馬鹿ってどうしようもないよな!
834login:Penguin
2021/03/12(金) 16:58:18.06ID:Ckt9hMHN 言い訳ばかり口達者
835login:Penguin
2021/03/12(金) 17:10:24.40ID:M0oFRexN またこの流れだ…
2021/03/12(金) 17:31:49.61ID:Is0xlw0S
UIDを指定できるようにするべきだね
そんなのWindowsだったらはまらないけど
Linuxで動かすときにボリュームマウントしたときにファイルの編集ができないカラ
そんなのWindowsだったらはまらないけど
Linuxで動かすときにボリュームマウントしたときにファイルの編集ができないカラ
2021/03/12(金) 18:44:44.72ID:I1TSqDN6
838login:Penguin
2021/03/12(金) 20:11:20.05ID:M0oFRexN >>837
じゃあそのまま時代遅れの老害で居てください笑
じゃあそのまま時代遅れの老害で居てください笑
2021/03/12(金) 23:04:53.40ID:FvB/dbLo
https://sysdig.jp/blog/dockerfile-best-practices/ の意識が高すぎて読めなかった
2021/03/12(金) 23:13:44.28ID:Si74965R
特定のUIDにバインドしないってどういうことだ
まいかいランダムにUID決めるってか?
まいかいランダムにUID決めるってか?
841login:Penguin
2021/03/12(金) 23:15:54.82ID:Ckt9hMHN2021/03/12(金) 23:56:16.22ID:FvB/dbLo
>>840
https://sysdig.jp/blog/dockerfile-best-practices/
> Openshift はデフォルトでは、コンテナを実行する際にランダムな UID を使用します。
「Openshiftは絶対に使わない」ことが保証されているなら無視しても良いかも知れない
https://sysdig.jp/blog/dockerfile-best-practices/
> Openshift はデフォルトでは、コンテナを実行する際にランダムな UID を使用します。
「Openshiftは絶対に使わない」ことが保証されているなら無視しても良いかも知れない
843login:Penguin
2021/03/13(土) 00:03:06.41ID:67vo3F6m YAGNI
Openshiftへの対応が必要になることはない
Openshiftへの対応が必要になることはない
2021/03/13(土) 00:55:31.44ID:fBnyEFkA
毎回UID違うってボリューム使わんのか
2021/03/13(土) 02:05:10.87ID:iF+JSheD
OpenShiftなんか非対応で結構、むしろ積極的に非対応にすべき
IBMがオンプレや自社クラウドで顧客を囲い込むためだけに存在する有害な技術だよ
IBMがオンプレや自社クラウドで顧客を囲い込むためだけに存在する有害な技術だよ
846login:Penguin
2021/03/13(土) 08:24:06.51ID:OV1njusz dockerHubにあるApacheとかnginxのイメージって最初からroot以外で動いてるよね?
2021/03/13(土) 08:49:28.15ID:OkB9sWH0
UIDの話はDockerの問題じゃなくてOpenShift特有の問題
848login:Penguin
2021/03/13(土) 11:03:31.56ID:w6Cw4gKa Why do my applications run as a random user ID?
https://cookbook.openshift.org/users-and-role-based-access-control/why-do-my-applications-run-as-a-random-user-id.html
プロジェクト固有のUIDを割り当てる事で
マルチテナント環境でも
他のアプリのデータが読める事が無いようにって事らしい
そんな事はあり得ないなんて思われがちな
他のセキュリティ対策が破られるという想定外を想定するのがレッドハットなんだろう
A Guide to OpenShift and UIDs
https://www.openshift.com/blog/a-guide-to-openshift-and-uids
イメージに予めファイルやディレクトリを入れる時に
アプリが読み書きするファイルやディレクトリはrootグループに所属させる
rootグループに所属してるユーザーなら読み書き出来るようになるので、
UIDがプロジェクト固有のランダムIDでも問題ないって事らしい
それだとroot所属してる他プロジェクトのユーザーも
読み書き出来ちゃうんでは?って思うけど
新しく作成するファイルはグループIDが0(root)じゃなくてそのユーザーIDと同じグループIDになるんじゃね?
しらんけど
https://cookbook.openshift.org/users-and-role-based-access-control/why-do-my-applications-run-as-a-random-user-id.html
プロジェクト固有のUIDを割り当てる事で
マルチテナント環境でも
他のアプリのデータが読める事が無いようにって事らしい
そんな事はあり得ないなんて思われがちな
他のセキュリティ対策が破られるという想定外を想定するのがレッドハットなんだろう
A Guide to OpenShift and UIDs
https://www.openshift.com/blog/a-guide-to-openshift-and-uids
イメージに予めファイルやディレクトリを入れる時に
アプリが読み書きするファイルやディレクトリはrootグループに所属させる
rootグループに所属してるユーザーなら読み書き出来るようになるので、
UIDがプロジェクト固有のランダムIDでも問題ないって事らしい
それだとroot所属してる他プロジェクトのユーザーも
読み書き出来ちゃうんでは?って思うけど
新しく作成するファイルはグループIDが0(root)じゃなくてそのユーザーIDと同じグループIDになるんじゃね?
しらんけど
2021/03/13(土) 12:25:37.17ID:Iwj7PB1I
テナントごとに異なるUIDが割り当てられればいいだけであって、別にランダムにする必要はないよね
むしろランダムにしたせいでうっかりかぶっちゃいました、ランダムなのでテスト見逃しましたみたいな変なミスしそう
むしろランダムにしたせいでうっかりかぶっちゃいました、ランダムなのでテスト見逃しましたみたいな変なミスしそう
2021/03/13(土) 13:46:29.04ID:fKVUCcqC
root を取られないように、
UID に、1,000 を足すようなシステムがあったような
1 → 1,001
2 → 1,002
UID に、1,000 を足すようなシステムがあったような
1 → 1,001
2 → 1,002
851login:Penguin
2021/03/13(土) 13:54:03.31ID:w6Cw4gKa2021/03/13(土) 14:12:15.09ID:kGTBX6vY
>>849
他のテナントのUIDが推測できればそれを攻撃に利用できる可能性もないとは言えないからでしょ
他のテナントのUIDが推測できればそれを攻撃に利用できる可能性もないとは言えないからでしょ
853login:Penguin
2021/03/13(土) 14:35:10.80ID:OkB9sWH0854login:Penguin
2021/03/13(土) 16:08:24.37ID:w6Cw4gKa namespaceを作るとUID、GIDの範囲が自動的に割り当てられ
同じnamespace内のポッドは同じUIDとグループIDになる
これによって他のnamespaceやホストマシンで動いてるプロセスが使用してるファイルなど、
無関係のファイルを読み書き出来てしまうのを防ぐ
何も指定しないとUIDとGIDは範囲内で使える最初の値になるようだ
だから同じ名前空間内のボリュームだったら
どのポッドも読み書きできるね
同じnamespace内のポッドは同じUIDとグループIDになる
これによって他のnamespaceやホストマシンで動いてるプロセスが使用してるファイルなど、
無関係のファイルを読み書き出来てしまうのを防ぐ
何も指定しないとUIDとGIDは範囲内で使える最初の値になるようだ
だから同じ名前空間内のボリュームだったら
どのポッドも読み書きできるね
855login:Penguin
2021/03/13(土) 19:00:33.35ID:CGLHT5pS podがどうのこうのと言っている時点で既にDockerの話じゃないんだけどな。
不特定のnode, podに対してUSER指定させたらマルチテナント環境でバッティングするから
ランダムにしよーぜなんてのはDockerレベルで考える事じゃない。
不特定のnode, podに対してUSER指定させたらマルチテナント環境でバッティングするから
ランダムにしよーぜなんてのはDockerレベルで考える事じゃない。
856login:Penguin
2021/03/13(土) 19:28:22.80ID:nRE6g312 今話をしてるのはUIDの話であって
USER指定の話ではない
USER指定の話ではない
857login:Penguin
2021/03/13(土) 19:29:16.54ID:nRE6g312 >>6
Chromeでもエラー出るようになったwww
Chromeでもエラー出るようになったwww
858login:Penguin
2021/03/13(土) 19:30:38.61ID:nRE6g312 レスする場所間違えたw
2021/03/13(土) 19:38:27.51ID:fBnyEFkA
ほらなdockerならではの面倒くささあるじゃん
860login:Penguin
2021/03/13(土) 19:45:58.13ID:nRE6g3122021/03/13(土) 19:52:26.34ID:fBnyEFkA
はいいつもの奴NG
862login:Penguin
2021/03/13(土) 19:54:41.63ID:nRE6g312 ほらな?逃げただろ。こいつは反論が一切できない。
なぜならNGにして見えないからだw
まあ実際は見てるんだろうがな
だから実際には反論できないというが正解
なぜならNGにして見えないからだw
まあ実際は見てるんだろうがな
だから実際には反論できないというが正解
863login:Penguin
2021/03/13(土) 20:04:57.71ID:w6Cw4gKa2021/03/13(土) 20:07:48.66ID:WuKb+LRj
ランダムなら何度も繰り返し攻撃したらそのうち通るんじゃね
865login:Penguin
2021/03/13(土) 20:12:17.05ID:nRE6g312 この流れでコンテナのサンドボックスが破られるぐらいなら
最初からDocker(コンテナ)を使わずに、サンドボックスの外で
直接動かせばいいとか言うんだろうなw
最初からDocker(コンテナ)を使わずに、サンドボックスの外で
直接動かせばいいとか言うんだろうなw
2021/03/13(土) 21:43:02.83ID:9K/sAZAs
OpenShiftのためだけにUID指定するながベストプラクティスってやべえな
2021/03/17(水) 19:41:38.74ID:ajiqTOqm
Dev image作る人
Ops image使う人
☝あってる?
Ops image使う人
☝あってる?
868login:Penguin
2021/03/18(木) 01:46:57.24ID:4WrbQg+w >>867
あってる
ただしDevが作るイメージとは自分たちで開発したアプリのイメージ
自分たちで開発してないアプリ、オープンソースなどは
Docker公式や開発公式が作ってることが多いので
そういうのをイメージする作業は開発とは言わない
アプリ開発の一環としてDockerイメージも作る
あってる
ただしDevが作るイメージとは自分たちで開発したアプリのイメージ
自分たちで開発してないアプリ、オープンソースなどは
Docker公式や開発公式が作ってることが多いので
そういうのをイメージする作業は開発とは言わない
アプリ開発の一環としてDockerイメージも作る
869login:Penguin
2021/03/18(木) 09:38:04.69ID:QA403diq Introducing fixuid: Tool for Changing Docker Container UID/GID at Runtime
https://boxboat.com/2017/07/25/fixuid-change-docker-container-uid-gid/
One of the most helpful things about using Docker containers for development is that it reduces developer onboarding time from a few days to a few hours or less.
Developers are able to clone a repository, start a container or run Docker compose, and start contributing immediately.
Development containers are often very different from production containers.
They usually include package managers, build tools, SDKs, remote debugging, and more.
Source code can be mounted into the development container via a host mount and changes can be immediately re-rendered via live-reload build tools.
This is where the road gets bumpy – Docker containers run as a single user. Users/groups, UIDs/GIDs, and file ownership must be decided when an image is built with docker build.
Host volumes, however, are owned by a user on the host and the host user's UID may or may not match the container user's UID.
There's an issue in the Moby repository with over 100 comments about this very topic.
Host volumes are mounted using bind mounts in Linux.
There is no way to remap UIDs/GIDs using bind mounts so often development containers end up with a mismatch of UIDs/GIDs.
This is why we created fixuid, a tool to change a Docker container's user/group and file permissions that were set at build time to the UID/GID that the container was started with at runtime.
To explain how fixuid solves this problem, let's take a look at a story about Alice and Bob, who are both developers working with development Docker containers.
https://boxboat.com/2017/07/25/fixuid-change-docker-container-uid-gid/
One of the most helpful things about using Docker containers for development is that it reduces developer onboarding time from a few days to a few hours or less.
Developers are able to clone a repository, start a container or run Docker compose, and start contributing immediately.
Development containers are often very different from production containers.
They usually include package managers, build tools, SDKs, remote debugging, and more.
Source code can be mounted into the development container via a host mount and changes can be immediately re-rendered via live-reload build tools.
This is where the road gets bumpy – Docker containers run as a single user. Users/groups, UIDs/GIDs, and file ownership must be decided when an image is built with docker build.
Host volumes, however, are owned by a user on the host and the host user's UID may or may not match the container user's UID.
There's an issue in the Moby repository with over 100 comments about this very topic.
Host volumes are mounted using bind mounts in Linux.
There is no way to remap UIDs/GIDs using bind mounts so often development containers end up with a mismatch of UIDs/GIDs.
This is why we created fixuid, a tool to change a Docker container's user/group and file permissions that were set at build time to the UID/GID that the container was started with at runtime.
To explain how fixuid solves this problem, let's take a look at a story about Alice and Bob, who are both developers working with development Docker containers.
870login:Penguin
2021/03/19(金) 13:01:11.32ID:edcYEDQK nix使ったらDockerイメージのマージはできないけど
nixのパッケージ使ってDockerイメージ作れば似たような事は出来るね
使いたいCLIツールのパッケージが依存してるランタイムのバージョンが違ってても共存させる事が出来る
No dependency hell
ビルド時にだけ必要なパッケージと
実行時に必要なパッケージが明確に区別されてるので
要らない一時ファイルを誤ってDockerイメージに含める心配がない
nixpkgsのパッケージが豊富だし
無くても自分で書けば良い
GitHubで自作パッケージを公開し、ビルド済みバイナリをcachixに置いておけば
複数のプロジェクトから再ビルドせずに使い回せる
https://mao.5ch.net/test/read.cgi/linux/1597591176/98
98 login:Penguin sage 2020/08/28(金) 11:22:41.35 ID:0ih4XZ3G
イメージのマージ機能はいつになったらサポートされんだ
devcontainer作るときいちいちインストール方法調べてDockerfile書くの不便なんだが
nixのパッケージ使ってDockerイメージ作れば似たような事は出来るね
使いたいCLIツールのパッケージが依存してるランタイムのバージョンが違ってても共存させる事が出来る
No dependency hell
ビルド時にだけ必要なパッケージと
実行時に必要なパッケージが明確に区別されてるので
要らない一時ファイルを誤ってDockerイメージに含める心配がない
nixpkgsのパッケージが豊富だし
無くても自分で書けば良い
GitHubで自作パッケージを公開し、ビルド済みバイナリをcachixに置いておけば
複数のプロジェクトから再ビルドせずに使い回せる
https://mao.5ch.net/test/read.cgi/linux/1597591176/98
98 login:Penguin sage 2020/08/28(金) 11:22:41.35 ID:0ih4XZ3G
イメージのマージ機能はいつになったらサポートされんだ
devcontainer作るときいちいちインストール方法調べてDockerfile書くの不便なんだが
2021/03/19(金) 13:14:23.15ID:dlChmxiq
前にも言ったと思うけど
俺らが本当に欲しかったものってdockerじゃなくてスマートなパッケージマネージャ(とリポジトリ)なんだよね
Container imageってアイデアは失敗だった
俺らが本当に欲しかったものってdockerじゃなくてスマートなパッケージマネージャ(とリポジトリ)なんだよね
Container imageってアイデアは失敗だった
872login:Penguin
2021/03/19(金) 13:43:46.78ID:edcYEDQK 一応nixにもnixパッケージ使って隔離されたNixOS環境を作る
nixos-containerってのがあるがDockerみたいに完璧な隔離ではないらしい
nixos-containerの隔離が完璧になって
自前のバイナリキャッシュも
ローカルのnixストアみたいにGCで最小構成で保存出来たら
Dockerみたいに使えるかも
nixos-containerってのがあるがDockerみたいに完璧な隔離ではないらしい
nixos-containerの隔離が完璧になって
自前のバイナリキャッシュも
ローカルのnixストアみたいにGCで最小構成で保存出来たら
Dockerみたいに使えるかも
873login:Penguin
2021/03/19(金) 15:13:07.02ID:edcYEDQK あらゆるCLIツールがnixでインストール可能になれば
開発環境ではnix-shell使って
本番では必要なパッケージを一つに固めたDockerイメージをk8sとかで使うってやり方が実現できる
そんな世界をまず目指そう
開発環境ではnix-shell使って
本番では必要なパッケージを一つに固めたDockerイメージをk8sとかで使うってやり方が実現できる
そんな世界をまず目指そう
2021/03/19(金) 15:28:10.83ID:OafZaxWN
そうじゃなくて
開発も本番もパッケージはホストにインストールするんだよ
で本番はコンテナにパッケージを読み取り専用でマウントすんの
全部固めたイメージなんてものは要らない
開発も本番もパッケージはホストにインストールするんだよ
で本番はコンテナにパッケージを読み取り専用でマウントすんの
全部固めたイメージなんてものは要らない
875login:Penguin
2021/03/19(金) 16:22:12.70ID:R4CRH11B >>871
> 俺らが本当に欲しかったものってdockerじゃなくてスマートなパッケージマネージャ(とリポジトリ)なんだよね
パッケージマネージャーだけだと
実行するときの分離ができないだろ
「俺らが」じゃなくて「お前が」欲しいものはパッケージマネージャーなので
Dockerでパッケージマネージャー相当のことがしたい
できないのは苦痛だなどと言わないように
お前の目的にあってないのよ
Dockerは開発者が自分で作ったアプリを
デプロイするためのツールだって何度も言ってるだろ
> 俺らが本当に欲しかったものってdockerじゃなくてスマートなパッケージマネージャ(とリポジトリ)なんだよね
パッケージマネージャーだけだと
実行するときの分離ができないだろ
「俺らが」じゃなくて「お前が」欲しいものはパッケージマネージャーなので
Dockerでパッケージマネージャー相当のことがしたい
できないのは苦痛だなどと言わないように
お前の目的にあってないのよ
Dockerは開発者が自分で作ったアプリを
デプロイするためのツールだって何度も言ってるだろ
876login:Penguin
2021/03/19(金) 16:25:51.54ID:edcYEDQK それをやろうとしてるのはnixos-containerじゃね
コンテナ起動時にパッケージへのシンボリックリンクを動的につくるか、
PATHをパッケージの絶対パスで埋め尽くせばDockerでも行けそう
後はバイナリキャッシュのバイナリだけを利用するとか、実行時に必要なパッケージだけをダウンロードするモードがnixにないとか
その辺がなんとかなれば
本番で不要なビルド用パッケージを落としたりソースからビルドとかしたくないし
nix expressionの評価が遅いって問題もあるが
それはnix flakesで解決しそう
dockerTools.buildLayeredImage使えば
パッケージ毎にイメージレイヤーを作ってくれるので
ストレージ効率は良い
ただ、Dockerのレイヤー数は128までなので
それを超えると最後の方のレイヤーは合体される
これも最後のイメージレイヤーは各パッケージへのシンボリックリンクになる
ビルド用パッケージは除外されるし
現状では最適解
コンテナ起動時にパッケージへのシンボリックリンクを動的につくるか、
PATHをパッケージの絶対パスで埋め尽くせばDockerでも行けそう
後はバイナリキャッシュのバイナリだけを利用するとか、実行時に必要なパッケージだけをダウンロードするモードがnixにないとか
その辺がなんとかなれば
本番で不要なビルド用パッケージを落としたりソースからビルドとかしたくないし
nix expressionの評価が遅いって問題もあるが
それはnix flakesで解決しそう
dockerTools.buildLayeredImage使えば
パッケージ毎にイメージレイヤーを作ってくれるので
ストレージ効率は良い
ただ、Dockerのレイヤー数は128までなので
それを超えると最後の方のレイヤーは合体される
これも最後のイメージレイヤーは各パッケージへのシンボリックリンクになる
ビルド用パッケージは除外されるし
現状では最適解
877login:Penguin
2021/03/19(金) 16:25:59.68ID:R4CRH11B >>874
なんでパッケージマネージャーが欲しいやつがDockerなんて使おうとするんだろ?w
例えばapacheのDockerイメージ、nginxのDockerイメージ
どちらもポート80で起動する
というDockerイメージを、同一のホストで複数起動する場合どうすればいいのか?
Dockerイメージを変更すること無く、待受ポート番号を変更するにはどうすればいいのか?
それができるように作られたのがDockerなんだが
ファイルを置くだけのパッケージマネージャーじゃこんな事はできない
実行時のプロセスの分離を行う仕組みが必要
なんでパッケージマネージャーが欲しいやつがDockerなんて使おうとするんだろ?w
例えばapacheのDockerイメージ、nginxのDockerイメージ
どちらもポート80で起動する
というDockerイメージを、同一のホストで複数起動する場合どうすればいいのか?
Dockerイメージを変更すること無く、待受ポート番号を変更するにはどうすればいいのか?
それができるように作られたのがDockerなんだが
ファイルを置くだけのパッケージマネージャーじゃこんな事はできない
実行時のプロセスの分離を行う仕組みが必要
2021/03/19(金) 16:30:28.16ID:OafZaxWN
2021/03/19(金) 16:32:48.59ID:OafZaxWN
>>877
nginxのパッケージを入れて2つの隔離されたnginxプロセスを起動するだけだろ
nginxのパッケージを入れて2つの隔離されたnginxプロセスを起動するだけだろ
880login:Penguin
2021/03/19(金) 16:54:59.80ID:edcYEDQK 独自のコンテナランタイムとか作らないってこと?
今使ってるコンテナのイメージレイヤーは削除出来たらだめって挙動をパッケージでやるのは
独自のコンテナランタイム作らずには難しくね
今コンテナで使ってるパッケージを削除してしまったり
逆に古いパッケージが消えないってなりそう
今使ってるコンテナのイメージレイヤーは削除出来たらだめって挙動をパッケージでやるのは
独自のコンテナランタイム作らずには難しくね
今コンテナで使ってるパッケージを削除してしまったり
逆に古いパッケージが消えないってなりそう
881login:Penguin
2021/03/19(金) 16:57:33.68ID:R4CRH11B >>879
> nginxのパッケージを入れて2つの隔離されたnginxプロセスを起動するだけだろ
パッケージを1つだけ入れて2つのnginxプロセスを起動したりしたいんだよ
それもnginxの設定を変更せずに
> nginxのパッケージを入れて2つの隔離されたnginxプロセスを起動するだけだろ
パッケージを1つだけ入れて2つのnginxプロセスを起動したりしたいんだよ
それもnginxの設定を変更せずに
882login:Penguin
2021/03/19(金) 17:00:54.27ID:R4CRH11B Dockerとパッケージマネージャーは使う目的が全く違うんだから
パッケージマネージャーが欲しい人がDockerをパッケージマネージャーの代わりとして使って
「Dockerはパッケージマネージャーで代用できる!」なんて適当なことを言わないでくれ
それはお前がDockeをパッケージマネージャーという
間違った用途で使ってるだけだ
パッケージマネージャーが欲しい人がDockerをパッケージマネージャーの代わりとして使って
「Dockerはパッケージマネージャーで代用できる!」なんて適当なことを言わないでくれ
それはお前がDockeをパッケージマネージャーという
間違った用途で使ってるだけだ
2021/03/19(金) 17:37:12.28ID:OafZaxWN
作るとしたらこんな感じだろうな
デベロッパ
myapp:
name: MyApp
version: 2.0
packages:
- ruby == 3.0.0
- hoge.com/hoge-cli == 1.2
files:
- src: ./src
dst: /myapp
volumes:
- name:myappvol
path:/var/myapp
envvars:
HOGE: fuga
entrypoint: /myapp/bin/myappentrypoint.sh
godpkgmgr push . https://my.repos.com
//メタデータとfilesがリポジトリに送信される
ユーザー
godpkgmgr run MyApp:2.0 -v ./tmp:myappvol
//rubyとhoge-cliがローカルにあるなら再利用なければpull
//MyApp:2.0のfilesとメタデータをpull
//コンテナにpaclagesとfilesをマウント、メタデータを設定、entrypointを実行
な?
image要らんだろ
デベロッパ
myapp:
name: MyApp
version: 2.0
packages:
- ruby == 3.0.0
- hoge.com/hoge-cli == 1.2
files:
- src: ./src
dst: /myapp
volumes:
- name:myappvol
path:/var/myapp
envvars:
HOGE: fuga
entrypoint: /myapp/bin/myappentrypoint.sh
godpkgmgr push . https://my.repos.com
//メタデータとfilesがリポジトリに送信される
ユーザー
godpkgmgr run MyApp:2.0 -v ./tmp:myappvol
//rubyとhoge-cliがローカルにあるなら再利用なければpull
//MyApp:2.0のfilesとメタデータをpull
//コンテナにpaclagesとfilesをマウント、メタデータを設定、entrypointを実行
な?
image要らんだろ
884login:Penguin
2021/03/19(金) 17:40:09.91ID:R4CRH11B ただの設定ファイルの形式変えてるだけじゃん
イメージいらないって、イメージなくしてどうやって起動速度上げるのさ?
どうやって全く同じイメージだと保証できるのさ?
同じ設定ファイルから作ったとしても一年後にやって同じイメージが出来る保証はない
イメージいらないって、イメージなくしてどうやって起動速度上げるのさ?
どうやって全く同じイメージだと保証できるのさ?
同じ設定ファイルから作ったとしても一年後にやって同じイメージが出来る保証はない
2021/03/19(金) 17:41:25.80ID:OafZaxWN
済まない
↑のリポジトリのURLは適当に架空のURLを書いたつもりだったが存在するドメインだったので無視してくれ
↑のリポジトリのURLは適当に架空のURLを書いたつもりだったが存在するドメインだったので無視してくれ
886login:Penguin
2021/03/19(金) 17:41:45.06ID:R4CRH11B あとrubyしか書いてないけど、ディストリに含まれる
全てのライブラリのバージョンも書かないと駄目だろw
全てのライブラリのバージョンも書かないと駄目だろw
2021/03/19(金) 17:43:20.26ID:OafZaxWN
2021/03/19(金) 17:44:11.55ID:OafZaxWN
>>886
rubyに必要な依存はrubyパッケージのメタデータに書く
rubyに必要な依存はrubyパッケージのメタデータに書く
889login:Penguin
2021/03/19(金) 17:44:28.53ID:R4CRH11B 多数の仮想マシンに同一のイメージを配布することは出来るが
多数の仮想マシンに設定ファイルから一からインストールするなんて時間かかるし
すべてのファイル(OSに含まれる全てのファイル)を、そのリポジトリとやらに
アップしてそれをダウンロードして使うってならそれがDockerのイメージの仕組みです
としか言いようがない
多数の仮想マシンに設定ファイルから一からインストールするなんて時間かかるし
すべてのファイル(OSに含まれる全てのファイル)を、そのリポジトリとやらに
アップしてそれをダウンロードして使うってならそれがDockerのイメージの仕組みです
としか言いようがない
890login:Penguin
2021/03/19(金) 17:45:41.12ID:R4CRH11B メタデータから再インストールするのは
時間がかかるって言ってます。
完成済みのファイルをコピーしたほうがずっと速い
それがイメージ
時間がかかるって言ってます。
完成済みのファイルをコピーしたほうがずっと速い
それがイメージ
2021/03/19(金) 17:46:00.56ID:OafZaxWN
2021/03/19(金) 17:47:13.88ID:OafZaxWN
893login:Penguin
2021/03/19(金) 17:47:17.37ID:R4CRH11B パッケージだけあったって、インストールの順番で
出来上がるものは違うだろうが
あとからnanoをインストールするのと
あとからvimをインストールするので
同じものが出来ると思うか?
出来上がるものは違うだろうが
あとからnanoをインストールするのと
あとからvimをインストールするので
同じものが出来ると思うか?
894login:Penguin
2021/03/19(金) 17:48:07.12ID:R4CRH11B > 重複を避けて少量のファイルをpullしたほうが速い
だからそれがイメージ
だからそれがイメージ
2021/03/19(金) 17:48:43.45ID:OafZaxWN
>>893
インストール順番に依存しないようにするための賢いパッケージマネージャだろ
Dockerfileは手続き型だから順番を気にしないといけないがnixのような関数型のパッケージマネージャならそれを克服できるというわけだ
インストール順番に依存しないようにするための賢いパッケージマネージャだろ
Dockerfileは手続き型だから順番を気にしないといけないがnixのような関数型のパッケージマネージャならそれを克服できるというわけだ
896login:Penguin
2021/03/19(金) 17:48:57.75ID:R4CRH11B パッケージだけあったって、同じイメージは作れないんだが?
インストール済みの状態のファイル=レイヤーが必要
インストール済みの状態のファイル=レイヤーが必要
897login:Penguin
2021/03/19(金) 17:50:15.00ID:R4CRH11B nixのような関数型のパッケージマネージャは
バージョンごとに複数のパッケージをインストールするというだけ
バージョンごとに複数のパッケージをインストールするというだけ
2021/03/19(金) 17:50:59.98ID:OafZaxWN
>>894
imageでは重複をうまく回避できない
RUN xxx
RUN apt-get hoge
RUN yyy
RUN apt-get hoge
たったこれだけで別物と見なされてhogeの重複ダウンロードされる
これじゃ効率が悪すぎる
imageでは重複をうまく回避できない
RUN xxx
RUN apt-get hoge
RUN yyy
RUN apt-get hoge
たったこれだけで別物と見なされてhogeの重複ダウンロードされる
これじゃ効率が悪すぎる
899login:Penguin
2021/03/19(金) 17:51:01.77ID:R4CRH11B そしてnixのような関数型のパッケージマネージャは
ポート番号を変えて起動とかしてくれない
Dockerの目的をパッケージマネージャーは満たしてくれてない
ポート番号を変えて起動とかしてくれない
Dockerの目的をパッケージマネージャーは満たしてくれてない
2021/03/19(金) 17:51:39.00ID:OafZaxWN
>>896
パッケージバージョンを完全に指定すれば同じ
パッケージバージョンを完全に指定すれば同じ
2021/03/19(金) 17:52:20.03ID:OafZaxWN
>>899
起動時のオプションで変えるだけ
起動時のオプションで変えるだけ
902login:Penguin
2021/03/19(金) 17:52:25.64ID:R4CRH11B903login:Penguin
2021/03/19(金) 17:53:01.24ID:R4CRH11B >>901
「パッケージマネージャー」に起動時のオプションを変更する機能があるんですか?w
「パッケージマネージャー」に起動時のオプションを変更する機能があるんですか?w
2021/03/19(金) 18:00:43.65ID:OafZaxWN
2021/03/19(金) 18:01:54.86ID:OafZaxWN
906login:Penguin
2021/03/19(金) 18:08:57.50ID:edcYEDQK nixはbrewやyum, apt-getみたいなのじゃないぞ
nixはパッケージマネージャーの皮を被ったビルドツールだ
ビルド結果をS3に保存できるのはバイナリキャッシュ機能のおかげ
ビルド時のフラグや依存関係などを利用して生成したユニークIDを自動的にパッケージに付ける
少しでも設定変えればIDも変わる
パッケージはみんな/nix/storeの下に入る
/usrを直接変えるような事はしない
使う時は各パッケージの/binにsymlinkをはる
nixはパッケージマネージャーの皮を被ったビルドツールだ
ビルド結果をS3に保存できるのはバイナリキャッシュ機能のおかげ
ビルド時のフラグや依存関係などを利用して生成したユニークIDを自動的にパッケージに付ける
少しでも設定変えればIDも変わる
パッケージはみんな/nix/storeの下に入る
/usrを直接変えるような事はしない
使う時は各パッケージの/binにsymlinkをはる
2021/03/19(金) 19:25:31.64ID:r5P2gC/O
次スレわっちょい付けますか?
2021/03/19(金) 19:28:27.86ID:hGR6Rk9p
今の所不要じゃね
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- タイムズカー、個人情報最大660万件流出 氏名、住所、生年月日、電話番号、メアド、運転免許情報、学生証などの画像 [おっさん友の会★]
- 【サッカー】日本に敗れたベネズエラ監督 PK獲得が一転PK献上の判定に不満爆発「私たちへのリスペクトを欠いていた」 [ゴアマガラ★]
- 【🇯🇵】日の丸を傷つけたら処罰「国旗損壊罪」に日弁連が即時廃止求める「表現の自由そのものが失われかねない」 [少考さん★]
- 中野2億円時計窃盗事件のチリ人2人再逮捕 日本狙った理由「刑罰軽い」 [少考さん★]
- 【サッカー】ベネズエラ代表DFがジャッジに怒り、監督も指摘したシーンをSNSで共有「ホスト国を勝たせるために仕組まれた親善試合だ」 [ニーニーφ★]
- 【米中】トランプ氏、「中国側へ武器売却」を提案 対台湾懸念で 米大使明かす ★4 [煮卵★]
- 小泉進次郎防衛相「核兵器の保有を議論したい」 堂々世界の敵宣言をしてしまう [709039863]
- わりと真面目にこの国終わりなんじゃないかと思ってる [404143271]
- 自衛隊員さん、「通勤時に不正な手段で駐屯地に侵入した」ため懲戒処分 [152212454]
- 抱いて抱いて抱いて🩷んなりーた(・o・🍬)🏰
- 山尾志桜里「高市さんを批判する左の方々は、アメリカに媚びるなと言いながら中国は怒らせるなと言う」 [834922174]
- 【高市悲報】総理大臣「敵国条項外せ!」防衛大臣「核武装させろ!」 [616817505]