Development in Dev Containers using VS Code greatly simplifies bootstrapping of the development environment. The developer does not need to install toolchains locally and spends a lot of time composing the development environment.
The default installation of VS Code is configured to work with Docker. It requires some small additional steps to switch to Podman.
Let’s begin with development using examples from Ferrous Systems training:
git clone https://github.com/ferrous-systems/espressif-trainings.git
Install Podman and check version:
brew install podman podman --version
The version should be at least 4.0. If you have a previous version, consider an upgrade.
Following step might not be obvious to Docker users. Docker creates VM for managing containers in the background without asking the user. In the case of Podman, this is more versatile and you can define what kind of machine do you want to create. Here are a few options recommended for development, when you omit them you’ll get smaller defaults.
podman machine init --disk-size 20 --cpus 8 -m 4096 -v ${HOME}/espressif-trainings:${HOME}/espressif-trainings podman machine start
Please, notice also -v option which mounts the development directory to Podman VM, without this mount you’ll get:
Error: statfs espressif-trainings: no such file or directory
Now the Podman VM should be ready and we can spin up containers. Go to the project directory and open Visual Studio Code:
cd ${HOME}/espressif-trainings code .
It’s necessary to install one additional dependency for Podman: podman-compose
pip3 install podman-compose
It’s necessary to tell VS Code to use podman instead of docker commands. Go into Settings and search for keyword docker. Replace docker by podman and docker-compose by podman-compose.
VS Code is ready and click Reopen in Container.
Pulling the base image might take a while.
Open terminal and build the first ESP32-C3 example:
cd intro/hardware-check cp cfg.toml.example cfg.toml cargo build
Note: If VS Code is complaining about existing vscode volume, it’s possible to remove it by command
podman volume rm vscode
Note 2: If the remove is blocked by the existing terminated container, it’s possible to clean the reference by command
podman container prune
Flashing of the resulting file could be done by espflash and mounting device to Podman or using the tool like Adafruit WebSerial ESPTool. The file for flashing is located in the directory target/release.