Series | Last Updated | OS X | Docker | Vagrant | Packer |
---|---|---|---|---|---|
Training |
14 Aug 2015 |
10.10.4 |
1.8.0 |
1.7.2 |
0.8.2 |
Docker を使って実現したいことがあったので Docker や せっかくなのでその周辺のことについてある程度しらべてまとめてみました。すべてを知っているわけではないので間違いなどがありましたらコメント等いただければと思います。
まず Docker について、"Get Started with Docker for Mac OS X" を読み、そこで書かれていることを実行することでなんとなく Docker とは何なのかまたどのように使うのかが分かります。
課題
上のドキュメントを読んで実際に以下のようなことを実践したいと思います。まずはじめに、何かのアプリケーションの開発をする際にローカルでやるのはいろいろと面倒です。一から手動で環境を整えたり、バージョンの切り替えを行ったり。できればあるそのアプリケーションの開発専用の空間があて、これは自動で簡単に作成できるし壊したいときは簡単に壊せて、またこの空間はそのアプリケーションに必要なものだけという風にできれば最高だなと思いました。
解決方法
それではじめに考えのが Virtual Machine 上に Linux OS とかを置いてそこで使われるソフトウェアを Ansible で管理してやれば簡単にあるアプリケーションのためだけの空間ができるなと思いました。しかしこれだとアプリケーションごどに新たな VM を作らないといけなく、この起動には時間がかかってしまうので簡単に壊したりできません。
そこで Dcoker の登場 ✨。 Docker の Container 上にアプリケーション専用の空間を作れれば簡単に作ったりまたそれを壊したりがより簡単にできるっぽいのでこれを試してみます。実際に構成は以下のようになります。(こういう使い方があっているかはなぞ?分かる人いたら教えてください。)
Dockerやらその周辺のことが分かる人は実際の方法について説明している実装方法まで飛ばしてください。
Container | Container
-----------------------
Docker
-----------------------
Linux OS = Core OS <- Vagrant + Ansible <-> Chef <-> Puppet <-> Salt
-----------------------
Virtual Machine = Virtual Box
-----------------------
Local Machine (Mac)
Linux OS
^ ^
-------------- ----------
Virtual Box AWS
-------------- or ----------
Vagrant Box AMI <- Packer
-------------- ----------
^ ^
Local Machine (Mac)
Vagrant とは違う環境に移行可能な開発環境を簡単に構築・管理し、配布することができる開発環境作成ツール。Vagrant で仮想環境上にどの Linux OS でどういったソフトウェアを使うかを Vagrantfile というものに書いて共有する。そして vagrant up
とするだけで簡単にだれもが同じ本番と開発の環境が同じになる。
[?] Chef や Ansible などの Infrastructure as Code は (ここなんか使い方違うかも?) も 以下のように Vagrantfile内の でも代替できるよと書いてあって、Chef や Andible を使うメリットってなんだろう?
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
Ansible や Chef などでも仮想マシンの環境を簡単に整えることができます。なので Vagnrat で Chef などを使う場合にはまず、 Vagrant で OS やら Python・Ansible という最低限のものをインストールして実行します。すると Ansible が設定ファイルにしたがっていい感じに環境を構築してくれます。
それで次に出てくるのは Docker ということで。ちょっとここは文章のつながりなくいきなり感あってすいません。 Docker
Mac 上に直接 Docker を実行できないので、 docker-machine
を使って Mac 上に Docker VM を構築します。Tool box をインストールすると以下の2つのアプリケーションが使えるようになっていると思います。
- Docker Quickstart Terninal ... Docker VM を起動してくれる
- Kitematic (Beta) ... Docker を GUI で操作できる
toolboxが使えるようになると Virtual Box 上に Default という名前の VM ができるいるので、その上に container を作っていきます。まずはうまく行っているか確認するために以下のコマンドを実行します。
$ docker run hello-world
- docker ... Docker コマンド
- run ... Docker container を作成・実行
- hello-world ... Docker container image
このコマンドを実行すると Docker の内部的には以下のようなことをしています。
hello-world
image がローカルにあるか確認- なければ Docker Hub からダウンロード
- container の中で image をロードして実行
この image は Docker が作成してくれたものですが他にもいろいろなものがあるので次はそちらを見て行きます。他の image は Docker Hub から見つけることができます。
ローカルシステムにある image のリスト表示。一度でも container で実行された image は Docker によってコンピューターにダウンロードされます。image が更新されるのは Docker Hub で変更があった場合です。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello-world latest af340544ed62 6 days ago 960 B
docker/whalesay latest fb434121fc77 11 weeks ago 247 MB
それでは次は実際に自分で image を作成してみる。
$ mkdir mydockerbuild
$ cd $_
$ vim Dockerfile
FROM docker/shalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
- Docker 入門ハンズオン資料 - Docker についてなんとなくわかる
- Docker Advent Calendar 2014 - 細かい技術とかある
- docker-library - Dockerfile の書き方の参考になる
- 最近の仮想化界隈を知る:VMWareからCoreOSまで