# 构建 Docker 镜像
FlyDog SDR 在 Docker 中运行,所以需要构建 FlyDog SDR 的 Docker 镜像。
目前,用户可通过两种方式构建 Docker 镜像。
- 通过 Docker Buildx 跨平台构建镜像
- 通过树莓派上直接构建
下述内容将依次介绍这两种构建方式。
# 搭建开发环境
# 通过 Docker Buildx
Docker Buildx 是一个 Docker CLI 插件,扩展了 docker
命令,支持 Moby BuildKit 提供的功能,为用户提供了与 docker build
相同的体验,并增加了许多新功能。
Moby BuildKit 是下一代的镜像构建组件,利用其可以跨平台构建镜像的特性,本方法可以用于在 Linux、macOS 和 Windows 系统下构建 FlyDog SDR 的 Docker 镜像。
需要注意,该功能仅适用于 Docker v19.03+ 版本。
在已经安装了 Docker 的情况下,要使用 Docker Buildx,需要临时开启 Docker 实验特性。
Linux 或 macOS 下,使用 export
命令设置环境变量。
[fdsdr@flydog-sdr-project ~]$ export DOCKER_CLI_EXPERIMENTAL=enabled
对于 Windows 系统,在 Windows PowerShell 中使用 set
命令打开 Docker 实验特性。
PS C:\Users\FLYDOG> set $env:DOCKER_CLI_EXPERIMENTAL="enabled"
然后检验 Docker Buildx 是否成功启用。
[fdsdr@flydog-sdr-project ~]$ docker buildx version
github.com/docker/buildx v0.5.1-docker 11057da37336192bfc57d81e02359ba7ba848e4a
新建一个 Builder 实例,名为 arm_builder
。
[fdsdr@flydog-sdr-project ~]$ docker buildx create --name arm_builder --driver docker-container
指定使用新建的 Builder 实例。
[fdsdr@flydog-sdr-project ~]$ docker buildx use arm_builder
检查已有的 Builder 实例,arm_builder
应当包含于返回的结果中。
[fdsdr@flydog-sdr-project ~]$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
arm_builder * docker-container
arm_builder0 unix:///var/run/docker.sock inactive
default docker
default default running linux/amd64, linux/386
Docker 在 linux/amd64
系统架构下默认不支持构建 ARM 架构 Docker 镜像,因此需导入 binfmt_misc
。
Windows 下安装的 Docker 无需进行此项设置。
[fdsdr@flydog-sdr-project ~]$ docker run --rm --privileged tonistiigi/binfmt --install all
# 通过树莓派
对处理器架构进行检查,确保架构为 armv7l
。
[fdsdr@flydog-sdr-project: ~]$ uname -m
armv7l
使用 Docker 相关安装脚本实现自动化部署开发环境。
[fdsdr@flydog-sdr-project ~]$ sudo curl -o /tmp/get-docker.sh -fsSL get.docker.com
[fdsdr@flydog-sdr-project ~]$ sudo chmod +x /tmp/get-docker.sh
[fdsdr@flydog-sdr-project ~]$ sudo sh -c /tmp/get-docker.sh
对于中国大陆开发者,在安装 Docker 时,可以加上 --mirror AzureChinaCloud
参数,使用 AzureChinaCloud 镜像进行安装。
[fdsdr@flydog-sdr-project ~]$ sudo sh -c /tmp/get-docker.sh --mirror AzureChinaCloud
安装完成后,将当前用户添加至 Docker 用户组 docker
,然后重启。
[fdsdr@flydog-sdr-project ~]$ sudo usermod -aG docker ${USER}
[fdsdr@flydog-sdr-project ~]$ sudo systemctl enable docker
[fdsdr@flydog-sdr-project ~]$ sudo reboot
# 拉取 Dockerfile
确保开发机器已经安装 Git,并从 GitHub 拉取构建 FlyDog SDR 所需的 Dockerfiles。
[fdsdr@flydog-sdr-project ~]$ git clone https://github.com/flydog-sdr/docker-builder
对于中国大陆开发者,可能需要将 github.com
替换为其镜像地址 github.com.cnpmjs.org
,以加速拉取速度。
进入 docker-builder/flydog-sdr
目录,对 Dockerfile
中相关环境变量酌情修改。
[fdsdr@flydog-sdr-project ~]$ cd docker-builder/flydog-sdr
[fdsdr@flydog-sdr-project flydog-sdr]$ vim Dockerfile
相关变量说明如下。
变量 | 说明 |
---|---|
APT_MIRROR | Debian 镜像源 |
GIT_BRANCH | 指定 Git 分支 |
GIT_HOST | 指定 GitHub 域名,针对中国大陆加快构建速度 |
GIT_USER | 指定要拉取之专案所对应的用户名 |
REPO_NANE | 指定专案名称 |
# 执行构建
# 通过 Docker Buildx
使用 docker buildx
命令启动构建进程。
[fdsdr@flydog-sdr-project flydog-sdr]$ docker buildx build --platform linux/arm/v7 -t flydog-sdr -o type=docker -f ./Dockerfile .
大约 20 分钟后,即可完成构建,Docker 镜像列表中亦可看到刚刚生成的镜像。
[fdsdr@flydog-sdr-project flydog-sdr]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flydog-sdr latest 7865b2e324eb 22 hours ago 252MB
# 通过树莓派
使用 docker build
命令启动构建进程。
[fdsdr@flydog-sdr-project flydog-sdr]$ docker build -t flydog-sdr .
大约 20 分钟后,即可完成构建,Docker 镜像列表中亦可看到刚刚生成的镜像。
[fdsdr@flydog-sdr-project flydog-sdr]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flydog-sdr latest 7865b2e324eb 22 hours ago 252MB