Help us understand the problem. What is going on with this article?

2020年版qemuで動作するboot2dockerを用いたvscodeのリモート開発

やりたいこと

windowsでlocalで簡単にDockerを立ち上げ、vscodeのRemote拡張でサクッと開発したい。
qemu+boot2dockerのisoイメージを利用する手法を用いることで、
Window10の64bit版ならhomeかつvt-xなしでもできそう

やらないこと

以下のものは便利だが、環境を選ぶのであえて使わない方向で進めてみる
Docker Desktop for Mac and Windows
Docker Machine

1. qemu インストール

以下より2020年2月7日時点の最新版を取得してインストール
※古いqemuを使うとWindows10でnodejs等が正常に動かなかったため最新版をお勧め。

https://qemu.weilnetz.de/w64/
qemu-w64-setup-20200201.exe

2. Diskイメージ作成

データ用
qemu-img create -f qcow2 data.qcow2 100G

SWAP用(本当に必要か分かんない)
qemu-img create -f raw swap.img 1G

3. boot2dockerのisoイメージ取得

以下より2020年2月7日時点の最新版を取得

https://github.com/boot2docker/boot2docker/releases
v19.03.5のboot2docker.iso

4. 起動して初期設定(初回のみ)

qemu-system-x86_64 -hda ./data.qcow2 -hdb ./swap.img -cdrom ./boot2docker.iso -smp 2 -m 2G -boot d -net nic -net user,hostfwd=tcp::22-:22

CPU割り当て2つ:-smp 2
メモリ割り当て2G:-m 2G
NATとSSHでログインするためのポートフォワード設定: -net nic -net user,hostfwd=tcp::22-:22

image.png

※初回設定が終われば「-nographic」オプションをつけてもOK

ここからqemuで起動したゲストOS(coreOS)での操作

QEMUのコンソールでもよいが、コピペ等やりにくいのでSSHでやる場合は以下の通り接続

ssh docker@localhost

ユーザ:dokcer
パスワード:tcuser
DockerReadmeより

5. debianイメージをとってきて、diskにラベルを設定

ラベルを付けるとboot2dockerが起動時にマウントしてくれるので永続領域となるdata.qcow2とswap.imgにラベルを付ける。

docker run -i -t --rm --privileged -v /dev:/hostdev debian bash

👇ここからdockerで起動したコンテナ(debian)での操作

fdisk /hostdev/sda

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): o
Created a new DOS disklabel with disk identifier 0x25bc3c8f.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-209715199, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715199, default 209715199):

Created a new partition 1 of type 'Linux' and of size 100 GiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.

data.qcow2(sda1)にラベル設定

apt-get update && apt-get install btrfs-tools
mkfs.btrfs -L boot2docker-data /hostdev/sda1

swap.img(sdb)をswapにしてラベル設定

mkswap -L boot2dockerswap /hostdev/sdb

コンテナを抜ける

exit

👆ここまでdockerで起動したコンテナ(debian)での操作

👇ここからqemuで起動したゲストOS(coreOS)での操作

sudo reboot

マウントされているか確認

df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                     1.8G    283.6M      1.5G  16% /
tmpfs                   998.6M         0    998.6M   0% /dev/shm
/dev/sda1               100.0G     16.8M     98.0G   0% /mnt/sda1
cgroup                  998.6M         0    998.6M   0% /sys/fs/cgroup
/dev/sda1               100.0G     16.8M     98.0G   0% /mnt/sda1/var/lib/docker
/dev/sda1               100.0G     16.8M     98.0G   0% /mnt/sda1/var/lib/docker/btrfs

SWAPも設定されてそう

swapon -s
Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       427332  0       -2
/dev/sdb                                partition       1048572 0       -3

6. /home/dockerの永続化

これで/var/libが永続化しているので、dockerを使う分には問題ないが、/home/dockerは永続化されていないので、vscodeのRemote-sshを利用すると毎回インストールが発生する。

boot2dockerの/home/dockerはdockermachineで自動で配備するため、
こちらの記事のやり方が正しいのだが、今回はdockermachineは使わないので先ほど作成したDISKにシンボリックリンクを張ることにした。

#今のフォルダを永続領域にコピー
sudo cp -rp /home/docker/ /var/lib/boot2docker/userdata

#boot2docker起動時に読み込まれるprofileにリンク設定を追記
vi /var/lib/boot2docker/profile

#/var/lib/boot2docker/profileへ以下を追記
rm -rf /home/docker
ln -s /var/lib/boot2docker/userdata /home/docker

※boot2docker上で外部プロキシが必要ならここに追記する。

export http_proxy=http://username:password@your.proxy.address:proxy.port/
export https_proxy=http://username:password@your.proxy.address:proxy.port/

んで再起動

sudo reboot

7. vscodeにて拡張機能インストール

👇ここからホストのvscodeでの操作

Remote-SSHの拡張をインストール

~/.ssh/config ファイルに以下の内容を追記して

Host localhost
  HostName localhost
  User docker
  Port 22

拡張機能から接続する。ここではパスワード(tcuser)でログイン

※初回エラーになったらRetryするとつながることがある。

8.sshキー作成&公開キー登録

パスワードを入力するのはめんどくさいので、sshキー作成

ssh-keygen -t rsa -b 4096 -C "your@mail"

~/.ssh/id_rsa.pub ができるのでこちらを先ほど接続したboot2dockerの~/.ssh/authorized_keys にコピペ

9. コンテナに接続・・・

力尽きたのでいったん投稿

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした