Works by

Ren's blog

@rennnosuke_rk 技術ブログです

DockerをMacで動かしてみる

Dockerとは

Dockerはコンテナ型の仮想化ツールです。
仮想化ツールといえば、VMWareVirtualboxなどの仮想化ソフトウェアを思い浮かべるかもしれませんが、 これらはOSごと環境を提供するハイパーバイザ型の仮想化技術と呼ばれます。

それに対し、コンテナ型の仮想化ツールではコンテナと呼ばれる小さな仮想化環境が作成され、それらが同じホストOSを共有します。 その上でサーバミドルウェアやライブラリ、ドライバなどが導入された環境をコンテナ内で提供できるので、よりコンパクトな仮想化が可能です。 また各コンテナは独立して動作するため、いらなくなった仮想環境はすぐに使い捨てることができます。

そのため、特定のアプリケーションを実行するような環境を容易に共有することができ、環境構築の煩わしさを軽減することができます。

DockerイメージとDockerHub

Dockerイメージとは、Dockerコンテナを作成する元となるものです。
オブジェクト指向でいうと、DockerイメージがクラスでDockerコンテナがインスタンスのようなものでしょうか。

DockerではGitのようにリモートリポジトリを作成してイメージを共有することができます。
GithubのようなリモートリポジトリサービスにDockerHubがあるので、そこにイメージをpushして公開することができます。

Docker for Macをインストールする

Docker for macにアクセスし、" DOWNLOAD FROM DOCKER STORE"をクリック。

f:id:rennnosukesann:20180224190926p:plain

"Get Docker"をクリック。

f:id:rennnosukesann:20180224191225p:plain

dmgファイルがダウンロードできるので、ダウンロードが完了したらdmgファイルをクリック。
くじらアイコンをApplicationに移動。

f:id:rennnosukesann:20180224191003p:plain

lancherなりSpotlightなりでアプリケーションを実行。

f:id:rennnosukesann:20180224204126p:plain

するとWelcomeメッセージが表示されます。
ダイアログのNextを押していき、Dockerアプリのprivate accessのためアカウントパスワードを入力。

f:id:rennnosukesann:20180224191029p:plain f:id:rennnosukesann:20180224191048p:plain

メニューバーにアイコンが出現し、メニューの一番上に" Docker is runnning" と表示されればOK。

f:id:rennnosukesann:20180224191135p:plain

f:id:rennnosukesann:20180224191143p:plain

Dockerイメージを作成する

Dockerイメージをpull

DockerHub上にアップロードされているDockerイメージからコンテナを作成してみます。
docker pullコマンドで、DockerHubからイメージをGitのようにpullすることができます。


# Dockerイメージをpull
$ docker pull docker/whalesay

# Dockerイメージ一覧
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker/whalesay     latest              6b362a9f73eb        2 years ago         247MB


pullしたイメージはDocker公式が予め用意しているHelloWorld的なイメージです。

Dockerコンテナを作成する

用意したDockerイメージからDockerコンテナを作成します。
docker runコマンドで作成可能です。


$ docker run docker/whalesay cowsay boo

 _____ 
< boo >
 ----- 
    \
     \
      \     
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
       \______ o          __/            
        \    \        __/             
          \____\______/   


コンテナの実行成功です。クジラのAAが出現し、booと鳴きます。
docker/whalesayは先程pull取得したDockerイメージのリポジトリ名です。
ここで使用するコンテナではcowsay というコマンドとbooという文字列を引数に取っています。

ちなみに-dオプションを付加すると、コンテナがバックグラウンドで実行されます。


$ docker run -d docker/whalesay cowsay boo
b6ca90c1108dbb037b5213cd9ed5537060992903b3e805e0fba46881f4c4babc


実行中のコンテナは、docker psで起動することができます。
下の例では実行しているコンテナがないため、何も表示していません。


$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


docker ps -aで、いままでに実行したコンテナを含めて表示できます。


$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
b6ca90c1108d        docker/whalesay     "cowsay boo"        15 seconds ago       Exited (0) 14 seconds ago                           compassionate_khorana
ae604513529a        docker/whalesay     "cowsay bar"        About a minute ago   Exited (0) About a minute ago                       romantic_brattain
f2ddfcbcd9b5        docker/whalesay     "cowsay boo"        About a minute ago   Exited (0) About a minute ago                       naughty_nobel


まとめ

いかがだったでしょうか。Dockerを使えば、

などの環境を構築済みの状態で簡単に共有できます。 アプリケーションのハンズオンや新しいライブラリを試したいときに、一度使ってみてはいかがでしょうか。