Remote-ContainersでPodmanを使う動作検証（随時更新）

# この記事について
VScode + Remote-ContainersでDockerの代わりにPodmanを使うために調査中の内容です。
Remote-ContainersおよびPodmanの開発が現在進行形なので、現時点で動作可能な環境を記載しています。





## 最新の情報は下記になります（**2020/12/25** 時点）。
[VS Code + Remote Development + Podmanでコンテナの中で開発を行う](https://zenn.dev/tnk4on/articles/18428fa637dc71)

VS Code Conference Japanで発表した資料も合わせて参考にしてください。
[Remote Development with Podman](https://speakerdeck.com/tnk4on/remote-development-with-podman)


## 関連記事：
[VS CodeのRemote-Containersでリモートサーバー上のコンテナーの開発を行う方法](https://qiita.com/tnk4on/items/7ccb1921907bdb99002a)


---
#【注意！】情報は随時更新されます。記事の内容は **2020/9/11** 時点。

# サマリ
- 完全に動作するのはFedoraのみ（ローカル接続のみ確認。リモート先は未実施。）
- CentOS8はpodmanのバージョンが古いのでNG
- macOSで`podman-remote`自体は使えるが、Remote-ContainersのバグでDockerのチェックが回避できない
- Windowsはpodman-remoteの接続設定が未完了のため、VScodeのテストは未実施



# 各OS組み合わせ
## Fedora 32
### バージョン情報
- Kernel: 5.7.8-200.fc32.x86_64
- Podman: 2.0.2
- VScode: 1.47.0（1.48.0-insider)
- Remote-Containers: 0.124.0
    - `Docker Path`に`podman`指定
- Dockerは未インストール

### 動作結果
- 動作確認：「Add Development Container Configuration Files」で追加した素の`devcontainer.json`
    - 結果：OK
![Fedora32_demo01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/daa43f17-f98a-c3be-2947-cb719e304f2f.gif)

- 動作確認：Git cloneした[vscode-remote-try-python](https://github.com/microsoft/vscode-remote-try-python)
（下記、課題[1]の修正実施）
    - 結果：OK
![Fedora32_demo02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/4d1597db-9ab9-1f60-138c-0585597779e3.gif)


- 動作確認：「Try a Sample」
    - 結果：NG
![Fedora32_demo03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/4ebd3310-e6fa-b018-73a7-416d7d319101.gif)



### 課題
- [1] `Start: Run docker exec`で`The client has reconnected.`が繰り返され、shellが起動しない
    - https://github.com/microsoft/vscode-remote-release/issues/3231
    - `devcontainer.json`の`remoteUser`を下記のように修正
   
```json:devcontainer.json
	"remoteUser": "vscode",
	"containerEnv": {
		"HOME": ""
	}
```
- [2]Remote-Containersのバージョンを0.124.0を指定する
    - 0.125~0.128では下記のエラーが発生
    ![Screen Shot 2020-07-14 at 4.57.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/5bcee03c-5e23-fa52-b89d-3a3ece2b2a06.png)

    - 0.113〜0.118はコンテナエクスプローラーが機能せず
    - 事実上、0.119〜0.124の間でしか機能しない
- [3]Try sampleのopenでエラー
    - https://github.com/microsoft/vscode-remote-release/issues/2881
- [4]SElinuxを無効化しないとコンテナ内でファイル操作ができない


## CentOS8
### バージョン情報
- Kernel: 4.1.8-193.el8.x86_64
- Podman: 1.6.4
- VScode: 1.47.0
- Remote-Containers: 0.124.0
    - `Docker Path`に`podman`指定
- Dockerは未インストール

### 動作結果
- 動作確認：「Add Development Container Configuration Files」で追加した素の`devcontainer.json`
    - 結果：NG
 ![CentOS8_demo01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/6cbea31e-f3b7-e7ab-65ce-03266a332b17.gif)

- 動作確認「Try a Sample」
    - 結果：NG
![CentOS8_demo02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/447f2072-9ad7-c104-4345-8708d58bd16e.gif)

- 動作確認：「Try a sample」**以外**
    - 結果：NG
![CentOS8_demo03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/c36328f7-b589-ed17-3ad7-f3ee5e6255fe.gif)

### 課題
- Fedoraで動作実績のあるpodmanのバージョンまで上げられれば動作の可能性はあるが、現時点では1.6.4以上のパッケージがない


## macOS
### バージョン情報
- macOS Catalina:10.15.6
- ~~Podman-remote: 1.9.3~~ →Podman-remote: 2.0.6
    - https://github.com/boot2podman/libpod/releases/
    - インストール方法は下記
        - https://itnext.io/podman-and-skopeo-on-macos-1b3b9cf21e60
    - podman-remoteで~~Fedora 32に接続~~ → Fedora CoreOS 32.20200907.2.0
        - コマンド上はpodmanコマンドの実行は可能
- Podman-remote: 2.0.6
    - https://github.com/containers/podman/releases/tag/v2.0.6
    - インストール方法
        - https://github.com/containers/podman/blob/master/docs/tutorials/mac_win_client.md
            - 下記が抜けている
                - `$ systemctl --user start podman.socket`
- Dockerは未インストール
   
``` Podman-remote_1.9.3
$ podman version
Command "varlink" is deprecated, Please see 'podman system service' for RESTful APIs
Client:
Version:            1.9.3
RemoteAPI Version:  1
Go Version:         go1.13.8
Git Commit:         5d44534fff6877b1cb15b760242279ae6293154c
Built:              Sun Jul  5 03:13:57 2020
OS/Arch:            darwin/amd64

Server:
Version:            2.0.2
RemoteAPI Version:  1
Go Version:         go1.14.3
OS/Arch:            linux/amd64
```

``` Podman-remote_2.0.6
$ podman version
Client:
Version:      2.0.6
API Version:  1
Go Version:   go1.14.6
Git Commit:   27362ba1ad8879ea71610fa68a651a1651e0180f
Built:        Wed Sep  2 02:07:04 2020
OS/Arch:      darwin/amd64

Server:
Version:      2.0.6
API Version:  0
Go Version:   go1.14.6
Built:        Wed Sep  2 04:26:51 2020
OS/Arch:      linux/amd64
```

- VScode: ~~1.47.0 or 1.48.0-Insiders~~ →1.49.0
- Remote-Containers: ~~0.128.0~~　→ 0.140.1
    - `Docker Path`に`podman`指定

### 動作結果
- 動作確認：「Add Development Container Configuration Files」で追加した素の`devcontainer.json`
    - 結果：NG
        - 下記のエラーが発生

<img width="418" alt="Screen Shot 2020-07-13 at 11.42.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/e035ebb5-fcea-f56a-7f35-225f87c836a7.png">

- 動作確認「Try a Sample」
    - 結果：NG
        - 下記のエラーが発生
        - ~~コマンドで`podman build -f...`と同じコードを実行しても同じエラー~~
        
``` Podman-remote_1.9.3
[30 ms] Start: Resolving remote
[44 ms] Start: Check Docker is running
[44 ms] Start: Run: podman info
[357 ms] Start: Run: podman volume ls -q
[591 ms] Start: Run: podman ps -q -a --filter label=vsch.local.repository=https://github.com/Microsoft/vscode-remote-try-python --filter label=vsch.local.repository.volume=vsc-remote-sample --filter label=vsch.local.repository.folder=vscode-remote-try-python --filter label=vsch.quality=stable
[835 ms] Start: Run: podman build -f /Users/shtanaka/.vscode/extensions/ms-vscode-remote.remote-containers-0.120.0/scripts/volumeBootstrap.Dockerfile -t vsc-volume-bootstrap /Users/shtanaka/.vscode/extensions/ms-vscode-remote.remote-containers-0.120.0/scripts
Error: dial unix /run/podman/io.podman: connect: no such file or directory
[1122 ms] Command failed: podman build -f /Users/shtanaka/.vscode/extensions/ms-vscode-remote.remote-containers-0.120.0/scripts/volumeBootstrap.Dockerfile -t vsc-volume-bootstrap /Users/shtanaka/.vscode/extensions/ms-vscode-remote.remote-containers-0.120.0/scripts
```

```Podman-remote_2.0.6
[26 ms] Start: Resolving remote
[29 ms] Start: Check Docker is running
[30 ms] Start: Run: podman info
[474 ms] Start: Run: podman volume ls -q
[655 ms] Start: Run: podman volume create --label vsch.local.repository=https://github.com/Microsoft/vscode-remote-try-python --label vsch.local.repository.unique=false vsc-remote-sample
[866 ms] Start: Run: podman ps -q -a --filter label=vsch.local.repository=https://github.com/Microsoft/vscode-remote-try-python --filter label=vsch.local.repository.volume=vsc-remote-sample --filter label=vsch.local.repository.folder=vscode-remote-try-python --filter label=vsch.quality=stable
[1056 ms] Start: Run: podman build -f /Users/shtanaka/.vscode/extensions/ms-vscode-remote.remote-containers-0.140.1/scripts/volumeBootstrap.Dockerfile -t vsc-volume-bootstrap /Users/shtanaka/.vscode/extensions/ms-vscode-remote.remote-containers-0.140.1/scripts
[1261 ms] Cloning Github repository: Microsoft/vscode-remote-try-python into /workspaces/vscode-remote-try-python

[1261 ms] Start: Run: podman run -d --mount type=volume,src=vsc-remote-sample,dst=/workspaces -v /var/run/docker.sock:/var/run/docker.sock vsc-volume-bootstrap sleep infinity
```

- 動作確認：「Try a sample」**以外**
    - 結果：NG
        - 全て下記のエラーが発生

<img width="418" alt="Screen Shot 2020-07-13 at 11.42.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526320/e035ebb5-fcea-f56a-7f35-225f87c836a7.png">

### 課題
- Remote-ContainersのバグでDockerのチェックが回避できない
    - GitHubの関連Issue
        - https://github.com/microsoft/vscode-remote-release/issues/3042
        - https://github.com/microsoft/vscode-remote-release/issues/2881
- ~~`podman-remote`経由でのbuildが実施できない。パスがリモート先のパスになる~~
    - ~~v2以上のAPI経由になると改善される？~~
- Podmanコマンド実行時に、`-v /var/run/docker.sock`になるのを変更できれば良さそう？


## Windows
### バージョン情報
- Podman-remote: 1.8.0
    - https://github.com/boot2podman/libpod/releases/
    - インストール方法は下記
        - https://itnext.io/podman-and-skopeo-on-macos-1b3b9cf21e60
    - podman-remoteでFedora 32に接続
        - コマンド上はpodmanコマンドの実行は可能
- Dockerは未インストール


### 動作結果
- podman-remote.confの読み込みができていないため、VScodeの動作確認は未実施

### 課題
- podman-remote.confの読み込みがうまくいかず（配置先がmacOSと違う？）
    - `~/.config/containers/podman-remote.conf`