macでもDocker Desktopなしでいい感じにDocker環境を構築する

自分用の構築メモです。

# VirtualBox の設定

1. ホストネットワークマネージャーを作成する  
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ca761ce0-0b6d-e578-e3a4-02791aa8978a.png)

1. 仮想マシンを作成する際にNICを`NAT`と`ホストオンリーアダプター`の２つ設定する  
![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/3a8004b1-bfed-9dc2-bb5a-f9c87ee849d3.png)
 ![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/5aa8c870-baa6-4fa2-1afe-55bf2cde3b81.png)

1. Ubuntu Server 20.04をインストール  
  インストールが始まったら、NICを２つとも切断するとUpdateが失敗するのでインストールが早く終る

# Ubuntuの設定

1. SSHの設定

```bash:Ubuntu
sudo sed -i 's/#PubkeyAuthentication/PubkeyAuthentication/g' /etc/ssh/sshd_config
sudo sed -i 's/#AuthorizedKeysFile/AuthorizedKeysFile/g' /etc/ssh/sshd_config
sudo systemctl restart sshd.service

ssh-keygen -t rsa -b 4096 -C "moritalous"
cat ~/.ssh/id_rsa.pub >>  ~/.ssh/authorized_keys
```

2. Dockerインストール

```bash:Ubuntu
curl -fsSL https://get.docker.com -o get-docker.sh && \
sudo sh ./get-docker.sh && \
sudo usermod -aG docker $USER
```

3. VirtualBoxゲストツールインストール

```bash:Ubuntu
sudo apt update && \
sudo apt install -y virtualbox-guest-dkms virtualbox-guest-utils && \
sudo usermod -aG vboxsf $USER

# macと同じパスで共有するため
sudo mkdir -p /Users/Shared/VBox
```

![スクリーンショット 2021-10-10 21.38.21 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/8a2b7b6d-d3be-52a0-40a3-9c9ee4b37803.png)

# macの設定

1. 鍵でSSHログインする設定

```tex:~/.ssh/config
Host Ubuntu-VirtualBox-Docker
  HostName xxx.xxx.xxx.xxx
  User ubuntu
  IdentityFile ~/.ssh/xxxxxxxxxx/id_rsa
```

1. Docker Clientをインストール

```bash:mac
curl https://download.docker.com/mac/static/stable/x86_64/docker-20.10.9.tgz -o docker-20.10.9.tgz
tar xzvf docker-20.10.9.tgz
sudo xattr -rc docker
mkdir ~/bin
cp -rf docker/* ~/bin/
echo 'export PATH=$PATH:~/bin' >> ~/.zshrc

docker context create vbox --docker "host=ssh://ubuntu@Ubuntu-VirtualBox-Docker"
docker context use vbox
```

# VSCodeの.devcontainerの設定

* workspaceFolderを追加
* workspaceMountを追加
* mountsを追加
* remoteUserを削除（rootで動くようにする）

```json-doc:.devcontainer
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.202.1/containers/ubuntu
{
	"name": "Ubuntu",
	"runArgs": ["--init"],
	"build": {
		"dockerfile": "Dockerfile",
		// Update 'VARIANT' to pick an Ubuntu version: hirsute, focal, bionic
		// Use hirsute or bionic on local arm64/Apple Silicon.
		"args": { "VARIANT": "focal" }
	},
// ここから追加
	"workspaceFolder": "/workspace",
	"workspaceMount": "source=workspace,target=/workspace,type=volume",

	"mounts": [
		"source=/Users/Shared/VBox,target=/workspace/VBox,type=bind,consistency=cached"
	],
// ここまで追加
	// Set *default* container specific settings.json values on container create.
	"settings": {},


	// Add the IDs of extensions you want installed when the container is created.
	// "extensions": [],
	"extensions": []

	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],

	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "uname -a",

	// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
// rootユーザーで動かす
	// "remoteUser": "vscode"
// rootユーザーで動かす
}
```

# VirtualBoxの起動（コマンドラインでヘッドレス）

```bash:mac
VBoxManage startvm Ubuntu20.04-docker --type headless
```