Docker - Docker Hub でイメージを共有する
Docker Hub にイメージを共有することで、グループ内での共有が簡単になるようだ。
(公開範囲はGitHubと同じで、無料は public のみでprivateは有償)
Signup する
https://hub.docker.com/account/signup でアカウント作成する。
以下の例では hogeuser というユーザ名を使う。
※コマンドでもアカウントを登録することも可能みたい。
$ docker login
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
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オプション指定時)。
$ 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
用語の整理
インストール・起動・設定
今回は CentOS-6.5 上で実行。
yumの EPELリポジトリ にはいている。
$ 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
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
手軽にできるので余計な手を煩わせず開発に集中できそう。