仮想環境コンテナ総合スレ Docker、Vagrant等 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
開発に仮想環境やコンテナを使う機会が多くなってきたので、みんなで情報交換しませう
よろしこ 再現性が必要ない?
それはなかなか斬新ですねw
そコマで頭の悪い意見が出るとは思ってなかった。 Jupyter Notebookって試行錯誤を効率化するのが目的なんだから、再現性なんてDockerイメージで担保すればいいというのも、それはそれでありうる判断だろう。
環境独立な再現性があればあった方がいいって点には誰も異論はないと思うが、
それよりも試行錯誤の効率性の方が優先される用途もあるってだけの話だな。 依存性の封じ込めも再現性もvagrantや別の方法でもできるので比較検討が必要 >>649
依存性の封じ込めも再現性もvagrantや別の方法でもできるので
Dockerを使う理由にはならないってことだよ 複数の方法があるけど一長一短なのでツールの特性と置かれてる状況とを見て比較検討する必要があるんだね ずーっとってる話だが、
比較検討の話と、ツールが作られた目的を
ごっちゃにするなってことですね 発端は>>597-599あたりかな
比較検討の意義についての議論だったのだけど、それが理解できない子も居たようだね 比較検討するにあたって、
どの道具の目的をちゃんと理解してないと
正しい検討ができないって話やろが ここで聞くのが正しいかどうかわからないんですが質問です
やりたいことが2つありまして
1. Vagrantでバーチャルマシン使って開発
2. VPNでリモート環境に接続、そこにあるコンピュータにSSH
この2つは特に関係ない作業です
で、それぞれ単独では出来てるんですが
Vagrantでバーチャルマシンを立ち上げ
192.168.10.10のIPを与えて開発する(LaravelのHomesteadです)
↓
開発終えてvagrant halt(1の作業はここまで)
↓
リモート環境にVPN接続(2の作業開始)
↓
そこにあるコンピュータ192.168.10.14にSSH
としようとすると接続できない、pingも通らない、となっており解決方法を探しております
OSを再起動すると接続出来ます
macOS10.11(El Capitan)です
なにかわかる方いらっしゃいましたら、よろおねです Dockerって言うのを試したいのだが、
少し調べてみた限りでは、コマンドベースで各種の設定などやるようだが、
Linuxの操作に慣れていない人は使うのは難しい? >>658
やめといた方が方がいい。
本格的にLinuxを勉強するつもりなら話が別だが。 GUIしかやってないなら大抵の仮想化ツールは取っ付きにくいだろうな
CUIの勉強しろよ >>658
簡単だけどLinuxの操作などを知っているなら簡単という意味。 ターゲットとなる本番環境じゃなくてポータブル開発環境として使ってる人います?
ローリングリリースのLinux選んでずーっとその仮想育てる感じで
PowershellもMsysもWSLもどうやっても馴染めないよう シェルスクリプト・PowerShell の代わりに、VSCode で、Ruby を使えば?
Windows でも、普通にファイル操作できる。
ただし、irb だけは日本語でバグるから、WSL のirb を使う
日本語では、WSL のirb は、MSYS2 よりも正常に動く うーん正確な用語がわからない・・
そのVSCodeとRubyの方を仮想かしてどこでも同じ使い勝手を味わいたいんだ
そっちの実作業環境を開発環境と呼ぶのは変なのかな サイトの管理を任されたけど、今 vagrant とdockerとかで
環境構築するのが当たり前なの?
もう、MAMP XAMPでローカルに構築する時代じゃないの??? vagrantは開発専用。これでサイト構築はまず無いだろ
> もう、MAMP XAMPでローカルに構築する時代じゃないの???
vagrantかWSLのほうがいいだろ?
実際の動作環境がLinuxなのにWindowsで環境作るほうが面倒 Software Design 12月号の特集は、Python のAnsible
Vagrant, Chef に挑む巨人、Red Hat の猛攻が始まった!
以前は、すべての開発者は、Vagrant の作者で、今世紀最大の創業者、
Mitchell Hashimoto (HashiCorp)を避けて通ることはできないと言われていた
その常識に、赤い巨人が挑む!w >>667
俺の知ってる現場でもみんなvagrantだな
そういう時代なんだと思う VirtualBoxとVagrant を使って開発って
WEBアプリケーション以外にも使われることはあるんですか?
例えば、スマホアプリとか。 WindowsでDocker (Hyper-V)とVirtualBoxが共存可能になったってよ vagrant/terraform
container linux
ansible
docker
kubernetes
Istio
gcp/aws/azure
この辺のキーワード聞くことが多くなってきたが覚えること大杉てしぬ クラウドでコンテナを運用するとしたら規模の小さめなサービスでもk8sが鉄板なんすか? vagrantのguestosをオフライン環境でバージョンアップさせる方法教えてください 本番運用の環境でDockerCE (Docker for Windows) の Linuxコンテナを使ってるんだけど、
たまにポートフォワードがうんとも寸とも言わなくなることがあるんだけど、そういうもん?
具体的にはNGINXのコンテナを作って外からの443をNGINXに向けるようにしてるんだけど、
突然ポートフォワード出来なくなる。TCPパケットダンプしても明らかにコンテナに流れてない。
んでDocker自身を再起動したら復帰する
運用環境としては怖すぎなんだけど・・・ Docker は本家 Linux でも本番環境だとわりとトラブるって話を1年くらい前に聞いたな。
利用は開発環境やステージング環境までにして
本番はネイティブにした方が無難なような。 設定ミスの可能性もあるだろう
マネージドのDocker Hostをレンタルして同じ構成で動かしてみたらどうだ tcpdumpの結果でわりと十分なエビデンスだろう。
突然パケットが流れなくなるような設定間違いってなかなかできない。 >>684
全く「設定ミスがない」ことのエビデンスになってない
それじゃただ単に現象を確認しただけだ >>685
「『全く』設定ミスがない」ことのエビデンスなんて現実的なコストでは提供不能だよ。
特に設定不足系は無理。
ふつうはそんな効率の悪いやり方をしない。
まあ金融・証券系みたいにコスト無視、かつ顧客が無理難題をふっかけるとこだと、顧客が納得するレベルの嘘をついて誤魔化すことはあるけどさ。 「Docker network stopped working 」でググるといっぱい見つかるね。
未解決のも多い。
ttps://github.com/moby/moby/issues/32195
なんかはSolved になってるけど
・(正常なネットワークなら問題ない筈の)先進的なネットワークオプションをとにかくdisableせよ
・Docker のバージョンを上げろ
ってなってて、Docker か、あるいは利用しているネットワーク環境のどちらかに不具合があるっぽい。 >>686
俺がなんで括弧つけたかわかってないな
「全く設定ミスがない」こと証明してないと言いたいのではない
「設定ミスがない」ことを全く証明してないと言ったのだ >>688
ふつうは正しく動作することをもって証明とするんだよ。
数学的な意味での証明には全くならんが、現実的なコストでできる証明ってのはそれくらいしかないんだ。
くだんの人の場合、一応正しくは動作してるのに、しばらくすると止まる、しかもtcpダンプしても止まってるんだから、
症状からしてなにか不具合がある可能性が高い。
そうじゃない、証明する方法があるんだっていうのなら、その方法を具体的に書いてやってくれ。 >>689
もうとっくに書いてんじゃん
マネージドなdockerホスト借りてやってみたらどうだってさ
何も設定項目1つ1つ変更しながらエビデンスとれって言ってるわけじゃないんだよ
適度なサイズのスコープで切り替えながら調査していくの
これって問題調査の基本中の基本だよね?
君が言ってる現実的じゃない方法って
アルゴリズムに例えて言うと線形探索なんだよ
でも俺らは二分探索とか範囲で絞り込むアルゴリズムを知ってるわけだろ?
なんで身につけた知識を応用しないんだ? >>690
マネージドなDockerホストって書いてた人だったのか。
確かにそれはアリだな。
俺の言葉の使い方だとそれを設定ミスがないことのエビデンスになるとは言わないので
マネージド環境でのテストのことを指してるとは思わなかったよ。
すまんかった。
よくよく考えてみるとアホな顧客にエビデンス要求された時に
有料サービスに丸投げした結果を提供してOKもらうことはたびたびあるので
自分でも似た使い方してたなw
自分でそれがエビデンスという強い言葉に値すると思ってないから思いつかないんだなあ。 issueだらけだもんなぁ
本番には到底耐えきれないよ
本番で使わないならってんで開発でもDockerを使わなくなる
だから実務で役に立つのはVagrantとAnsibleになる >>692
issueの数で判断できるなら、世の中のメジャーなライブラリやフレームワークはみな使えないことになる ライブラリやフレームワークに不具合があってもアプリケーションとしてのテストを通過すれば問題はない
でもDockerみたいなのになるとテストしきれないから安易に使えない >>695
いや常識だぞこれ
お前はテストしとらんのか? 初心者なんじゃがコンテナ内のphpmyadminから別コンテナのMySQL叩くの難易度どれくらい? 本当かぁ、?何回かネットや本のコピペしてるけどMySQLとphpmyadmin連携取れないぞ、? >>704
この後またチャレンジするんだけど皆さん普通に連携取れて出来てるのよね?
本の丸コピが何回やっても動かないし何かMySQLの認証系が怪しいんだが すまん、、そこまでまだ本を読み進めてないでんねん。。下記が本のソース丸コピなんだが
////phpmyadmin編
//_mysqlとphpmyadminのDockerfile用の2つのフォルダ作成
sudo docker network create mysql-nw
sudo docker volume create --name=db-volume
sudo docker run -v db-volume:/var/lib/mysql/ --name=db-container busybox
//////mysql/Dockerfile
#イメージ取得
FROM mysql
#mysqlのrootパスワード設定
ENV MYSQL_ROOT_PASSWORD=dbpass01
#文字コードにutf8mb4をセット
CMD ["mysqld","--character-set-server=utf8mb4","--collation-server=utf8mb4_unicode_ci"]
//////
sudo docker build -t mysql-image .
sudo docker run --volumes-from=db-container --name=mysql-container --net=mysql-nw -d mysql-image
//////phpmyadmin/Dockerfile
#イメージ取得
FROM phpmyadmin/phpmyadmin
#
ENV PMA_HOST=mysql-container PMA_USER=root PMA_PASSWORD=dbpass01
//////
sudo docker build -t pma-image .
sudo docker run --net=mysql-nw --name=pma-container -p 83:80 -d pma-image CMD["mysqld"
とりま要らんやろこの引数 すんまへん、、何故かイケました。メモ帳に書いてコピペしてるからそう書き間違えないはずなんだがなぜかこれで
//phpmyadmin再度
sudo docker pull mysql:5.7.24
sudo docker pull phpmyadmin/phpmyadmin
sudo docker network create mysql-network
sudo docker run --name=aa-mysql --net=mysql-network -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -v $(pwd)/database:/var/lib/mysql -d mysql:5.7.24
sudo docker run --name=a-mysql-admin --net=mysql-network -e MYSQL_ROOT_PASSWORD=password -e PMA_HOST="aa-mysql" -e PMA_PORT=3306 -p 8081:80 -d phpmyadmin/phpmyadmin ちなみにこれはなぜか動かなかった
//1
sudo docker network create -d bridge my-bridge-network
//2
sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server
sudo docker network connect my-bridge-network mysql
sudo docker inspect mysql//次のhostに付けるip確認
//3
sudo docker run --name phpmyadmin -d -e PMA_HOST=(さっきのIP) -p 808:80 phpmyadmin/phpmyadmin クラスタ運用だとボリュームの扱いが難しい
ネットワーク経由でストレージをマウントすると遅いし所有権やシンボリックリンクの取り扱いでトラブルが起きやすい
逆にローカルストレージをマウントするとコンテナを特定のホストにピン留めせざるをえなくなって運用性が悪い
どうにかならんかねこのジレンマ >>713
だからクラウド使うんだよ
ストレージはクラウドサービスが提供しているものを使う
ストレージ用のコンテナは作らない クラウドストレージでも結局は同じなのでは?
例としてS3をVolumeとしてマウントしたとして
このVolumeはローカルストレージのVolumeよりも遅いしパーミッションとかで変なトラブルが起きやすい
この性質はイントラのストレージサービスとクラウドのストレージサービスでそう違いがあるとは思えない >>716
だからボリュームとしてマウントしたりしない。
アプリはデータをS3に保存するし、S3から取ってくる。
パーミッションとか関係ない。クラウドのセキュリティ機能を使う
クラウドストレージの速度はローカルストレージと遜色ない(コストによるが) > アプリはデータをS3に保存するし、S3から取ってくる。
補足しておくとアプリはS3のデータを読み書きするとして、
例えばユーザーはファイルをサーバーにアップロードする時、
S3に直接アップロードするしS3から直接ダウンロードする。
アプリを経由してS3のファイルを読み書きしたりしない(してもいいが遅い)
誰でもアップロード・ダウンロードできてしまうことを
防ぐためのセキュリティ機能もS3にある >>717
EBSを使ってもいいが、アプリの仮想マシンからブロックデバイスとしてマウントはしないんだよ。
EBSをマウントするのは(広い意味での)データベース・サーバーの一台
アプリからは、そのデータベースサーバーに対してネットワークでデータを読み書きする
複数あるアプリの仮想マシンでファイルシステムをマウント(Dockerのボリューム含む)しようという発想が古い
ストレージをマウントするのは仮想マシン1台だし、そこにネットワーク経由でアクセスする。
↑このストレージをバックアップなど含めて適切に管理するのが面倒だから、クラウドストレージを使う
いずれにしろ、アプリからはネットワーク経由でデータの読み書きをする >>717
例として挙げただけなのでどのストレージサービスでも状況は同じ
>718
ストレージサービスをネイティヴサポートしてない他社製アプリはVolumeマウントするしかないと思うけど違うのかな?
オープンソースならフォークしてファイルアクセスを全てストレージサービスに置き換えることはできなくはないけど労力に到底見合わない
だからどうしてもVolumeマウントに頼らざるをえないケースは多々ある
そういうケースにステートフルコンテナをクラスタに組み込むにはどうするべきか悩ましい >>721
だからな? 新しい仕組みを活かそうと思うなら、
設計から見直さなきゃいけないんだよ。
効率化する新しい仕組みを導入したいのですが
今までの効率の悪いやり方まま変えたくないんです。
↑アホみたいだろ?
やり方を変えないなら、今までのやり方をするしか無いんだよ。
諦めな >>722
設計を見直すと言われても他社製だからな…
従来のようにバックアップとリストアをしっかり整備して多少のリスクを受け入れるぐらいしか思い浮かばん
ダウンタイムはともかく直近のデータロストは怒られそうできつい docker hubがハックされてgitアカウントが19万ぐらい失効されたらしい? dockerのGUIでの監視や起動停止とかでまだまともなのないかね? 5人のチームのローカル開発環境を同じにしたい場合VagrantとDockerどちらが楽だろ?
VagrantfileとDockerfileのどちらが簡単かという話になるのかな? そりゃあVagrantだろ
変なトラブルが少ない
開発デスクトップも仮想化できる
環境の再現性がたかい
Linux+Windows混在も楽々
ただしターゲットがDockerの場合に限りローカル鯖もDockerにした方がいい
それは当然のことだな
その場合でも開発デスクトップはDockerを使わないほうがいい 開発に使えないものを本番環境に投入とか論外なわけで
Dockerの使いどころが...
(それを言っちゃあおしまい) 使えるか使えないかの問題じゃなく楽かどうか
本番でDockerを使わないなら本番環境はDockerへの配慮なんてしてない構成になってるはず
その構成をローカルに再現するときにDockerを使うかVagrant/Ansible使うのどっちが工数少ないかってことだ
少なくとも本番環境の構築手順書があるのだから完全仮想化環境で同等の環境を再現するのはさほど難しくない
しかしDockerだとどうしても構成の整理と手順書の読み替えと動作確認が求められてくるので面倒だ >>731
> 5人のチームのローカル開発環境を同じにしたい場合VagrantとDockerどちらが楽だろ?
何度も言ってるが、仮想マシン(Vagrant)とアプリ仮想化(Docker)は
組み合わせて使うものです!
どちらか一方を使うんじゃない。役目が違うんだから両方使う 大前提としてな。開発環境と本番環境は同一に出来ないんだよ。
可能不可能の話じゃなくて、そんな事やるやつは馬鹿という意味で同一に出来ない
開発環境はVagrantで作るが本番環境はAnsibleなどで作る
開発環境には便利なテキストエディタやIDE、ヘッダファイル、静的解析ツール
その他便利なコマンドなど、いろんなものを入れる必要がある。
それに対して本番環境はそれらは入れない。セキュリティリスクにつながるし
メンテナンス性も考えなるべく小さなイメージにしておく
開発環境と本番環境は同一でないという前提で、
開発環境でどうやってテストするか?という話が出てくる
本番環境に近い環境でないとテストに自信が持てないのは当然
そこでDockerがでてくるんだよ。開発環境で動かすDockerコンテナと
本番環境で動かすDockerコンテナを同一に(もしくは限りなく近く)することで
開発環境と本番環境が違っていても、信頼性のあるテストが実行できる
そうするとDockerコンテナさえ同じであれば、開発環境を統一する意味もなくなる
開発環境がLinuxであってもWindowsであってもMacであっても、
同一のDockerコンテナを使うのだから、信頼性のあるテストが実行できる
だから今はVagrantを使って開発環境を統一するメリットが減ってる。
統一したいならしてもいいが(それは開発者の自由を奪うというデメリットでもある)
統一しなくても良いのが今の開発 >>737
本番環境が全てDockerという幻想の上でしか成立しないな
本番環境がDockerでないなら開発環境でDockerを使うと逆に再現性が低下する 最初の質問に戻るとだな
> 5人のチームのローカル開発環境を同じにしたい場合VagrantとDockerどちらが楽だろ?
「ローカル開発環境を同じにしたいならVagrantを使う」
それと同時にDockerも使う
Dockerを使うなら、ローカル開発環境を同じにする意味はさほどない
同じにしないなら Vagrantを使わなくて良い。Dockerだけ使う
これは「ローカル開発環境を同じにしたい場合にDockerが楽」と言ってるのではなくて
「ローカル開発環境を同じにしないならVagrantはいらない」という意味
だから「ローカル開発環境を同じにしたいならVagrantを使う」ということは否定していない
使う目的が違うのだから、どちらを使うか?っていう話にはならない >>738
もう今は本番環境でDockerを使うのは常識
仮に本番環境でDockerを使わないとしても、
本番環境と同じ環境をDocker以外で作るのは困難
開発環境用VM(Vagrant)と本番環境用VM(Vagrant)の
2つを作るのは重いだけ 訂正
開発環境用VM(Vagrant)と本番環境"再現用"VM(Vagrant)の
2つを作るのは重いだけ
本番環境用VMといってしまうと、これを本番環境で使うように思えてしまうので訂正
実際の本番環境はVagrantでは作らないので、本番環境そのものにはならない
高い再現性を求めるなら、開発環境でも本番環境でもDockerを使うのがベスト 開発環境と本番環境が違っていても
Dockerコンテナは同じですよーっていうのが
Dockerを使うメリットなわけだ vagrantは "開発環境を作るためだけ" のものだが
Dockerはソフトウェ開発全般で使う ■ このスレッドは過去ログ倉庫に格納されています