LoginSignup
1
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-27

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
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2