Dockerについてお勉強してみた

Dockerって何?Ansibleもちょっと勉強
2016年頃には有名になっている話らしい
自分の開発物をどこかに展開する場合、依存するものをコンテナにパックすればどこでも動かすことが出来る
すべてのアプリケーションのために、いちいち新しい物理サーバーを立ち上げていたら、コストが屋根を突き破ってしまっていただろう。
今うちこれですね
コンテナと仮想マシンはちがう
仮想マシン→OS+コード+実行環境
OS起動する分目的以外のアプリケーションも起動することになってしまう
コンテナ→コード+実行環境
Dockerのアプリケーションは1つのプロセスとして実行される
Dockerって何?って言うと、一言ではコンテナ型のアプリケーション実行環境
つーか2017年1月には「急速に広まっている」なのね。
いまだともう「結構広まりきった」になる気がしている

Dockerは元々Linuxの技術
Docker for WindowsというものがあるのでWindows機でも実行可能になっている
実際にHello world!というものを行ってみる
http://www.atmarkit.co.jp/ait/articles/1701/31/news043.html

何がメリット?
別々のアプリケーションを別環境として作成できるので、そのへんは便利
とあるサイトでは
OS依存がなく、導入が容易
案件ごとに異なる環境を構築できるため、特定のPC依存を回避
ミドルウェア導入や新インフラ環境のテストが各自のPCで可能
言語やツールのバージョンアップテストが容易
チームメンバー全員が各自のPCでデバッグ可能になる
アプリケーションの利用についてはイメージがなんとなくつく
Apach + Tomcat + jarのコンテナを配布したら動かせる的になりそうな気はする

開発環境でのDockerの運用について
開発環境にありがちな課題
手順書どおりに構築しても動かない
本番にデプロイするとエラーが出るようになった
案件ごとにミドルウェアのバージョンが違う
これまでにAnsibleとか書いてあるけど、それすらしてなかったんだよなぁ、、、
手順書でごりごり行う、、、みたいな
というかなんとなく世間の開発って、開発環境ごとVMに載せて起動するイメージなのかな、、、?
Dockerをつかうと
複数コンテナ立てても平気
誰のマシンでも同じ環境を作ることが出来る

MySQLの5.6と5.7を動かしたい
いままでは別OS立ててインストールして、、、だったけど、
Docker Hubから引っ張ってきて起動するだけ
Docker Hub→Docker社が提供しているDockerイメージのサービス
セキュリティホールとかの脆弱性が無いわけでは無い
自分でDockerfileを作成して配布する
モックサーバーとか自作ツールとかを配布する
各自がDockerfileをbuildする。そのベースイメージはDockerHubから取得して
コードはGitHubから取得する感じ
複数の連携もできる
複数のコンテナを管理するのもdocker-composeをつかって連携も可能

アプリケーションの開発環境もDockerにする
アプリケーションの開発に必要なものをつめたDockerイメージを作れば
みんな同じ環境で開発することが可能

ちょっと本番環境にDocker利用は次のステップっぽい
Docker利用は、まずDocker Hubに公開されているイメージをつかうと良いと思う
Dockerに関するエコシステムの広がりはすごい。
これからはコンテナを使うことが主流になりそう(2017/7)
開発での利用について、実行するのは結構簡単
MySQLを利用したい場合でもコマンドひとつで実行が可能
★MySQLコマンドで起動することは分かったけど、DBの内容はどうやって保持される?どこに?
サービスを停止して、再度起動した場合もそれまでの内容は保持される?
古い人間なので、なんとなくインストールしたらHDDにフォルダが作成されて、
そこにもろもろが保存されるイメージがある。
→なんとなく情報を追ってみると、Dockerfile内には保存されるっぽい。
https://qiita.com/TakashiOshikawa/items/11316ffd2146b36b0d7d
でもって、保存先の指定も出来るっぽい
他のDockerfileを起動するときもそこを指定すれば別コンテナのMySQLでも同じ箇所を参照することは可能っぽい

ゼロからはじめるDocker(2) Dockerをインストールしてみよう
Dockerをコマンドではなくブラウザから管理することができるRancherやportainerといったWebアプリケーションも登場している。しかしこれらを有効に利用するためには、まずはDocker環境を作成できなければならない。そこで今回は、DockerをインストールしてDocker環境を構築する。

Dockerをコマンドではなく、ブラウザから利用するのとかも当然あったりはする
Windows7はDocker対応していない、、、だと?

つーかすげーな(今は当たり前なのかもしれないけど)
Dockerインストールする
DockerHubからWordpressを引っ張ってくる
Wordpressの起動にはMySQLも必要なので引っ張ってくる
起動する。
★ポートの指定とかどうやっているんだろ
起動時にコマンド引数で投げてあげるのか。。。

なんとなくだけど、ここまで読んでのDockerの良いところって、
・アプリケーションのインストールなしで利用が可能
・作成したアプリケーションの配布が楽
・アプリケーション単位でコンテナを作成できるので、コンテナ単位でのサービスの構築が可能
開発環境の構築に時間がかかるというのは、Rubyのインストールをして、MySQLを準備して、、、
みたいなものに時間がかかるという話かな
今の開発環境の
DBが共通でひとつあって、そこに接続すればよくて、
開発はローカルにチェックアウトすればよくって、、、みたいな内容なら
とくに開発環境の準備に時間はかからない感じがする
しかも贅沢に稼動保証環境にもWASあるし

開発環境でどうのというか、稼動させるためのシステム構築について必要な技術な印象

どちらかというと、もりもりコードを書く下準備とか、評価環境構築とかに利用できるイメージ
最強:AWSのamiみたいに全部スナップとっちゃう
金かかる
同じ環境で複数サービスを起動するのが結構大変(MySQL3.6とMySQL3.7とか)
ライブラリの衝突とかもあるかもしれない
今までは仮想環境の選択肢しかなかったけど、これだとOSいくつも立てる必要があるので、
サービス起動に対して無駄なリソースがかかる
しかも各仮想環境にインストールして起動して、、、という手間が発生

Dockerみたいなコンテナを使うとインストールとか考えないで、サービスの起動とかが出来る
なので
MySQL 3.7 + Webアプリケーション
MySQL 3.8 + Webアプリケーション
みたいな環境を立ち上げるのは比較的簡単に実行できそう
WebアプリケーションコンテナにTomcatとかも入れておくイメージか、Tomcatのコンテナ起動するとか
で実行環境の作成には向いて居そう
もりもりコードかくぜーって場合にはちょっとむかなそう
Rubyとかも実行でなくて、コンパイルするとかならやっぱりインストールする必要ある。
自前のツール配布にしても、全員がDockerをインストールをすれば楽だけど、
どちらかというとひとつサーバー立ててそこで動かしてそこにアクセスするほうがなんとなく楽っぽい

今の環境ではDockerは特に必要ない気がする。
とはいっても簡単な検証環境を作ってちょこちょこって開発して公開するには便利っちゃ便利ね。
開発時にもDocker HubからMySQL引っ張ってきて、他のミドルウェア系も引っ張ってきてそこで動かせるようにしておいて、
Dockerfileに書いて公開すると他の人も同じ環境で実行できるということは出来るので。。。

コメント

タイトルとURLをコピーしました