SDK 编译镜像(Docker 环境)
1. Docker 简介
- 容器(Container): Docker 使用容器来封装应用程序及其所有依赖关系,包括代码、运行时、系统工具、系统库等。容器提供了一种轻量级、一致性和可移植性的方式,使应用程序能够在不同环境中运行。
- 镜像(Image): 镜像是容器的基础,它包含了运行容器所需的所有信息,如文件系统、库、配置等。镜像可以被共享、存储在仓库中,并通过网络传输。
- 仓库(Repository): 镜像被存储在仓库中,便于集中管理和共享。Docker 支持公共仓库(如 Docker Hub)和私有仓库,用户可以从仓库中拉取所需镜像,也可以将自定义镜像推送到仓库中以供他人使用或部
- Docker 工具的安装(安装 Docker 引擎):
sudo apt install docker.io -y - Docker 镜像的获取:(推荐国内用户直接下载离线版本镜像)
sudo docker pull luckfoxtech/luckfox_pico:1.0 - Docker 离线镜像的获取:
版本 描述 下载 luckfoxtech/luckfox_pico 1.0 Docker镜像离线下载 Docker百度网盘链接 #docker镜像安装
sudo docker load -i ./luckfox_pico_docker.tar
上述操作只是将 Docker 工具安装到系统中,相当于安装了“容器运行平台”。 要运行容器,还需要使用 docker run 或 docker start 等命令显式地启动一个容器。
2. Docker 镜像编译
- 获取最新的 SDK:(可任选以下两种方式,推荐国内用户使用 Gitee)
git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git
git clone https://github.com/LuckfoxTECH/luckfox-pico.git - 启动一个交互式的容器,使用名为 "luckfox",并将本地主机上的 SDK 目录映射到容器内的 /home 目录,最后以 Bash shell 运行。
sudo docker run -it --name luckfox --privileged -v /home/ubuntu/luckfox-pico:/home luckfoxtech/luckfox_pico:1.0 /bin/bash-it:运行一个交互式容器--name:可以为容器指定一个名称,使得容器更易于识别和管理-v:选项可以将主机上的目录或文件挂载到容器内部。上述例子中,将主机上的 /home/ubuntu/luckfox-pico 目录挂载到容器内的 /home 目录
- 若容器已存在,第二次运行可直接使用以下命令启动:
sudo docker start -ai luckfox - 在开始编译前,请根据实际使用的开发板型号,选择对应的代码分支,以确保编译出的镜像能够正确运行。
root@b165d8d4c29b:# cd /home
root@807131c0df36:/home# ./build.sh lunch
You're building on Linux
Lunch menu...pick the Luckfox Pico hardware version:
选择 Luckfox Pico 硬件版本:
[0] RV1103_Luckfox_Pico
[1] RV1103_Luckfox_Pico_Mini_A
[2] RV1103_Luckfox_Pico_Mini_B
[3] RV1103_Luckfox_Pico_Plus
[4] RV1103_Luckfox_Pico_WebBee
[5] RV1106_Luckfox_Pico_Pro
[6] RV1106_Luckfox_Pico_Max
[7] RV1106_Luckfox_Pico_Ultra
[8] RV1106_Luckfox_Pico_Ultra_W
[9] RV1106_Luckfox_Pico_Pi
[10] RV1106_Luckfox_Pico_Pi_W
[11] RV1106_Luckfox_Pico_86Panel
[12] RV1106_Luckfox_Pico_86Panel_W
[13] custom
Which would you like? [0~13][default:0]: 12
Lunch menu...pick the boot medium:
选择启动媒介:
[0] EMMC
Which would you like? [0][default:0]: 0
Lunch menu...pick the system version:
选择系统版本:
[0] Buildroot
Which would you like? [0][default:0]: 0
[build.sh:info] Lunching for Default BoardConfig_IPC/BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_86Panel_W-IPC.mk boards...
[build.sh:info] switching to board: /home/project/cfg/BoardConfig_IPC/BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_86Panel_W-IPC.mk
[build.sh:info] Running build_select_board succeeded.
root@807131c0df36:/home# ./build.sh
3. 将用户添加到 Docker 组
- 运行以下命令将当前用户添加到docker组中:
sudo usermod -aG docker $USER - 注销并重新登录,或者运行以下命令使更改生效:
sudo service docker restart
newgrp docker - 确保用户 luckfox 已经成功添加到 docker 组。可以使用以下命令检查:
id luckfox
4. Docker 常见命令
- 镜像相关命令:
docker pull luckfoxtech/luckfox_pico:1.0 #从 Docker Hub 下载镜像。
docker images #列出本地所有的镜像。
docker rmi luckfoxtech/luckfox_pico:1.0 #删除本地一个或多个镜像。
docker search [image] #在 Docker Hub 上搜索镜像。 - 容器相关命令:
docker ps #列出当前运行的容器。
docker ps -a #列出所有的容器,包括停止的。 - 容器操作:
docker start 1758 #启动一个停止的容器
docker stop 1758 #停止一个运行中的容器
docker restart 1758 #重启一个容器
docker exec -it 1758 ls #在运行中的容器中执行命令
docker exec -it 1758 bash #进入一个已经打开的容器
docker rm 1758 #删除一个或多个容器
exit #退出 - 运行容器:
sudo docker run -it --name luckfox --privileged -v /home/ubuntu/luckfox-pico:/home luckfoxtech/luckfox_pico:1.0 /bin/bash-it:运行一个交互式容器--name:可以为容器指定一个名称,使得容器更易于识别和管理-v:选项可以将主机上的目录或文件挂载到容器内部。上述例子中,将主机上的 /home/ubuntu/luckfox-pico 目录挂载到容器内的 /home 目录
sudo docker start -ai luckfox #第二次运行docker环境 - 系统信息:
docker logs 1758 #查看容器的日志
docker inspect 1758 #查看容器的详细信息
docker rmi luckfoxtech/luckfox_pico:1.0 #删除本地一个或多个镜像
docker top 1758 #查看容器中运行的进程
Docker 容器的ID是唯一的,因此在大多数情况下,仅提供其前几位字符即可唯一标识容器。请在实际使用命令时,将示例中的容器ID替换为你自己的容器ID(或其前缀)。