侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

译:在Raspberry上使用docker

2023-11-18 星期六 / 0 评论 / 0 点赞 / 48 阅读 / 8650 字

文章来源本文演示如何在Raspberry Pi上使用docker1.12及更新版本。我们使用的是raspberry官方版本(Raspbian)。以下示例适用于raspberry pi Model B

.

文章来源

.

本文演示如何在Raspberry Pi上使用docker1.12及更新版本。我们使用的是raspberry官方版本(Raspbian)。以下示例适用于raspberry pi Model B 2/3和Zero.

准备SD卡

下载最新的Raspbian Jessie Lite镜像,网址https://www.raspberrypi.org/downloads/raspbian/.

.

Raspberry Jessie Lite 镜像与标准镜像基本一样,但只包含满足基本需求的包。

.

这段是说如何将镜像写入sd卡,这里就不提了,linux/mac用户可以用dd命令,windows用户可以使用Win32DiskImager,简单直观,这里有演示

安装Docker

准备阶段

这本分介绍了如何连接树莓派,修改密码,主机名之类的,略过,后面提到了,如果你不准备使用显示器,可以适当调低显卡占用内存。vi /boot/config.txt,在文档结尾添加一行

gpu_mem=16  

其实默认分配给显卡的内存并不多

pi@raspberrypi:~ $ vcgencmd get_mem gpugpu=64M

##开始安装通过Docker project提供脚本可以自动完成创建服务,复制可执行文件到 /usr/bin/

$ curl -sSL get.docker.com | sudo sh
.

注意 上面的操作不适用非debian类发行版,比如Arch LinuxFedora.Arch Linux目前仅支持Docker 1.11版,它有自己的包管理工具pacman

.

配置Docker

安装好之后需要进行一些手动配置来增强Docker的体验。

设置Docker自动启动

sudo systemctl enable docker

现在你可以重启Pi来启动docker,也可以通过以下命令启动Docker守护进程

sudo systemctl start docker

配置Docker客户端

Docker客户端只能被root用户和 docker用户组使用,通过以下命令吧Pi用户添加到docker组。

sudo usermod -aG docker pi

之后退出ssh连接,并重新通过ssh连接pi。

使用Dcoker

对ARM和Raspberry Pi的支持还处于xx阶段,所以有些事情你需要了解。重要!!!

拉取镜像

如果你拉取了busybox镜像,它应该不能正常运行。因为它是为标准PC或者x86_64架构设计的。未来版本可能会解决这个问题。

我们只能使用那些为ARM设计的镜像。目前没有官方正式镜像支持arm,但是Docker team维护了一部分体验性质的镜像支持arm,它们都以armfh作为前缀

.

armhf表示代码已经移植到Rasberry Pi,hf意思是硬件浮点运算。

.

运行你的第一个 镜像

我们试下Docker官方Alphine linux image armhf/alpine。Alpha Linux 镜像只有1.8MB。

docker run -ti armhf/alpine:3.5 /bin/sh

初次运行可能需要拉取的过程,拉取结束以后进入镜像的shell,可以试试下面的命令

cat /etc/os-realeaseecho "Hi, this is a tiny Linux distribution!" | base64 exit

最后一个命令exit,如果你玩尽兴了就可以exit返回宿主终端。前面的 docker run -ti,表示以终端交互形式执行/bin/sh,你也可以直接执行命令:

pi@raspberrypi:~ $ docker run armhf/alpine:3.5 dateThu Apr  6 05:40:51 UTC 2017

这些关于docker使用的细节问题可以查阅相关文档。

其他镜像

Resion.io使用这个Build创建的镜像可以在树莓派中使用。它作为一个轻量版本是一个不错的选择。

创建新镜像

你可以使用 resin/rpi-raspbian作为基础镜像创建新镜像。让我们创建一个新镜像,这个镜像安装了curlcat-certificates,并且会用curl命令访问docker.com。下面的代码是构建镜像的dockerfile build

FROM resin/rpi-raspbian:latest  ENTRYPOINT []RUN apt-get update && /      apt-get -qy install curl ca-certificatesCMD ["curl", "https://docker.com"] 

逐行解释

  • FROM 支出构建镜像的基础镜像
  • ENTRYPOINT [] 进入以后,预定义指令起始位置
  • RUN 在命令行中执行的命令.这里执行的是更新apt和安装curl以及ca-certificates
  • CMD 镜像编译完成后执行的命令,相当于docker run执行的,不属于镜像部分。

将上面的文件保存为dockerfile,然后构建并执行他

docker build -t curl_docker .docker run curl_docker

将会构建一个镜像,并且启动执行CMD后面的命令

.

需要注意的是 docker build -t curl_docker .后面那个.表示当前目录,这个当前目录同时指定了Dockerfile的位置,和当前要传送的文件,当前目录下的所有文件、文件夹会传送到docker server进行构建,如果你的当前目录极为庞大,虽然不会影响最终镜像的大小,但是构建过程却是灾难灾难性的, 比如我刚才的构建的最终镜像虽然只有100多M,却传了1.7g的文件,受制于树莓派的sd卡磁盘性能,花了很长时间,建议把Dockerfile移动到一个单独目录进行构建。

.

构建完镜像以后,可以通过docker images列出你构建的镜像。

从Alphine Linux构建镜像

Alphine没有apt-get包管理工具,它们使用的是apk命令,但是基本操作类似

FROM armhf/alpine:3.5RUN apk add --no-cache curl ca-certificatesCMD ["curl", "https://docker.com"]  

构建步骤也与之前相同

docker build -t curl_docker_alphine

构建完以后启动容器检测下刚才的成果

pi@raspberrypi:~/dockerpath $ docker run curl_docker_alpine  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0

创建Node.js应用

跳过

使用GPIO

.

没用过GPIO,这段不太懂

.

想要使用外部硬件和扩展板,你需要访问GPIO针脚。这需要在启动容器时添加特定参数--privileged来允许容器读写内存特定区域来管理GPIO。

下面的示例Dockerfile构建了一个包含RPI.GPIO库的镜像

FROM resin/rpi-raspbian:latest  ENTRYPOINT []RUN apt-get -q update && /      apt-get -qy install /        python python-pip /        python-dev python-pip gcc make  RUN pip install rpi.gpio  

构建这个镜像以后,可以作为你日后执行GPIO脚本时的新镜像的基础镜像。

docker build -t gpio-base .

下面这个python脚本可以控制连接到GPIO18号引脚的led登闪烁

#app.pyimport RPi.GPIO as GPIO  import time  GPIO.setmode(GPIO.BCM)  led_pin = 17  GPIO.setup(led_pin, GPIO.OUT)while(True):      GPIO.output(led_pin, GPIO.HIGH)    time.sleep(1)    GPIO.output(led_pin, GPIO.LOW)    time.sleep(1)

有了前面构建的基础镜像,再加上这个脚本,咱们的新build只要包含这些内容就可以

#DockerfileFROM gpio-base:latest  ADD ./app.py ./app.pyCMD ["python", "app.py"]  

上面的脚本,从之前的gpio-base构建,并且吧app.py复制进新镜像的当前目录。编译以后,通过--privileged附加参数执行

docker build -t blink .docker run -ti --privileged blink

#其他后面还提到了,如果通过web服务控制led闪烁。以及一些相关站点,有兴趣可以看下原文连接

.

Get Started with Docker on Raspberry Pi

.

我想做用raspberry+docker作两件事情,一个是搭建openvpn,另一个是的ddns,每次配置拿到新机器都要折腾半天,虽然配置客户端比较简单,但也是不小的工作量,更担心初代机器哪天寿终正寝了,从头做起来不知道要花多少时间

广告 广告

评论区