树莓派使用docker入门

                                     树莓派使用docker

本文翻译自https://blog.alexellis.io/getting-started-with-docker-on-raspberry-pi/

仅翻译了部分内容,在树莓派3b+上进行的试验。

 

在树莓派上安装docker使用基本教程

http://shumeipai.nxez.com/2019/05/20/how-to-install-docker-on-your-raspberry-pi.html

这里使用教程里的第一种方法,输入如下脚本自动安装

sudo curl -sSL https://get.docker.com | sh

安装完docker 输入sudo docker run hello-world 进行测试,如果出现hello from docker说明安装成功

#推荐下载 Docker 图形化界面 portainer进行维护

sudo docker pull portainer/portainer

#创建 portainer 容器

sudo docker volume create portainer_data

#运行 portainer

sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

再浏览器中输入localhost:9000界面

加入docker用户组

docker客户端客户端只能被root或者docker组的成员使用,使用下面的命令实现jian将pi或者你的yon用户添加进docker组

sudo usermod -aG docker pi

 从Hub上拉去镜像

 如果你从Docker Hub的上拉取busybox,在树莓派上它不能工作,因为这些镜像是为X86_64的架构而设计的,

我们必须使用ARM架构的docker镜像,例如docker团队的arm32v6arm32v7 等镜像官方网站

https://hub.docker.com/ 中搜索你需要的镜像。

运行第一个ARM镜像

使用docker官方的Alpine Linux image镜像arm32v6/alpine

$ docker run -ti arm32v6/alpine:3.5 /bin/sh

/ # cat /etc/os-release

NAME="Alpine Linux"

ID=alpine

VERSION_ID=3.5.2

PRETTY_NAME="Alpine Linux v3.5"

HOME_URL="http://alpinelinux.org"

BUG_REPORT_URL="http://bugs.alpinelinux.org"

 

/ # echo "Hi, this is a tiny Linux distribution!" | base64

SGksIHRoaXMgaXMgYSB0aW55IExpbnV4IGRpc3RyaWJ1dGlvbiEK

 

/ # echo "SGksIHRoaXMgaXMgYSB0aW55IExpbnV4IGRpc3RyaWJ1dGlvbiEK" | base64 -d

Hi, this is a tiny Linux distribution!

 

其他的镜像

 Resin.io 支持树莓派的使用 

 

构建一个新的镜像

使用dockerfile 继承镜像实现创建自己的镜像,首先建立一个文件夹,在文件文件dockerfile输入如下内容,在基础镜像的基础上增加了curl 和ca-certificates工具

FROM resin/rpi-raspbian:latest

ENTRYPOINT []

RUN apt-get update && \

    apt-get -qy install curl ca-certificates

CMD ["curl", "https://docker.com"] 

 

FROM - 继承的镜像

ENTRYPOINT [] -容器默认的运行时启动的命令和下面的CMD类似

RUN - 镜像中安装各种工具在这里an'z安装

CMD -容器的开始运行时默认的执行命令,每个docker 容器至少需要一个前台主进程,主进程退出,docker容器退出

构建镜像并运行,使用docker images可以查看本地已经生成了自定义的镜像

$ docker build -t curl_docker .

$ docker run curl_docker  

 

docker run curl_docker 默认会执行CMD 定义的curl https://docker.com

使用命令docker rmi curl_docker 实现删除生成的镜像

 

创建一个ndoejs的镜像

Dockerfile文件如下:

FROM  resin/rpi-raspbian:latest

ENTRYPOINT []



RUN apt-get update && \

    apt-get -qy install curl \

                build-essential python \

                ca-certificates

WORKDIR /root/

RUN curl -O \

  https://nodejs.org/dist/v4.5.0/node-v4.5.0-linux-armv6l.tar.gz

RUN tar -xvf node-*.tar.gz -C /usr/local \

  --strip-components=1



CMD ["node"]

 

构建并运行镜像:

$ docker build -t node:arm .

$ docker run -ti node:arm

 

构建使用GIPIO的镜像

为了使用硬件的内存区域,在使用docker run时必须加上 --privileged 参数

Dockerfile的内容如下: 

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

构建镜像

$ docker build -t gpio-base .

新建文件led.py 实现点亮led

import 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)

 

再继承你刚刚构建的gpio-base生成一个新的镜像放入你的python代码,当然也可以直接使用gpio-base 镜像将 led.py拷贝进容器中运行

FROM gpio-base:latest

ADD ./app.py ./app.py

CMD ["python", "app.py"]

 

构建并运行docker容器

$ docker build -t blink .

$ docker run -ti --privileged blink

 

如果docker 容器提供了外网访问,记得启动容器是加上端口映射 

如:docker run -it  --name test1 --privileged -p 5000:5000  -p 50001:50001  image1  /bin/bash 

这样通过访问docker所在机器的ip:port便可访问docker 容器里的端口

 

balenaLib docker镜像

https://www.balena.io/docs/reference/base-images/base-images/#features-overview

访问这个网站获取需要的适合树莓派等嵌入式系统的docker基础镜像

下面是一个使用balenalib/armv7hf-debian-python:3.6.9的例子,使用了python3环境 并安装了一些python依赖

并将工程拷贝到sensorapp文件夹中,使用CMD命令CMD ["sh","/app/sensorapp/runsensor.sh"] 启动程序,注意CMD里程序使用绝对路径。

FROM balenalib/armv7hf-debian-python:3.6.9

ENV UDEV=1
WORKDIR /app
COPY Sensor2   ./sensorapp
RUN  chmod u+x ./sensorapp/runsensor.sh

RUN apt update 
RUN apt -qy install build-essential vim
RUN pip3 install rpi.gpio paho-mqtt Adafruit_DHT pyserial flask flask_cors wiringpi  

CMD ["sh","/app/sensorapp/runsensor.sh"]

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值