Docker: boot2docker VM で起動中のコンテナの中に入ってシェルを立ち上げる方法, 改良版
boot2docker 上で起動したコンテナに入ってシェル操作を行う方法。
nsinit を使う よりも、nsenter の方が少ない手順とコストで実現できた。
環境
- OS: Mac OS X 10.9 (Mavericks)
- boot2docker: v1.0.1
リポジトリ
事前準備
- VirtualBox のインストール
- boot2docker 最新版のインストール (OS X インストーラ の利用を推奨: 詳細手順)
- インストール前に VirtualBox の全ての VM、GUI を停止すること
- 既に boot2docker VM が存在している場合は以下のコマンドを実行 (元の環境は削除される)
$ boot2docker halt $ boot2docker delete $ boot2docker download
セットアップ
1. boot2docker VM の作成・ログイン
Mac$ boot2docker init Mac$ boot2docker up Mac$ boot2docker ssh
以下の手順は boot2docker VM 上で実行。
2. util-linux 拡張機能のダウンロード
docker@boot2docker:~$ tce-load -w util-linux ncurses.tcz.dep OK Downloading: udev-lib.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) udev-lib.tcz 100% |*********************************************************************************************| 45056 0:00:00 ETA udev-lib.tcz: OK Downloading: ncurses-common.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) ncurses-common.tcz 100% |*********************************************************************************************| 12288 0:00:00 ETA ncurses-common.tcz: OK Downloading: ncurses.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) ncurses.tcz 100% |*********************************************************************************************| 148k 0:00:00 ETA ncurses.tcz: OK Downloading: util-linux.tcz Connecting to repo.tinycorelinux.net (89.22.99.37:80) util-linux.tcz 100% |*********************************************************************************************| 992k 0:00:00 ETA util-linux.tcz: OK
/tmp/tce/optional (/mnt/sda1/tmp/tce/optional) 配下にファイルがダウンロードされる。
3. util-linux 拡張機能 ファイルの永続化
先ほどダウンロードしたファイル群のある optional ディレクトリごと、永続ディスクである /var/lib/boot2docker 配下に移動する。
docker@boot2docker:~$ sudo mv /tmp/tce/optional /var/lib/boot2docker/
4. docker-attach スクリプトのダウンロード
コンテナにアタッチするための便利シェル、docker-attach を /var/lib/boot2docker/bin 配下にダウンロードする。
docker@boot2docker:~$ sudo mkdir -p /var/lib/boot2docker/bin docker@boot2docker:~$ sudo curl -o /var/lib/boot2docker/bin/docker-attach \ https://raw.githubusercontent.com/mogproject/docker-attach/master/docker-attach docker@boot2docker:~$ sudo chmod +x /var/lib/boot2docker/bin/docker-attach
- スクリプトの中身は、コマンドライン引数として渡されたコンテナIDからプロセスIDを検索して
そこにオプション付きの nsenter を実行しているのが主処理。CONTAINER_ID=$1 PID=$(docker inspect --format '{{.State.Pid}}' $CONTAINER_ID) sudo nsenter --mount --uts --ipc --net --pid --target $PID
5. bootlocal.sh スクリプトのダウンロードと実行
boot2docker VM は起動時に /var/lib/boot2docker/bootlocal.sh が存在すれば、それを実行する。
このシェルの中で util-linux のインストールとコマンドのリンクを行い、boot2docker 再起動後も元の状態を復元できるようにしている。
docker@boot2docker:~$ sudo curl -o /var/lib/boot2docker/bootlocal.sh \ https://raw.githubusercontent.com/mogproject/docker-attach/master/bootlocal.sh docker@boot2docker:~$ sudo chmod +x /var/lib/boot2docker/bootlocal.sh docker@boot2docker:~$ sudo /var/lib/boot2docker/bootlocal.sh boot2docker: 1.0.1 master : cad5ece - Fri Jun 20 02:03:40 UTC 2014 udev-lib.tcz: OK ncurses-common.tcz: OK ncurses.tcz: OK util-linux.tcz: OK
実行例
- 適当なコンテナを起動し、コンテナIDを確認 (boot2docker上でも、Macからでも可)
$ docker run -d -t centos /bin/sleep 1000 $ docker run -d -t centos /bin/sleep 1000 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f8c149734c7a centos:latest /bin/sleep 1000 5 minutes ago Up 2 minutes naughty_sinoussi 701810969c35 centos:latest /bin/sleep 1000 5 minutes ago Up 2 minutes sleepy_bell
- boot2docker上で docker-attach を実行してコンテナにアタッチ
docker@boot2docker:~$ docker-attach 701810969c35 root@701810969c35:/# cat /etc/redhat-release CentOS release 6.5 (Final) root@701810969c35:/# exit logout docker@boot2docker:~$
- Macからも、同じ docker-attach スクリプトを使って直接アタッチ可能
Mac$ sudo curl -o /usr/local/bin/docker-attach \ https://raw.githubusercontent.com/mogproject/docker-attach/master/docker-attach Mac$ sudo chmod +x /usr/local/bin/docker-attach Mac$ docker-attach f8c149734c7a -sh-4.1# cat /etc/redhat-release CentOS release 6.5 (Final) -sh-4.1# exit logout Mac$
ワンライナーでのセットアップ
セットアップ用のシェルも作った。
docker-attach/setup_boot2docker.sh at master · mogproject/docker-attach
- boot2docker上で
$ curl https://raw.githubusercontent.com/mogproject/docker-attach/master/setup_boot2docker.sh | /bin/sh
- または、Mac上で
$ boot2docker ssh '/bin/sh -c "curl https://raw.githubusercontent.com/mogproject/docker-attach/master/setup_boot2docker.sh | /bin/sh"'
0 件のコメント:
コメントを投稿