そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

Docker - Docker Hub でイメージを共有する


Docker Hub にイメージを共有することで、グループ内での共有が簡単になるようだ。
(公開範囲はGitHubと同じで、無料は public のみでprivateは有償)

Signup する

https://hub.docker.com/account/signup でアカウント作成する。

以下の例では hogeuser というユーザ名を使う。

※コマンドでもアカウントを登録することも可能みたい。

$ docker login 

Docker Hub のリポジトリを作成

右上の +Add Repositories リンクから作成する。

以下の例では harepo というリポジトリ名を使う。

docker にコミットするイメージを準備する

ローカルにあるイメージ(fooイメージ)をリポジトリ(とタグ名)付けする。

$ docker tag foo hogeuser/harepo

タグ名省略時は latest になる

Docker Hub に pushする

$ docker push hogeuser/harepo

初回ユーザ名とパスワードの入力が必要。

Docker Hub から pull する

$ docker pull hogeuser/harepo

Docker - Dockerizing してみる


Dockerfile からDockerイメージを作成して環境をためしてみた。
chef と同じように、コード(こちらはGo言語)で構成管理を記述できる。

役割毎にDockerコンテナーを作成することで、1つのOS上で環境を構築
できる。
ハイパーバイザーの仮想化のようなボトルネックもなく、他環境を壊す心配もないので、
開発時にはとても重宝しそう。

Chef Container で、Chefから管理できるようになってきているみたい。
インフラ自動化ツールのChefもDocker対応へ。「Chef Container」ベータ版発表 - Publickey

今回の環境

ホストは CentOS-6.5 さくらVPS
ゲストは CentOS-7

Dockerfile を作成する

とりあえず ruby をインストールしてみる。
わかりやすいようにディレクトリを掘ってから作成した。

$ mkdir -p docker/ruby
$ cd docker/ruby
$ vim Dockerfile

Dockerfile は Go でかかれているようだがこれは設定ファイルのようなもの。

リファレンス: Dockerfile - Docker Documentation

# ベースとなるDockerイメージを指定。キャッシュがなければpullされる。
FROM    centos:centos7
MAINTAINER      babio "babio@desu"

RUN yum update -y
RUN yum install -y ruby

CMD ["which", "ruby"]

docker build でイメージを作成する

$ docker build --rm -t centos7_ruby .

Dockerファイルのコマンド毎にDockerコンテナーが作成し
変更を反映し、コンテナーを削除して(--rmオプション指定時)、
タグ名が centos7_ruby な Dockerイメージが作成される、という流れ。

docker run で確認してみる

$ docker run --rm centos7_ruby
/usr/bin/ruby

ruby のパスが表示されて終了。
終了するとDockerコンテナーは削除される(--rmオプション指定時)。

この Bashインタラクティブに使ってみる。

$ docker run -i -t --rm centos7_ruby /bin/bash
bash-4.2# which ruby
/usr/bin/ruby

もちろんpullしたイメージにrubyは入っていません。

$ docker run -i -t --rm centos:centos7 /bin/bash
bash-4.2# which ruby
which: no ruby in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)

Docker - 手軽に使えそうな仮想環境を試してみた


Docker は Linux上で動作するコンテナー型と呼ばれる仮想化ソフトウェア。
ハイパーバイザー型に比べて、OS起動時のオーバーヘッドが少なくとても早い。

いまさら聞けないDocker入門(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 - @IT

用語の整理

  • Dockerレジストリ: Dockerイメージの格納場所。Docker Hub Registry
  • Dockerイメージ : Docker コンテナーの元となるイメージ。クリーンなOSなどを用意。Pre-build なものは Docker Hub Registry においてある
  • Dockerコンテナー: Dockerイメージ(ローカルキャッシュ)をコピーして起動される仮想環境
  • ローカルキャッシュ: docker pull の際にダウンロードしたDockerイメージ。

インストール・起動・設定

今回は CentOS-6.5 上で実行。
yumの EPELリポジトリ にはいている。

CentOS - Docker Documentation

$ sudo yum install docker-io -y
$ sudo /sbin/service docker start
$ sudo gpasswd -a <user> docker
$ docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
 Pool Name: docker-253:0-1967542-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 291.5 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 0.7 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.20
Kernel Version: 2.6.32-431.20.3.el6.x86_64

docker グループに追加しているのはsudoせずに実行できるようにするため。

centos7 のベースイメージをダウンロード

Docker Hub Registry - Repositories of Docker Images から Pre-build image をダウンロードできる。
今回は centos7 をインストール。

$ docker pull centos:centos7

centos:centos7 は (ユーザ名/)イメージ名:タグ名。githubと同じ。

docker コンテナを起動

コンテナ名を centos7_test としている。
今後の操作に必要となる。

$ docker run -it --name centos7_test centos:centos7 /bin/bash
bash-4.2# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

OS の起動がないのですごい速い・・・。

Ruby を入れてみた。ダウンロードの時間はともかくインストールはすぐ終わる。

bash-4.2# yum install ruby -y
((いろいろ))
bash-4.2# ruby --version
ruby 2.0.0p353 (2013-11-22) [x86_64-linux]

Ctrl-d か、exit で抜けられます。コンテナは自動停止する。

bash-4.2# exit

停止中のコンテナを起動する

$ docker start -i centos7_test
$ docker attach centos7_test
bash-4.2#

docker コンテナ一覧の表示

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED            STATUS                       PORTS               NAMES
896d0972763b        centos:centos7      /bin/bash           7 seconds ago      Exited (127) 2 seconds ago                       centos7_test

コンテナを削除する

$ docker rm centos7_test

手軽にできるので余計な手を煩わせず開発に集中できそう。