Dockerリベンジ

お久しぶりです、1年もこのブログ書いてなかったんですね。
びっくらこいた。
インターンシップでDockerを触る機会がまた出てきたので1年越しのリベンジです。

Dockerをどっかーん

で、おなじみのDockerです。
前回の記事ではなんかわかった気になっていたんですが具体的にどこで使うのかよくわからないといった感じでした。
今回、「なるほど、こうやって使うのか」という感じになったのでそのメモです。

あらためてDockerって何?

Dockerとは、簡単に言うとVMっぽい何か、です。
VMなのですが、カーネルの部分はホストのOSを使うので従来のVMと比べるとめちゃくちゃ軽いVMです。
ただ、そのせいか今のところホストOSはLinuxに限られています。建てることができるVMもLinuxです。

実際にどんなことやってるかは前の記事で。
この記事では細かいDockerの説明はしないので別に読まなくても大丈夫かと。

Docker Hub

Dockerの強みの一つにDocker Hubがあります。
Docker HubはOS版Githubみたいなやつです。
このDocker Hubにはあらかじめアプリケーションが立ち上がる環境を整えたOSのイメージがアップロードされています。
僕達が今までやっていた面倒なサーバ構築は必要ありません。
僕達がすべきことは

  1. DockerHubからイメージ(OSのインストーラみたいなもの)をダウンロードして
  2. そのイメージからコンテナ(実際のOSのインスタンス)を立ち上げ
  3. 使う!

これだけです。
DockerHubはそのOSで動かしたいアプリケーションや言語などの名前でイメージが上がっているのでとりあえずそれで検索すると引っかかることが多いです。
Docker Hubにはどんなアプリケーションがあるのかというと、Wordpress、Redmine、Slack、nginx、Apacheなどなど。
また、ApacheとかはPHP5用のApache環境などかなり細かい指定のイメージもあったりします。
Redmineとかはコンテナ立ち上げるだけで勝手にサーバを立ち上げるので、あとは指定されたlocalhostのポートにアクセスするだけでOKでした。
また、WordPressのようなデータベースを使うアプリケーションはそのアプリのDockerコンテナの他にDBサーバ用のDockerコンテナも一緒に建てる必要があるようです。

あと、起動したコンテナにアクセスしてなんかやりたいときは

 $ sudo docker exec -ti {CONTAINER_NAME} bash 

ってやるとbashを立ち上げて中に入れます。
execってのは立ち上がってるDockerにアプリケーションを立ち上げるためのコマンドなんだそうな。

つまりどこで使えるのか

まず、外部サービスと連携するようなアプリを作るときにかなり楽にテスト環境を構築できます。

また、Webアプリを作るときも自前でサーバを立ち上げる必要がなく、Docker内のサーバにデプロイできる仕組みさえ整えておけばさくっと開発環境が整います。

さらに、作ったアプリケーションを環境ごと公開できます。
DockerはDockerfileという一つのファイルによってコンテナ立ち上げ時の処理を記述できるので、
それを使ってアプリケーションの環境を整え、Githubなどからアプリケーションをクローンし、アプリケーションを起動する、という流れをDockerfileに記述することによってアプリケーションを環境ごと提供できます。

なお、Macでも一応Docker使えるらしいんですがなんかvagrantかなんかで小さいLinuxを一回建ててそこで起動するみたいなことしかできないらしいです…
Windows? VM使うほかないです。