树莓派zero上用docker跑nginx

docker对于学习和测试一些常用软件还是非常有帮助的,最近尝试下nginx的配置,光看文档还是缺乏上手经验的,恰好手上有个树莓派加上自己的电脑,刚好可以来尝试下树莓派nginx的代理功能。目前树莓派上安装docker已经有了脚本,所以安装只需要

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

但是对于镜像而言我们是不能直接拉取nginx:latest的,原因在于所有树莓派都是基于armv6架构(可以用uname -a查看)而大部分的主流镜像都是建立在pc的cpu架构上的,所以即便拉取成功运行时还是会直接terminate退出的。当然镜像也不能随便从非官方途径获取,因为这样很容易让你的设备成为DDOS攻击的傀儡。官方的github,对于树莓派而言我们也能从中找到对应的仓库,可以从该仓库中找到arm32v6/nginx,这就是能在树莓派上运行的镜像,所以我们可以先获取镜像

docker pull arm32v6/nginx

我第一次拉取该镜像的时候直接报错了

Using default tag: latest
Error response from daemon: manifest for arm32v6/nginx:latest not found

明明可以从仓库中看到这个镜像docker pull却提示不存在。后来我人为可能跟镜像的tag有关,默认的是latest也就是最后一个版本。但现在提示不存在也就是说我们得指定tag了树莓派zero上用docker跑nginx_第1张图片
在tags栏中我选择了alpine-perl

docker pull arm32v6/nginx:alpine-perl

指定tag后果然就成功了。接下来要运行镜像(同样需要指定tag

docker run -p 80:80 --name nginx --rm arm32v6/nginx:alpine-perl

我们并没有用-d让其后台运行,所以终端会继续存在并暂时没有任何输出。打开浏览器地址栏中输入运行镜像的机器ip,能看到Welcome to nginx!基本上就没有问题了,并且刚刚的终端也会有输出信息,现在可以直接CTR-c关掉这个容器了(用了–rm启动的容器在退出时相应的容器也会被删除)。目前来说仅仅是在树莓派上运行了nginx,我们可以尝试修改nginx的配置文件来达到不同的目的,这里做个小实验

* linux电脑 树莓派
ip地址 192.168.1.8 192.168.1.9
新建文件 ~/nginx_test/test1 ~/nginx_test/test2

分别在两个nginx_test文件夹中运行python -m SimpleHTTPServer来建立两个简单的http服务器。运行成功后浏览器地址栏输入192.168.1.8:8000可以看到test1文件,192.168.1.9:8000可以看到test2文件。现在在树莓派上启动nginx(-d让其后台运行)

docker run -p 80:80 -d --name nginx --rm arm32v6/nginx:alpine-perl

用docker ps -a 得到容器ID并登陆容器

pi@raspberrypi:~ $ docker exec -it 容器ID /bin/sh
/ # 

在nginx的配置文件/etc/nginx.conf中’ include /etc/nginx/conf.d/*.conf; ‘的上一行加入规则(include 这一行是通配原则可以注释掉, 这里我们采取注释)

    upstream backend {                                                       
      server 192.168.1.8:8000;                                              
      server 192.168.1.9:8000;                                              
    }                                                                        

    server {                                                                 
      listen 80;                                                             
      location = / {                                                           
        proxy_pass http://backend;                                           
      }   

      location = /test1 {
        rewrite . http://192.168.1.8:8000;
      }

      location = /test2 {
        rewrite . http://192.168.1.9:8000;
      }

    }                                                              

    #include /etc/nginx/conf.d/*.conf; 

保存配置文件后需要执行

nginx -s reload

使得配置文件生效,(容器中直接修改文件,当容器删除后重新从镜像运行会丢失这些修改的内容,可以使用docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 提交一个新的image来保存这些修改)
浏览器地址访问192.168.1.9并刷新就可以看到test1和test2交替出现了,如果访问192.168.1.9/test1则锁定访问在test1,192.168.1.9/test2则锁定访问在test2。当然这里只是做个小测验,所以规则比较简单,仅仅做个入门而已^^

你可能感兴趣的:(其他,pi0,docker,nginx)