将 Docker 和 Docker-compose 安装到 Raspberry Pi 上

关于Raspberry Pi的内容

我使用的树莓派是3B+型号。(3B型也能正常运行)
初始操作系统是Raspbian Stretch with desktop(内核版本:4.14)
需要注意的是,由于树莓派1x和zero(w)的CPU不同,所以目前的最新版无法运行。
如果降低版本,它们就可以运行,我也提供了降低版本的方法。

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.8 (stretch)
Release:        9.8
Codename:       stretch

安装Docker

按照公式博客中的方法登录。
为了避免使用sudo,将用户添加到docker组中(在重新登录后生效)。
可能还需要设置自动启动。

$ curl -sSL https://get.docker.com | sh
$ sudo usermod -aG docker pi
$ sudo systemctl enable docker

$ docker --version
Docker version 18.09.0, build 4d60db4

树莓派1x和Zero(W)

如果是Raspi1x和zero(w)的情况,系统版本会显示,但无法正常运行。原因是CPU太老旧。
更多详细信息,请参考Raspbian上的docker-ce分段错误(v18.09.03)问题#38175。

$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

$ sudo systemctl status docker.service
    (抜粋)
    docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    Active: failed (Result: core-dump)

以下是将Docker-CE进行降级的方法。

$ sudo apt install docker-ce=18.06.3~ce~3-0~raspbian
$ sudo apt autoremove
$ sudo systemctl enable docker && sudo systemctl start docker

确认动作

$ docker --version
Docker version 18.06.2-ce, build 6d37f41

$ sudo systemctl status docker.service
    (抜粋)
    docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    Active: active (running)

docker-compose无法正常工作,但是我不太清楚原因…

安装Docker Compose。

由于官方网站上没有提供适用于Raspberry Pi的二进制文件,只能从源代码中构建。
之前一段时间内缺乏信息,非常麻烦,但现在可以通过Dockerfile实现。
有很多网站提供了步骤,但会出现错误,所以这是整合了信息的版本。
如果不切换分支,最新版本不包含Dockerfile.armhf文件。

我在网上查到了一种使用复制Dockerfile的方法,但是在这个Dockerfile内的RUNTIME_DEBIAN_VERSION=stretch-20190326-slim出现了错误。如果将RUNTIME_DEBIAN_VERSION=stretch-slim进行修改,则可以成功构建,但在后续步骤中会出现错误。

$ git clone https://github.com/docker/compose.git
$ cd compose
$ git checkout bump-1.23.2
$ sed -i -e 's:^VENV=/code/.tox/py36:VENV=/code/.venv; python3 -m venv $VENV:' script/build/linux-entrypoint
$ sed -i -e '/requirements-build.txt/ i $VENV/bin/pip install -q -r requirements.txt' script/build/linux-entrypoint
$ docker build -t docker-compose:armhf -f Dockerfile.armhf .

建筑需要大约30分钟至1小时的时间。

$ docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"

因此,您可以生成docker-compose二进制文件并移至其他位置以完成操作。

$ sudo cp dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose
$ sudo chown root:root /usr/local/bin/docker-compose
$ sudo chmod 0755 /usr/local/bin/docker-compose

$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01

可以删除用于构建的Docker镜像。