Docker入門

| Comments

先日書きましたが、改めてDockerのいいところや使い方を学んでいこうと思います。

GoogleでもCoreOSを取り入れることになったようで、ますますDockerが普及していくんじゃないかなということで。

先日クーポンを頂いたので、しばらくGCE(Google Compute Engine)ラブです。

Dockerとは

仮想環境よりも軽量な、コンテナと呼ばれるものを管理する基盤。

ホストOSにDockerを用意して、その上に複数のコンテナを載せていく。

各コンテナは独立しており、同じマシン上で動いていても影響しない。付け替えも容易にできる。

何が嬉しいの?

オンプレ時代は、サーバー機に対して更新をかけるときは既存のものの上から更新をかける形だった。

ちょっと修正するだけなので楽に見えるが、

  • 一度処理を間違えると元に戻しにくい
  • ローカルとサーバーで環境が微妙に異なる
  • スケールしにくい

などの問題があった。

そこで、仮想環境に載せることで、あとからやり直せるような構成にする技術が進んだが、

  • 実行速度が遅い
  • 容量が大きくなる
  • デプロイも一苦労

などのオーバーヘッドに起因する問題が発生していた。

さらにはパブリッククラウド(EC2など)が登場し、snapshotで同じものを用意できるようになったが、

  • やはり開発環境と微妙に異なる。
  • 細かく分けてサーバーを立てるとお金が大量にかかる
  • ベンダー依存してしまう

といった問題があった。

Dockerは、これらの問題を解決するために、

  • どこでも同じ環境として動く。build once, Run anywhere
  • 不安定な環境にならない。Immutable Infrastracture
  • オーバーヘッドが少ない。
  • 共有が容易Docker Index

といった利点を持っている。

機能は?

とりあえず現状調べたものとして、

  • リソース管理cgroups
  • 差分管理ファイルシステムUnionFS
  • 環境設定ファイルDockerfile
  • ルーティング

どう使うの?

リソース管理cgroups

仮想マシンでいうところのCPUやメモリの割り当てを行える。

差分管理ファイルシステムUnionFS

作業の一つ一つがレイヤとして積み重なっていく。過去の作業を戻すことはないため、その部分を共有することができ、効率よく動作させることができる。

Dockerfile

Dockerfileがあれば、どの環境でもおなじように設定ができる。

(Docker Indexからpullしてくるのと違いがあるの?)

ルーティング

調査中

動作確認 on GCE

公式インストール手順

1
2
3
# sudo docker run [image type] [some operation]
sudo docker run busybox echo 'docker on GCE \o/'
sudo docker run ubuntu /bin/echo hello

試しにVersionを見てみるとこんなカンジ。

1
2
3
4
5
6
7
8
9
Client version: 0.11.1
Client API version: 1.11
Go version (client): go1.2.1
Git commit (client): fb99f99
Server version: 0.11.1
Server API version: 1.11
Git commit (server): fb99f99
Go version (server): go1.2.1
Last stable version: 0.11.1

現在の最新版が入っています。

グローバル設定

グローバルな設定ファイルはこんなカンジ

  • /etc/default/docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# Docker Upstart and SysVinit configuration file

# Customize location of Docker binary (especially for development testing).
#DOCKER="/usr/local/bin/docker"

# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"

# This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"

インタラクティブ操作

1
sudo docker run -t -h ubuntu ubuntu /bin/bash
  • -t インタラクティブ実行
  • -h root権限

っぽい。

log確認

1
docker logs -f [container id]
  • -f follow ずっと追い続ける。

現在のコンテナ確認

1
docker ps -a
  • -a 停止中も含めたすべてのコンテナ

一時停止

1
docker stop [container id]

Localでdocker

ちなみに、Local環境(Ubuntu14.04)でもやってみたところ、

1
2
3
4
5
6
7
Client version: 0.9.1
Go version (client): go1.2.1
Git commit (client): 3600720
Server version: 0.9.1
Git commit (server): 3600720
Go version (server): go1.2.1
Last stable version: 0.11.1, please update docker

少し古いバージョンでした。

今後、Commitやpullを追加していきます。

Comments