Edited at

Dcokerをvt-xがない環境でやってみよう(QEMU)

More than 1 year has passed since last update.


Dcokerをvt-xがない環境でやってみよう

dockerを始めたいが、手元のPCのvt-xが有効でない場合、QEMU上の仮想OSで実行する。

vt-xが有効ならば以前の投稿をご参考下さい。

image.png

キーワード

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

詳しくは公式WORKAROUNDS

再起動

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'

公式FAQ


(おまけ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