跳到主要内容

Docker 环境下编译镜像

1. Docker 简介

Docker 是一种轻量级的容器化平台,用于打包、分发和运行应用程序及其依赖项。它基于容器技术,将应用程序及其运行所需的全部环境封装在一个独立、可移植的容器中,从而确保应用在不同环境中的一致性运行。这种方式显著提高了开发、部署与扩展的效率。 Docker 的核心理念是通过镜像(Image)来定义应用程序及其运行环境,并利用容器(Container)将其实际运行起来。容器可以在任何支持 Docker 的操作系统或云平台中无缝运行,具备轻量、高效和隔离性的优势。
  • 容器(Container): Docker 使用容器来封装应用程序及其所有依赖关系,包括代码、运行时、系统工具、系统库等。容器提供了一种轻量级、一致性和可移植性的方式,使应用程序能够在不同环境中运行。
  • 镜像(Image): 镜像是容器的基础,它包含了运行容器所需的所有信息,如文件系统、库、配置等。镜像可以被共享、存储在仓库中,并通过网络传输。
  • 仓库(Repository): 镜像被存储在仓库中,便于集中管理和共享。Docker 支持公共仓库(如 Docker Hub)和私有仓库,用户可以从仓库中拉取所需镜像,也可以将自定义镜像推送到仓库中以供他人使用或部
  1. Docker 工具的安装(安装 Docker 引擎):
    sudo apt install docker.io -y
  2. Docker 镜像的获取:(推荐国内用户直接下载离线版本镜像)
    sudo docker pull luckfoxtech/luckfox_pico:1.0 
  3. Docker 离线镜像的获取:
    版本描述下载
    luckfoxtech/luckfox_pico 1.0Docker镜像离线下载Docker百度网盘链接
    #docker镜像安装
    sudo docker load -i ./luckfox_pico_docker.tar
[提示]

上述操作只是将 Docker 工具安装到系统中,相当于安装了“容器运行平台”。 要运行容器,还需要使用 docker run 或 docker start 等命令显式地启动一个容器。

2. Docker 镜像编译

  1. 获取最新的 SDK:(可任选以下两种方式,推荐国内用户使用 Gitee)
    git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git
    git clone https://github.com/LuckfoxTECH/luckfox-pico.git
  2. 启动一个交互式的容器,使用名为 "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 目录
  3. 若容器已存在,第二次运行可直接使用以下命令启动:
    sudo docker start -ai luckfox
  4. 在开始编译前,请根据实际使用的开发板型号,选择对应的代码分支,以确保编译出的镜像能够正确运行。
    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 组

在Ubuntu系统上,需要在运行Docker命令时添加 sudo 是因为 Docker 守护进程默认以 root 用户权限运行。 Docker 执行一些需要特权权限的操作,如访问系统资源、管理容器、构建镜像、挂载文件系统等,以确保安全性和系统稳定性。如果希望不每次都使用 sudo 运行 Docker 命令,可以将当前用户加入 docker 组。
  1. 运行以下命令将当前用户添加到docker组中:
    sudo usermod -aG docker $USER
  2. 注销并重新登录,或者运行以下命令使更改生效:
    sudo service docker restart
    newgrp docker
  3. 确保用户 luckfox 已经成功添加到 docker 组。可以使用以下命令检查:
    id luckfox

4. Docker 常见命令

以下是 Docker 的一部分命令。要查看完整的命令列表和帮助信息,请运行 docker --help。
  1. 镜像相关命令:
    docker pull luckfoxtech/luckfox_pico:1.0      #从 Docker Hub 下载镜像。
    docker images #列出本地所有的镜像。
    docker rmi luckfoxtech/luckfox_pico:1.0 #删除本地一个或多个镜像。
    docker search [image] #在 Docker Hub 上搜索镜像。
  2. 容器相关命令:
    docker ps                                     #列出当前运行的容器。
    docker ps -a #列出所有的容器,包括停止的。
  3. 容器操作:
    docker start 1758                            #启动一个停止的容器
    docker stop 1758 #停止一个运行中的容器
    docker restart 1758 #重启一个容器
    docker exec -it 1758 ls #在运行中的容器中执行命令
    docker exec -it 1758 bash #进入一个已经打开的容器
    docker rm 1758 #删除一个或多个容器
    exit #退出
  4. 运行容器:
    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环境
  5. 系统信息:
    docker logs 1758                             #查看容器的日志
    docker inspect 1758 #查看容器的详细信息
    docker rmi luckfoxtech/luckfox_pico:1.0 #删除本地一个或多个镜像
    docker top 1758 #查看容器中运行的进程
  6. Docker 容器的ID是唯一的,因此在大多数情况下,仅提供其前几位字符即可唯一标识容器。请在实际使用命令时,将示例中的容器ID替换为你自己的容器ID(或其前缀)。