# 使用 Docker 容器

Qualcomm Linux 启用了 Docker 容器。要使用 Docker 容器，请确保 Qualcomm BSP 已启用虚拟化功能。要在 Qualcomm Linux 设备上使用容器，请确保 `meta-virtualization` 层作为工作区的一部分启用。

## Docker

`qcom-multimedia-image` 启用 Docker：

1. 对于 `qcom-multimedia-image` 镜像配方，使用 `meta-qcom-distro/recipes-products/packagegroups/packagegroup-qcom-multimedia.bb` 包括 `packagegroup-qcom-containers`。
2. 在 `dynamic-layers/virtualization-layer/recipes-containers/packagegroups/packagegroup-qcom-containers.bb` 的 `meta-qcom-hwe` 层中定义 `packagegroup-qcom-containers`。
3. 在编译并刷写镜像后，即可在设备上使用 Docker。
4. 要验证内核兼容性，请运行设备上的 `check-config.sh` 脚本。
5. 要验证配置，请启用所需的内核配置并重建镜像。更多信息，参见[内核兼容性](https://docs.docker.com/engine/install/troubleshoot/#:~:text=Kernel%20compatibility,check%2Dconfig.sh%20script.&amp;text=The%20script%20only%20works%20on%20Linux)。
6. 若要验证Docker守护程序的状态，请运行以下命令并验证输出：

    | 命令 | 说明 | 输出 |
    | --- | --- | --- |
    | `systemctl status docker` | 启动后是否至少运行过一次 Docker 命令 | 激活（运行中） |
    | `systemctl status docker` | 如果设备在启动后未运行任何 Docker 命令 | 未激活（死锁） |
    |  |  |  |

从 `linux/arm64` 平台的 Docker 存储库中提取并经过测试、在设备上成功运行的镜像如下所示：

> 
> 
> - `busybox`
> - `python`
> - `alpine`
> - `ubuntu`
> - `postgres`
> - `mongo`
> - `nginx`
> - `redis`

以下用例已在启用 Docker 的情况下经过验证：

- 使用 Docker 加载实用工具通过 tar 文件加载 Docker 镜像。
- 通过 Docker 文件编译 Docker 镜像。
- 保存拉取/编译到 `.tar` 文件中的 Docker 镜像。
- 加载Docker镜像，这些镜像保存为 `.tar` 文件。
- 运行拉取/编译的多个镜像的多个容器实例。
- 验证设备上加载的 Docker 镜像列表。
- 验证设备上活动容器和总容器列表。
- 使用 Docker inspect 实用程序检查 Docker 镜像。
- 使用 Docker logs 实用程序从容器中获取日志。
- 使用 Docker stop 和 Docker kill 实用程序停止并终止容器。
- 从设备中删除容器和 Docker 镜像。

## 从 Docker 访问硬件节点

Docker 容器内运行的应用程序可能需要访问设备上的设备节点和文件（也就是说，设备是 Docker 容器的主机）。将相应的设备节点作为选项传递给 Docker 的运行命令以执行此任务：

docker run -it --rm --device=<device-1> --device=<device-2> <docker-image-name>
    Copy to clipboard

传递位于设备上 `/dev` 目录中的设备节点。根据用例，例如，在图形场景中，使用 `--device=/dev/kgsl-3d0` 将 `/dev/kgsl-3d0` 传递给 Docker。

Docker 容器内运行的应用程序可能也需要访问设备（目标主机）上的存储。若要将文件/目录暴露为绑定挂载，请运行以下命令：

docker run -it --rm --mount type=bind,source=<source-path-on-device>,target=<destination-path-inside-container> <docker-image-name>
    Copy to clipboard

使用以下命令可以运行在容器内公开多个目录、文件和设备节点的 Docker 容器：

docker run -it --rm --device=<device-1> --device=<device-2> --mount type=bind,source=<source-path-on-device-1>,target=<destination-path-inside-container-1>  --mount type=bind,source=<source-path-on-device-2>,target=<destination-path-inside-container-2> <docker-image-name>
    Copy to clipboard

## 在 Qualcomm Linux 设备上运行 Docker Compose

Docker Compose 是一个用于定义和运行多容器应用程序的工具。它通过在单个易于理解的 YAML 配置文件中定义服务、网络和卷来简化应用程序堆栈的管理。默认情况下，Qualcomm Linux 版本在 `qcom-multimedia-image` 中包含 Docker Compose。

`docker-compose` 软件包通过 `packagegroup-qcom-containers` 被添加到 `meta-qcom-distro` 元数据层中的 `packagegroup-qcom-multimedia` 软件包组中。

**要在设备上运行 Docker Compose：**

1. 在设备上的可写路径下创建或复制 Docker Compose YAML 文件，例如 `/var`（例如 `/var/docker-compose-yaml`)，与设备上的 Docker Compose 一起使用。
2. 确保设备上存在 Docker-compose YAML 文件中所列出的 Docker 镜像。如果没有，则设备应该连接到有效的互联网连接来拉取 Docker 镜像。
3. 要为多个 YAML 文件运行 Docker Compose，请运行以下命令：

docker-compose -f <docker-compose-file-1>.yml -f <docker-compose\u0002file-2>.yml up
        Copy to clipboard

Docker Compose 按照 Docker Compose YAML 文件中的配置运行并启动 Docker 容器。Docker Compose 命令返回后，运行 `docker ps -a` 和 `docker logs <conatiner-id>` 验证 Docker 容器是否按预期运行。

要了解有关 Docker Compose 的更多信息，请参阅 [Docker Compose overview](https://docs.docker.com/compose)。

Last Published: Jul 24, 2025

[Previous Topic
在 Qualcomm Linux 中管理分区](https://docs.qualcomm.com/bundle/publicresource/80-70020-27SC/topics/managing_partitions_in_qualcomm_linux.md) [Next Topic
使用 Qualcomm Linux 设置 Kubernetes](https://docs.qualcomm.com/bundle/publicresource/80-70020-27SC/topics/setup_kubernetes_with_qualcomm_linux.md)

Source: [https://docs.qualcomm.com/doc/80-70020-27SC/topic/use_of_docker_containers.html](https://docs.qualcomm.com/doc/80-70020-27SC/topic/use_of_docker_containers.html)