Dockerをbrew経由でインストールして使ってみました。
VirtualBoxのインストール
DockerにはVirtualBoxが必要なので、VirtualBoxのページからインストール用のdmgをダウンロードします。
そして、ダウンロードしたdmgをマウントして、パッケージをインストールしてください。
boot2dockerとdockerのインストール (brew)
brewにdocker 0.8.0があったので、それを使いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ 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の両方を入れておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ 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をダウンロードしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ 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が作成されます。
1 2 | $ ls boot2docker.* boot2docker.iso boot2docker.vmdk |
boot2dockerの起動
先ほど初期化したboot2docker.vmdkをboot2docker経由でヘッドレスモードで起動させます。
まず、DOCKER_HOSTを設定しておきます。
1 | $ export DOCKER_HOST=tcp: //127 .0.0.1:4243 |
そして、boot2dockerを用いてdockerのdaemonを起動させます。手元環境では20秒ほどあかりました。
1 2 3 4 | $ 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
でステータスが確認できます。
1 2 | $ boot2docker status [2014-02-23 00:50:40] boot2docker-vm is running. |
Dockerのイメージの取得と起動
お試し用に、小さめのイメージを使うために、docker search
で小さめイメージを検索します。
1 2 3 4 5 6 7 | $ 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
で取得します。
1 2 3 4 5 6 7 8 9 | $ 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
で確認できます。この中に、先ほど取得したイメージがあるのがわかります。
1 2 3 | $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE jprjr /docker-tinyfs latest 6c0d846f8603 9 weeks ago 5.359 MB |
では、このイメージを起動させてみましょう。docker run <イメージ> <コマンド>
という形式で、イメージ内のものを実行させることができます。
1 2 | $ 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モード) を付けてシェルを起動させましょう。
1 2 3 4 5 6 7 8 9 10 11 | $ 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、イメージ、実行したコマンドなどが表示されます。
1 2 3 4 | $ 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> <新しいイメージ名>」でコミットします。これで、指定したコンテナからイメージが作成されます。
1 2 | $ docker commit f0a my /sample e63c176fdef9600e32ac9a4422441d32529529b79006bcd61be5bb56f1596fc4 |
docker images
で確認すると、確かに新しいイメージができています。
1 2 3 4 | $ 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
すると、先ほどのテキストファイルがちゃんと読めるようになっています。
1 2 | $ 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も最新にしたら大丈夫になっていました。
なのでちょっと記事に追記しました。