Skip to content

Instantly share code, notes, and snippets.

@sotayamashita
Last active August 29, 2015 14:27
Show Gist options
  • Save sotayamashita/340857daa7a9c0e67e72 to your computer and use it in GitHub Desktop.
Save sotayamashita/340857daa7a9c0e67e72 to your computer and use it in GitHub Desktop.
🎓 Training - Getting started with Virtual Environment
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 の登場 ✨。 DockerContainer 上にアプリケーション専用の空間を作れれば簡単に作ったりまたそれを壊したりがより簡単にできるっぽいのでこれを試してみます。実際に構成は以下のようになります。(こういう使い方があっているかはなぞ?分かる人いたら教えてください。)

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 とするだけで簡単にだれもが同じ本番と開発の環境が同じになる。

[?] ChefAnsible などの 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 の内部的には以下のようなことをしています。

  1. hello-world image がローカルにあるか確認
  2. なければ Docker Hub からダウンロード
  3. 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

参考サイト

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment