初识docker——用树莓派3B+搭建跨平台云存储

docker 树莓派 虚拟化容器
摸鱼之家
发布时间: 2019-05-05
阅读: 22696

最近入手了一台单反相机,于是照片的储存量刷刷的往上涨。这里秀一下随手拍的照片


1.jpg


但是照片只存在pc机上,想随时随地用手机、笔记本、访问一下就非常麻烦,还需要接线去传输,用微软的OneDrive又经常连不上,而且同步速度非常慢。不久之前,参加社区活动到了一块树莓派3B+

于是着手开始用这块树莓派搭建一个能全平台访问的存储应用。查了一定的资料,确定Nextcloud作为当前的解决方案。Nextcloud不仅能够通过浏览器访问,同时在安卓Googleplayios平台,Desktop平台都有客户端,可以随时随地方便的实现文件照片的全平台同步。

闲话到此,接下来开始说明具体的部署步骤。首先引入我们此次使用的一个重要工具Docker:


Docker技术简介:

        Docker是一种虚拟化容器技术,在这个容器中运行着和真机分离的你要部署的服务的全部运行环境,其核心是docker imagedocker containerDocker image和虚拟机的vmdk有些类似,其中存放的是docker container运行需要的各种数据,比如继承了apachephppython等等软件。而Docker container就是正在运行的一个容器,来提供各种各样的服务。它的概念有些类似Java虚拟机,Java程序就是用过java虚拟机来执行的。可以理解Docker container就是一台虚拟机。Docker 容器就是一个典型的黑盒子,将部署特定服务的各种细节封装起来,你只需要安装docker软件,即可运行相应的docker image,就像上述的nextcloud在树莓派的部署过程一样。


为什么使用docker

那么问题来了,我们为什么需要使用docker呢?作为一个初学者,我认为docker有以下几点无可比拟的优势。

一、 简单:

docker最大的特点就是简单!!!,同样的以下面部署nextcloud的服务的过程来说,假如我们不使用docker,那么我们部署的步骤应该为:

1.安装php以及各种各样的拓展库

2.安装apache/nginxweb服务器

3.Nextcloud的官方网站上获取相应的文件,不排除传输过程中出现问题

4.安装mysql/mysqlite/oracle等等数据库软件

5.完成数据库的相关配置与权限分配

6.nextcloud部署在网站的web目录

7.完成大量的繁复的web服务器相关设置

但是当我们使用了docker之后我们的核心操作其实就两行代码:
 

sudo docker pull nextcloud
(从官方仓库下载docker image )
sudo docker run  -d -p 23333:80 nextcloud

(指定一些container的运行参数)
-d
指在后台运行,-p指定了docker container使用真机的23333端口,而80指的是container的内部的端口。还是将docker容器理解成一台真实的机器,我们这里相当于设置了一个简单的端口映射,将真机的23333端口映射到虚拟机的80端口,即为docker容器内部web服务器的端口。
这样,仅仅两行代码就运行起来了一个之前需要复杂配置的服务


二、 安全

对于生产环境来说,使用虚拟化技术有一个天然的优点,就是将服务和真机分离开来,对于docker容器来说,它只在你的服务器上的一个位置存储它的数据,一切和客户的数据交换只发生在虚拟化容器之间,保证了真机的安全。

三、灵活

使用docker需要的只有一个docker image或者你自己也可以根据官方文档去创建自己的docker image。服务不想要了?删了就好。想开多个服务?轻松实现,一个docker image可以用于同时创建多个docker container,这就非常类似于多道程序设计里面进程的概念,他们使用同一段代码,但都具有自己独立的运行状态。

       以上,是我在docker学习过程中的一些理解,您可能注意到,我使用了大量的类比的方法去理解它的概念,希望这篇文章能让您初步理解这种在运维中越来越热的技术——docker.

 材料:

1.树莓派3B+

2.5V/2.5A的电源供电

3.32GB Class 10 TF卡(根据个人需要可选择容量更大的Class10TF卡 )

4.将官方的Raspbian Stretch with desktop and recommended software最新版本烧写入内存卡


安装Docker

Docker是一个虚拟化的容器应用,官方网站为(https://www.docker.com/)通过docker可以方便的部署各样的应用,免去一些配置的麻烦.以下步骤可参阅docker官方文档(https://docs.docker.com/install/

首先通过ssh链接树莓派

2.png


运行以下命令:


sudo apt-get update
安装必须的软件环境
sudo apt-get install \ 
apt-transport-https \ 
ca-certificates \ 
curl \ 
gnupg2 \ 
software-properties-common
添加docker官方的apt-key


curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
添加dockerapt仓库


echo "deb [arch=armhf] https://download.docker.com/linux/raspbian \ $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
安装docker-ce


sudo apt-get install docker-ce
安装完成docker之后,pull nextcloud 的官方镜像:


sudo docker pull nexcloud
 3.png 
运行镜像:

sudo docker run -d -p 23333:80 nextcloud

4.png

这一步也可以通过参数手动指定数据存放的位置

查看容器的运行状态:
sudo docker container ls 

5.png


已经出现了正在运行中的docker container

到此nextcloud已经成功地部署在你的树莓派上啦,访问你的树莓派的23333端口(这个端口自己可以随意修改),就能看到Nextcloud的相关页面了.填入自己的用户名密码,使用默认的数据库就可以直接开始使用了


6.png


同时,nextcloud最强大的地方在于多终端同步,ios商店、googleplay(需要科学上网,或者后续我会上传apk文件),windows平台,linux平台都有相应的客户端。

效果大概是这样的:

WEB浏览器:


6.png


安卓App(获取渠道为GooglePlay商店搜索Nextcloud):





8.png


 




Ios应用(获取渠道:苹果APPSTORE搜索Nextcloud


9.png



总结:

可能遇到的问题与方案不足:

1.在使用docker的过程中,遇见的最大的问题可能是网络问题,当遇到网络问题不能从官方仓库拉取镜像时可以更换国内源,具体方法为:

编辑/etc/docker/daemon.json:

 sudo vim /etc/docker/daemon.json

输入以下内容并保存:
{

"registry-mirrors": ["http://hub-mirror.c.163.com"]

}

重启docker:
sudo service docker restart


2.      因为docker的虚拟化,所以可能会带来额外的开销,这里也不推荐用docker在树莓派上跑特别大型的应用,因为树莓派的性能还是比较弱的。

3.      Nextcloud作为一个云盘的替代品非常优秀,ubuntu18.04及以后的版本都加入了对nextcloud的支持,你可以轻松的在任何操作系统上使用它,但是它依旧不是传统的Nas,没有办法实现像群晖一类Nas多种多样的丰富功能。

4.      本次的方案还缺少对关键数据的备份机制,毕竟树莓派使用的是民用级别的TF卡,其数据的安全性相比普通Nas稍有欠缺,同时因为是TF卡,写入性能上有些慢了,但是作为存放小文件照片之类的绝对够了。这点后续可以通过挂载2.5寸的笔记本硬盘或者固态硬盘解决。

 

以上是本次方案的一些不足和tips,本次通过一个小实例引入了Docker虚拟化容器的技术,展示了其在运维过程中的极其优秀的地方,希望对您的学习之路有所帮助。


原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (8)
摸鱼之家 擅长:消费电子
评论(1)

登录后可评论,请 登录注册

JacobFang 356天前...
如何把上传到nextcloud中的文件存到树莓派外接的移动硬盘上列
0   回复
相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)