いまさらですが、始めてDockerいじくってみました。
どっかー。どっかーん!! どっかーら始めればいいんだべ、ってことで、、まずは先に、どっかーは何かをまとめます。お付き合いは最初が肝心です。
要するに仮想環境です。
このあたりの説明が真面目です。どこを見て学んだかを発表するときは、僕の所ではなく、まともそうな所のURLを貼っておけば安心です。嘘をいう必要はありませんが、本当のことを全て言う必要もないはずです。
従来は
従来のエミュレータは仮想PCマシン環境ですので、OSをインストールして使います。 環境ごとに大きなディスクのイメージを持ち、個々の環境は別物です。メモリも環境ごとに、それぞれ大きく用意しておいてから動かすことになります。
普段使いなOSの上で、さらにマシンとOSを入れ子にして強引に動かすため、まあ動作も重くなるわけですね。強引すぎると引かれちゃいますよね。
えっと、TVドラマの撮影をしている役者がいて、その役がなんと俳優であり、ドラマの中で舞台での演技のシーンがあり、なんだか演技を二重にするようなものです。 ・・余計にわかりにくーい話にしてしまいました。どっかーん!
いろんなIEで動作確認しないとね、なんつって複数のWindowsを立ち上げたりすると普段使いのOSも重くなり、相乗効果で全部がどっしりと、お前らどこの重役達だよ、とか思いつつ操作してると、根っこのOSが完全に固まり、、
ウキィィ!!! とか絶叫しながら泣きながら(実際には少し眉を潜めて静かに) アチョーって全部を再起動、とかありませんか。僕はあります。何度も。
いらんこと話しすぎました。要するに従来の仮想環境は、無駄が多かったわけですね。えっと、
Dockerでは
Dockerはそこ(マシン+OS)をですね、まるっと包み込んだエンジンとして最初から持っています。優しく包まれたい!
簡単に言えば、LinuxなどOSの構成要素を共通部品として、始めから持っているプラットフォームです。
その上に、コンテナと呼ばれる小さめ単位のソフトウェア(Apache, Nginx, MySQLなどなど) の設定済みパッケージをポコポコ乗せ、それぞれを小さい単位で稼働するのです。
一つの軽量な動作環境の上で、複数のOSではなく、アプリ毎のプロセス(プログラム・サーバ)単位で動作させる仕組みです。なので個々に最小単位にてメモリが使用され、動作も軽いのです。軽めな雰囲気だと誘いやすいですよね。
ひたすら差分を用いる
アプリ・ミドルウェアの動作には、Linux環境を包むいろいろなソフトウェアが必要です。各種コンテナを動作させるとき、自動でファイルの差分をみてくれて、必要なものだけをシュッと共通部分に載せてくれます。
社会では何度も自己紹介する必要があります。でも内容はほとんど一緒なのでなかなか面倒です。誰にどこまで話したか全部は覚えていられないし。一度話したことは誰にでも伝わっていて、プラスαだけ追加できたらいいのに、なんて。
え? お前は何年経ってもたいして進化してないから、追加できるストーリーは無いだと? いや、そんなことは、、、自己紹介ですか? えっと、、では最初から話しますね。
そういう場合Dockerでは、コンテナ載せ時に追加ファイルはほぼ無い、という事になりますね。重複したものを持たない、キレイな設計です。
環境の受け渡しが便利
Docker Hub という、まるでGitHubのような公開の図書館がコンテナのイメージ置き場です。アカウント登録するだけで無料で使えます。典型的な動作環境やアプリ・サーバのたぐいは、一通り揃っています。
この図書館(リポジトリ)からのダウンロード&導入が、ぽちぽち操作ですぐできます。それらの環境をゲット後、じぶん好みに調整・設定をして、実際やりたいことを出来る環境へと仕上げることになりますね。
本来、いろんなことを教え込む過程が楽しいですよね。教え込める所まで準備するのが一番大変なわけですが、Dockerではそこまでの工程がとても簡単です。
そして、調整・設定後の環境は自分だけのものですが、そこまで作業した内容を誰かに、まるっと提供し共有したくなることが良く有ります。
いや、ここまで手塩にかけて育てたのだから誰にも渡したくないのだ、という気持ち、わかります。その時間が長いほど、独占したくなるものです。でも、そのもの実体を渡すのではなく、作業した差分だけを最小限だけ渡すのです。
差分を受け取ると、さくっと自動で必要なコンテナ類を取って来てくれ、クローンを手に入れてしまいます。なんだか悔しいような、、
なのですが、個人的な写真やデータなどを共有してしまったら事件になりますので、そのようなものは別領域、差分の範囲外な場所へと格納します。
使うときだけ別途に接続し、マウントします。そういった横の連携も簡単です。このあたりは第三回あたりで触れます。写真は後日にじっくり見返す派です。
次回へ
なんだか良くわからなくなってきました。ここまでごちゃごちゃ言ってきて何ですが、Dockerは触って試すほうが理解しやすいです。
本番環境向けでも、分散・冗長への対応など進み、もう実用レベルです。皆様がお使いの(?) AWSにおいてもDockerベースの環境を作れます、
なので、どっかーって何、なんて真顔で言ったらほんと笑われちゃいそうです。ああ、そんな軽蔑するような目で見ないで!! はい、知らないことは知れば良いだけです。
特にLAMP+αに関連する、Web系開発環境・テスト環境の構築・共有には、Dockerの利用は今や必然かとです。これ検討してないような開発チームはもう古すぎかとです。だって、マジ便利なのに使わないって何? っていう。
さて、典型的なサーバ・開発の環境を用意するだけなら、やることわかっていれば10分も掛かりません。本当です。
次回はさくっと触り始めます。なお、僕の記事は原則、MacOSでの紹介となります。OSは10.13を使っていますが、新しいぶんには問題ないかとです。