#Dcokerをvt-xがない環境でやってみよう
dockerを始めたいが、手元のPCのvt-xが有効でない場合、QEMU上の仮想OSで実行する。
vt-xが有効ならば以前の投稿をご参考下さい。
キーワード
docker without vt-x
#QEMUをインストール
QEMU公式からダウンロードしてインストール
#Boot2dockerのISOイメージを取得
Boot2docker公式からboot2docker.isoをダウンロード
#事前準備1(初回のみ)
Dockerの永続領域のHDイメージを作成。適当に30GB
※qcow2(圧縮)形式やRAW(非圧縮)形式
qemu-img create -f qcow2 data.qcow2 30G
QEMUでISOを起動
若干時間がかかります。
qemu-system-x86_64 -hda ./data.qcow2 -cdrom ./boot2docker.iso -smp 4 -m 4G -boot d -net nic -net user,hostfwd=tcp::2022-:22
CPU割り当て4つ:-smp 4
メモリ割り当て4G:-m 4G
NATとSSHでログインするためのポートフォワード設定: -net nic -net user,hostfwd=tcp::2022-:22
起動したらSSHでログイン
QEMUのコンソールでもよいが、コピペ等やりにくいのでSSHでやる。
ssh docker@localhost -p 2022
ユーザ:dokcer
パスワード:tcuser
DockerReadmeより
先ほどのHDイメージが「/dev/sda」に設定されているので、初期化する。
btrfs で「boot2docker-data」のラベルを付けなければならないので、boot2dockerを使うためにDockerでdebianイメージをとってきてHDイメージを初期化する。
docker run -i -t --rm --privileged -v /dev:/hostdev debian bash
Boot2dockerの/devが/hostdevにマウントされているので、debian内で以下のコマンドを実行。
root@5c3507fcae63:/# fdisk /hostdev/sda
Command: o
Command: n
Select: p
Partition: <enter>
First sector: <enter>
Last sector: <enter>
Command: w
root@5c3507fcae63:/# apt-get update && apt-get install btrfs-tools
root@5c3507fcae63:/# mkfs.btrfs -L boot2docker-data /hostdev/sda1
root@5c3507fcae63:/# exit
再起動
sudo reboot
#Dockerを使おう
起動したらSSHでログイン。
永続領域にDocker関連ファイルは保存されるため、再起動しても消えなくなります。
先ほどのdebianさんは消えてます。
ssh docker@localhost -p 2022
ユーザ:dokcer
パスワード:tcuser
DockerReadmeより
###以下のエラーが出た場合
Boot2docker側の署名が変わったので取り直しましょう。
$ ssh docker@localhost -p 2022
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
修正コマンド
ssh-keygen -R '[localhost]:2022'
#(おまけflowchart.jsのフローチャートソース)
st=>start: Boot2dockerが使いたい:
e=>end: Virtualbox + boot2docker
eq=>end: QEMU + boot2docker
cond=>condition: BIOS(CPU)でvt-xが有効?
Yes or No?:
cond2=>condition:
Yes or No?:
st->cond
cond(yes)->e
cond(no)->eq
#(おまけProxyで躓いたら)
・Boot2dockerでdockerhubへ接続する場合
今回でいうdebianの取得時
/etc/default/docker(初めは存在しません)へproxyサーバを記述する。
export http_proxy=http://username:password@your.proxy.address:proxy.port/
export https_proxy=http://username:password@your.proxy.address:proxy.port/
・Dockerのゲストからapt-getする場合
今回でいうdebianの中
/etc/apt/apt.conf(初めは存在しません)へproxyサーバを記述する。
Acquire::http::proxy "http://username:password@your.proxy.address:proxy.port/";
Acquire::https::proxy "http://username:password@your.proxy.address:proxy.port/";
#(おまけホスト⇔Boot2dockerのポートフォワードについて)
QEMUのポートを起動後に開ける方法がわからなかったので、sshでポートフォワードしてみた。
boot2dockerで適当に8000ポートへnginxを公開
docker run -d -p 8000:80 nginx
ホストの80ポートへboot2dockerの8000ポートをSSH経由でフォワード
ssh -L 80:localhost:8000 docker@localhost -p 2022