使用docker搭建嵌入式Linux开发环境
文章目录
- 1、前言
- 2、安装docker
- 3、编写容器管理脚本
- 4、创建容器
1、前言
在日常开发全志、rk等不同平台时,大多数时候只有一个编译主机,但不同sdk所需要的编译环境可能不同。所以本文将记录使用docker为每个平台创建独立的开发环境。
2、安装docker
# 1.卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc# 2.安装 Docker 依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release# 3.添加 Docker 官方 GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg# 4.添加 Docker 官方 apt 源
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 5.安装 Docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 6.检查是否安装成功
docker --version
3、编写容器管理脚本
找AI写一个脚本,支持创建容器,进入容器,删除容器:
#!/bin/bash
# 文件名: sdk_docker.sh
# 用法:
# 创建并启动环境: ./sdk_docker.sh create <chip> <sdk_path>
# 进入环境: ./sdk_docker.sh enter <chip>
# 删除环境: ./sdk_docker.sh remove <chip>ACTION=$1
CHIP=$2
SDK_PATH=$3
IMAGE="ubuntu:22.04" # 可自行修改,例如某某sdk推荐的ubuntu版本为20.04
CONTAINER_NAME="sdk_${CHIP}_env"if [[ -z "$ACTION" || -z "$CHIP" ]]; thenecho "Usage:"echo " $0 create <chip> <sdk_path>"echo " $0 enter <chip>"echo " $0 remove <chip>"exit 1
ficase "$ACTION" increate)if [[ -z "$SDK_PATH" ]]; thenecho "Error: SDK path must be provided for create."exit 1fi# 检查镜像是否存在if ! docker image inspect $IMAGE >/dev/null 2>&1; thenecho "Image $IMAGE not found locally. Pulling..."docker pull $IMAGEfi# 判断容器是否已存在if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; thenecho "Container $CONTAINER_NAME already exists. Starting it..."docker start -ai $CONTAINER_NAMEelseecho "Creating new container $CONTAINER_NAME..."# 容器内挂载路径与宿主机一致docker run -it --name $CONTAINER_NAME -v $SDK_PATH:$SDK_PATH $IMAGE /bin/bashfi;;enter)# 进入已有容器if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then# 判断容器是否在运行if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; thendocker exec -it $CONTAINER_NAME /bin/bashelseecho "Starting container $CONTAINER_NAME..."docker start -ai $CONTAINER_NAMEfielseecho "Container $CONTAINER_NAME does not exist. Create it first."exit 1fi;;remove)# 删除容器if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; thendocker rm -f $CONTAINER_NAMEecho "Container $CONTAINER_NAME removed."elseecho "Container $CONTAINER_NAME does not exist."fi;;*)echo "Unknown action: $ACTION"exit 1;;
esac
4、创建容器
- 例如现在要开发t527,执行如下脚本为t527创建一个独立的容器:
# ./sdk_docker.sh create <chip> <sdk_path>
# <chip> : 芯片名称,用于构建容器名称
# <sdk_path> : sdk在宿主机的绝对路径
sudo ./sdk_docker.sh create t527 /mnt/allwinner/t527
创建成功后会自动进入容器,容器中的sdk路径和宿主机的一致。ctrl+d
可以退出容器:
- 重新进入容器:
# ./sdk_docker.sh enter <chip>
sudo ./sdk_docker.sh enter t527
- 删除容器
# ./sdk_docker.sh remove <chip>
sudo ./sdk_docker.sh remove t527
之后就可以在独立的容器里安装相关的编译环境。各个平台之间互不干扰。