読んだ記事の前編後編は↓
前編:docker盲信している皆様へ
後編:dockerやめてどうしたか?
目次
共感するところがある
Dockerを導入すればすべての問題が解決する訳ではないし、必ずしも開発・運用効率が上がるとも限らない。Dockerが素晴らしく万能のような記事が多々あるが、あれは絶賛しすぎだと感じる。
Dockerですぐに開発環境を作ろうとした話
※以下「コンパイル/ビルド/実行」を実行環境として記載しています
※以下「IDE、エディタ(VS Code、Atom、Vim、Emacsなど)」を開発支援として記載しています。
自分なりだが開発環境とは「実行環境」と「開発支援」この2種類がインストールされている環境のこと。
実行環境をDockerで作ることは容易であるが、開発支援で悩まされた。
開発支援はどうする
Visual StudioやEclipseなどのIDE、AtomやVS Codeなどのエディタ、Vim、Emacsなどをカスタマイズして使う人など、様々な開発スタイルがある。
チームで開発環境を統一するならVim、Emacs、Eclipse Cheなら可能であろう。
開発支援は個々で好みもあるし共通化させることは難しいと感じる、言語によって得手不得手もあるので、この選択肢は開発者自身に委ねるのが一番だと思う。
そういう意味も含めて開発環境は諦めた。
ついでに言うと、scpなどでローカル環境からDocker開発コンテナにコピーしたり同期機能を使ってソース類を自動コピーさせるている。
ローカルとdockerコンテナはvolumeによるマウントができるが、これは完璧ではない。Windows環境ではPermission、ユーザーの変更はできないからだ。
Macの場合はどうなんだろうね。
実行(本番)環境すべてをDockerにする
これは違うかなと感じる。
databaseのコンテナは遅いとどこかの記事で見たことがある。速度以外にもサーバーには障害がつきもので物理的にサーバーが壊れることもある。レプリケーションの設定をdockerにまかせるのかdatabaseに任せるのか正解はないし力量や経験者の有無などに一概にこれがベストと言える環境は1つとは限らない。
すべてをDockerにと囚われずにアプリケーション・サーバーはDockerで、databaseは物理サーバー(VPS含む)など分けるなどの選択を残しておくべきだろう。
Dockerのメンテ
Dockerfileメンテなんて手順書メンテとかシェルスクリプトメンテしてんのと大して変わらねーよw
Dockerfile自体がインストール手順をシェル化したものになっているし、その通りだと思う。
Dockerfile内でyum、apt-getなどリポジトリからサービスをインストールする場合は時期によりバージョンが異なる可能性は大いにある。またwgetやgitなどで取得する場合も同様だ。サイトが閉鎖する可能性もゼロではない。
完全に固定するならインストールはファイルから行うべきだろう。だが面倒くさい。
まったく同じコンテナを建てる場合はimageから作成するのが一番だし、そのためにdockerリポジトリが存在するものだと思っている。またimageのexport機能もあるしね。
Dockerから乗り換えるか
以前にVPSをDocker化して良かったと思う今日このごろを書いた。
今のところ満足しているので乗り換える気はないが、もっと便利なものがあれば別の話だけどね。
それでもDocker
楽だぜ・やっとけ・意味不明リスト
- Dockerfileにコメント入れてもいいじゃん(〇〇はhogehoge.so必須とか)
- Dockerfileを作るにつれて再利用(一部をコピー)できるぜ
- バックアップはvolumesディレクトリ丸ごと
- テストはstop,start,restart,rm,runをやっとけ
- ホストのvolumesディレクトリを削除してrunしとけ
- ホストのvolumesディレクトリをリストア(復元)してrunしとけ
- README.mdを作って手順書を書いとけ
- OSに拘る必要なんてないぜ