Dockerをbrew経由でインストールして使ってみました。
VirtualBoxのインストール
DockerにはVirtualBoxが必要なので、VirtualBoxのページからインストール用のdmgをダウンロードします。
そして、ダウンロードしたdmgをマウントして、パッケージをインストールしてください。
boot2dockerとdockerのインストール (brew)
brewにdocker 0.8.0があったので、それを使いました。
$ brew search docker boot2docker docker $ brew info docker docker: stable 0.8.0 (bottled) http://docker.io Not installed From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/docker.rb ==> Dependencies Build: go ✘ ==> Options --without-completions Disable bash/zsh completions
dockerとboot2dockerの両方を入れておきます。
$ brew install boot2docker ==> Downloading https://github.com/steeve/boot2docker/archive/v0.5.4.tar.gz ######################################################################## 100.0% 🍺 /usr/local/Cellar/boot2docker/0.5.4: 4 files, 32K, built in 3 seconds $ brew install docker ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/docker-0.8.0.mavericks.bottle.2.tar.gz ######################################################################## 100.0% ==> Pouring docker-0.8.0.mavericks.bottle.2.tar.gz ==> Caveats Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions ==> Summary 🍺 /usr/local/Cellar/docker/0.8.0: 9 files, 12M
boot2dockerの初期化
boot2dockerはDockerの起動をのために構成されたTiny Core Linuxベースのディストリビューションです。dockerを利用するためには、あらかじめboot2docker init
でboot2dockerの設定をしておく必要があります。
2024.02.26 追記 次の作業は行わなくてよくなりました。
brewではシェルスクリプトだけがインストールされるので、
boot2docker init
に必要なboot2docker.isoがありません。そこで、次のURLからboot2docker.isoをダウンロードしておきます。
$ boot2docker init [2014-02-23 01:05:52] Creating VM boot2docker-vm Virtual machine 'boot2docker-vm' is created and registered. UUID: a8ab1bb3-9e60-4911-bbb2-22ab6c0fa404 Settings file: '/Users/safx/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vbox' [2014-02-23 01:05:52] Setting VM settings [2014-02-23 01:05:52] Setting VM networking [2014-02-23 01:05:52] Setting VM disks [2014-02-23 01:05:52] Creating 40000 Meg hard drive... 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Disk image created. UUID: 66c6b926-3b30-4807-b2ec-a3d4e1117067 Converting from raw image file="format-flag.txt" to file="format-flag.vmdk"... Creating dynamic image with size 5242880 bytes (5MB)... 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone hard disk created in format 'VMDK'. UUID: 66c6b926-3b30-4807-b2ec-a3d4e1117067 [2014-02-23 01:05:53] Done. [2014-02-23 01:05:53] You can now type boot2docker up and wait for the VM to start.
boot2docker.isoをダウンロードし、それを用いてboot2docker.vmdkが作成されます。
$ ls boot2docker.* boot2docker.iso boot2docker.vmdk
boot2dockerの起動
先ほど初期化したboot2docker.vmdkをboot2docker経由でヘッドレスモードで起動させます。
まず、DOCKER_HOSTを設定しておきます。
$ export DOCKER_HOST=tcp://127.0.0.1:4243
そして、boot2dockerを用いてdockerのdaemonを起動させます。手元環境では20秒ほどあかりました。
$ time boot2docker up [2014-02-23 01:13:32] Starting boot2docker-vm... [2014-02-23 01:13:52] Started. boot2docker up 0.09s user 0.10s system 0% cpu 20.651 total
boot2docker status
でステータスが確認できます。
$ boot2docker status [2014-02-23 00:50:40] boot2docker-vm is running.
Dockerのイメージの取得と起動
お試し用に、小さめのイメージを使うために、docker search
で小さめイメージを検索します。
$ docker search tiny NAME DESCRIPTION STARS OFFICIAL TRUSTED hecticjeff/ipserver Tiny server which responds with your curre... 1 [OK] paintedfox/tinyproxy A docker image for running Tinyproxy, a li... 1 [OK] jprjr/docker-tinyfs A small image (5.5MB) made using buildroot. 1 [OK] jprjr/tinynode A small buildroot-based image with NodeJS ... 1 [OK] : :
jprjr/docker-tinyfs
が小さそうなので、これをdocker pull
で取得します。
$ docker pull jprjr/docker-tinyfs Pulling repository jprjr/docker-tinyfs 6c0d846f8603: Download complete 511136ea3c5a: Download complete 64b5438a9d10: Download complete 19b8f5796ba9: Download complete 4840b0e9b440: Download complete 6a6cf9801c71: Download complete ece0a963fb32: Download complete
イメージ一覧はdocker images
で確認できます。この中に、先ほど取得したイメージがあるのがわかります。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE jprjr/docker-tinyfs latest 6c0d846f8603 9 weeks ago 5.359 MB
では、このイメージを起動させてみましょう。docker run <イメージ> <コマンド>
という形式で、イメージ内のものを実行させることができます。
$ docker run jprjr/docker-tinyfs uname -a Linux 85e1517b9ec9 3.13.3-tinycore64 #1 SMP Wed Feb 19 01:15:06 UTC 2014 x86_64 GNU/Linux
いろいろしたいときは、-t
(tty割り当て) と-i
(interactiveモード) を付けてシェルを起動させましょう。
$ docker run -t -i jprjr/docker-tinyfs /bin/sh ~ $ pwd /home/default ~ $ echo 'foobar' > sample.txt ~ $ cat sample.txt foobar ~ $ ls / bin dev etc home lib lib64 linuxrc media mnt opt proc root run sbin sys tmp usr var ~ $ exit [error] commands.go:2496 Couldn't send EOF: use of closed network connection
Dockerイメージのコミット
docker run
は実行するごとに新しいコンテナを作って、そこでコマンドを実行しています。
なので、先ほど追加したsample.txtはこのままでは利用できません。
利用するにはコンテナをコミットして、イメージにしてやる必要があります。
まず、docker ps -a
で、作ったコンテナの情報を見てみましょう。コンテナID、イメージ、実行したコマンドなどが表示されます。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f0af6964cbe9 jprjr/docker-tinyfs:latest /bin/sh About an hour ago Exit 0 sleepy_curie 1ece86ef2731 jprjr/docker-tinyfs:latest uname -a About an hour ago Exit 0 ecstatic_ritchie
上で実行したのは、2つのrun
コマンドなので2つのコンテナが作成されており、そのどちらもイメージはjprjr/docker-tinyfsである、などのことがわかります。
なお、docker ps -l
で、一番新しいコンテナのみの表示になります。
sample.txtを追加した/bin/sh
のコンテナ (コンテナID f0af6964cbe9) をコミットしましょう。「docker commit <コンテナID> <新しいイメージ名>」でコミットします。これで、指定したコンテナからイメージが作成されます。
$ docker commit f0a my/sample e63c176fdef9600e32ac9a4422441d32529529b79006bcd61be5bb56f1596fc4
docker images
で確認すると、確かに新しいイメージができています。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE my/sample latest e63c176fdef9 27 seconds ago 5.408 MB jprjr/docker-tinyfs latest 6c0d846f8603 9 weeks ago 5.359 MB
このイメージでdocker run
すると、先ほどのテキストファイルがちゃんと読めるようになっています。
$ docker run my/sample cat /home/default/sample.txt foobar
今回はつまらないテキストファイルを追加しただけですが、実際にはパッケージャなりを利用して、環境を整備してコミットする、というのを繰り返していったりするみたいです。
boot2docker initすればisoもダウンロードしてくれると思いますよー
返信削除情報ありがとうございます!
返信削除それができていなかったんですよ…。
調べたところ、brewのboot2docker内get_latest_release_nameで見ているURLがGitHubの最新のものと違っていました。
boot2dockerを最新のものにするとboot2docker initで取得できました。現時点ではbrewのものはちょっと古いみたいですね。
連投失礼します。
返信削除brewのboot2dockerも最新にしたら大丈夫になっていました。
なのでちょっと記事に追記しました。