#やりたいこと
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
※初回設定が終われば「-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. コンテナに接続・・・
力尽きたのでいったん投稿