将 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镜像。