用Docker搞定ESP-IDF编译环境
装了个ESP-IDF,因为平时用VScode比较多,所以是通过它的插件安装的,结果装的我电脑到处都是Epressif文件夹(不知道直接装ESP-IDF会不会也到处都是它的目录)。后来改用Docker电脑干净多了,因为docker本来就是用来隔离环境的。本篇博客就来记录一下如何用Docker 搞定 ESP-IDF编译环境。
一. 下载docker
docker在Linux或者windows下都可以安装。
Windows去官网上安装docker desktop:
https://www.docker.com/products/docker-desktop/
Intel和AMD的电脑都选AMD64的那个。
Windows安装的话需要搞定wsl环境,这个你顺着安装自然就装上了,它安装半中间会跳出来一个Powershell的界面,如果没有wsl它会让你按回车装,回车之后它就会自动安装了。
Linux就用命令行安装:
# Ubuntu
sudo apt install docker.io
sudo systemctl start docker
二、拉取ESP-IDF官方镜像
因为我是在Windows系统下安装的,下面的步骤也都是Windows的docker desktop上操作的。
首先,docker desktop界面长这样,如果你不需要从类似git一样的拥有自己的docker远程仓库,那就不用注册和登录,它让你sign in不理它跳过就行了。
因为国内的网络可能存在限制,下载镜像可能下不下来,需要修改一个配置。(这里我和AI大战800回合,不管换啥都是403。最后上网搜到一个可以的,有的时候还是人类靠谱啊。。。)
通过右上角小齿轮点进设置 -> Docker Engine -> 改成下面这一段 -> Apply应用
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}

开始里输powershell,输入以下命令拉取官方的ESP-IDF镜像。冒号后面是它的镜像标签,一般就是版本号,如果有指定版本就放这里,如果没有想下载最新版就写latest。
docker pull espressif/idf:latest
# downloade old version
docker pull espressif/idf:v5.3.1
经过上面对docker engine的设置这里应该不会被卡住了。下载之后可以用docker images命令查看当前你有的docker。
docker images
三、使用镜像编译
运行docker的命令是docker run:
docker run --rm -v E:\workspace\esp32:/project -w /project espressif/idf:latest idf.py build
下面我列出每个参数的意思,大家可以按照自己的使用需求修改命令:
docker run \
--rm \ # 容器运行完自动删除,不留垃圾
-v E:\workspace\esp32:/project \ # 把代码目录挂载到容器内的 /project下,因为我是windows环境路径用\,docker里面是linux环境路径用/
-w /project \ # 工作目录设为 /project
espressif/idf:latest \ # 使用的镜像名
idf.py build # 要执行的命令
后面就坐等编译完成了。
如果不想每次都输这么长的命令也可以做一个命令别名:
function idf {
docker run --rm -v ${PWD}:/project -w /project espressif/idf:latest idf.py $args
}
之后再使用的时候就可以:
# 进入项目目录
cd my_esp_project
# 设置目标芯片
idf set-target esp32c3
# 编译
idf build
四、使用镜像烧录
烧录其实我还没试,我就只做了编译这部分,如果大家有需要还可以继续烧录:
# example: com 3
docker run --rm -v E:\project\esp32:/project -w /project --device=/dev/ttyS3 espressif/idf:latest idf.py flash
五、如何删除Docker镜像
当你需要删除docker的时候,执行以下操作:
# 查看所有镜像
docker images
# 删除指定镜像
docker rmi espressif/idf:latest
# 或者一键清理所有未使用的镜像、容器、网络
docker system prune -a
删除后,项目代码还在本地的,这个只是把ESP-IDF删了,代码完全不受影响。
更多推荐

所有评论(0)