一、树莓派的安装

下载镜像

在 树莓派官网

https://www.raspberrypi.org/downloads/raspbian/

Win32 DiskImager,是一个把系统镜像写入SD卡的工具:

https://sourceforge.net/projects/win32diskimager/

解压系统镜像文件得到img文件,点击Write,写入系统。 格式化为F32,插入树莓派树莓派即可开机。

二、WiFi 网络配置

由于没有桌面服务,就算开机也不能进入系统来操作,如果有网线的话直接把网线插入树莓派即可联网,如果没有网线,只有 wifi 的话,就需要设置 wifi 的网络配置。

其实操作方法是很简单的:只要将刷好 Raspbian 系统的 SD 卡用电脑读取。在 boot 分区,也就是树莓派的 /boot 目录下新建 wpa_supplicant.conf 文件,按照下面的参考格式填入内容并保存到 wpa_supplicant.conf 文件即可。

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1 network={
ssid="WiFi1"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
} network={
ssid="WiFi-2"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1
}

说明以及不同安全性的 WiFi 配置示例:

 ssid:网络的ssid

 psk:wifi的密码

 priority:连接优先级,数字越大优先级越高(不可以是负数)

 scan_ssid:连接隐藏WiFi时需要指定该值为1

如果您的 WiFi 没有密码

network={
ssid="你的无线网络名称(ssid)"
key_mgmt=NONE
}

如果您的 WiFi 使用WEP加密

network={
ssid="你的无线网络名称(ssid)"
key_mgmt=NONE
wep_key0="你的wifi密码"
}

如果您的 WiFi 使用WPA/WPA2加密

network={
ssid="你的无线网络名称(ssid)"
key_mgmt=WPA-PSK
psk="你的wifi密码"
}

三、开启 SSH 服务

新系统的话是不可以通过 ssh 来连接树莓派的,会出现 Access denied 这个提示,所以需要手动开启,当然,这是很简单的。和 WiFi 配置相似,同样在 boot 分区新建一个文件,空白的即可,文件命名为 ssh 。注意要小写且不要有任何扩展名!

四、树莓派启用root账户

树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的。

debian里root账户默认没有密码,但账户锁定。

当需要root权限时,

直接执行

$ sudo su

即可切换为root用户。

树莓派默认用户是pi,密码为raspberry

重新开启root账号,可由pi用户登录后,在命令行下执行

$ sudo passwd root

修改root的密码。

执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可,然后在执行

$ sudo passwd -u root

开启root账号。

如果上面执行完出现

password expiry information changed.

的提示

是因为新版本ssh默认关闭root登陆,可以修改一下ssh的配置文件

$ sudo vim /etc/ssh/sshd_config
注:树莓派自带的vi编辑器十分难用,但vim是一个强大的编辑器,可以通过 sudo apt-get install vim 来安装

五、树莓派上运行Docker

安装Docker

在此之前可先更换apt源;
安装请参考:
http://get.daocloud.io/#install-docker
或者
https://www.runoob.com/docker/ubuntu-docker-install.html
或者
Centos7安装Docker(详细安装教程)
 

换成阿里源

$ cd /etc/docker
$ vi daemon.json
{
"registry-mirrors": [
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"dns": ["8.8.8.8","8.8.4.4"]
}
然后重启docker

service docker restart

Docker简单的使用

操作镜像:

#查看当前Docker的版本
docker -v
#搜索Docker, nginx代表您要搜索的镜像
docker search nginx
#拉取镜像文件
docker pull nginx
#查看已下载镜像
docker images
#删除本地镜像
docker rmi nginx
#强制删除docker本地镜像
docker rmi -f nginx
#保存本地镜像至本地,填写镜像名和镜像tag,如果填写镜像ID,使用docker load的时候,镜像名和tag会变成none
docker save -o nginx_image.docker nginx:latest
#加载镜像
docker load -i nginx_image.docker

使用dockerfile生成镜像(build):到了项目和 dockerfile 同一级的目录(注意后面的 . 不要省略)
docker build -t my-python-app .  

#批量删除无用镜像或容器
#批量删除异常停止的docker容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
#批量删除名称或标签为none的镜像
docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`

创建容器:

  ################    创建并启动容器    #################

  docker run -it --name 容器名 -p 8080(本地):80(容器) -d 镜像名                (sh或者bash)

  • -d设置容器在在后台一直运行。
  • -p 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。

操作容器:

  启动容器

  docker run  [ option ] 镜像名称或者镜像id

  例如: docker run -it -p 80:80 -v /www:/www --name nginx 镜像名称或者id

     映射主机串口和总是启动:docker run -itd --name gw4 -p 8200:80 --device='/dev/ttyAMA0' --restart=always gatewaysite_pro4

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -p: 端口映射,格式为:主机(宿主)端口:容器端口

  • -d: 后台运行容器,并返回容器ID;
  • --name  "nginx": 为容器指定一个名称
  • -v :   Docker容器启动的时候,如果要挂载宿主机的一个目录(docker run -it -v /test:/soft centos /bin/bash      /test为宿主机目录     /soft为容器目录,会自动创建)
  • /bin/bash  启动容器时并进入容器


#列出容器 -a表示未运行的也列出
docker ps -a
  • -a :显示所有的容器,包括未运行的。

  • -f :根据条件过滤显示的内容。

  • --format :指定返回值的模板文件。

  • -l :显示最近创建的容器。

  • -n :列出最近创建的n个容器。

  • --no-trunc :不截断输出。

  • -q :静默模式,只显示容器编号。

  • -s :显示总的文件大小。

    进入到正在运行的容器

 docker exec -it 容器id或者名称 /bin/bash

#启动容器
docker start server1
#停止容器
docker stop server1
#重启容器
docker restart server1
#强制删除容器
docker rm -f server1
#连接容器
docker attach server1
#在容器中输出"Hello World"
docker exec server1 echo "Hello World

#拷贝文件到容器
docker cp /root(主机) 容器id:/root(容器)

#查看docker网络
docker network ls
#查看容器的网络配置
docker network inspect bridge
#退出容器
exit
#查看当前进程
ps aux

#容器中的查看网络配置信息(ifconfig)
ip ad li
#容器中的查看路由表
ip ro li

#查看容器进程pid
docker inspect --format "{{.State.Pid}}" mynginx(容器名)

#docker网络访问
brctl show
#利用systemctl命令管理
显示服务状态:systemctl status docker.service
列出服务层级和依赖关系:systemctl list-dependencies docker.service 启动服务:systemctl start docker.service
关闭服务:systemctl stop docker.service
重启服务:systemctl restart docker.service 设置服务自启动:systemctl enable docker.service
禁止服务自启动:systemctl disable docker.service 查看服务是否自启动:systemctl is-enabled docker.service
列出系统所有服务的启动情况:systemctl list-units --type=service
列出所有自启动服务:systemctl list-unit-files|grep enabled
 
#-----------数据卷--------
#把物理主机的/opt目录或者文件挂载到docker中
docker run -it --name volume-test2 -h centos -v /opt(原):/opt(容器) centos
docker run -it --name volume-test2 -h centos -v /opt(原):/opt:ro(容器) centos  (只读)
#-----------数据卷容器--------
#让volume-test1容器专门存数据,其他容器从volume-test1容器中读数据
docker run -it volume-test3 --volumes-from volume-test1 centos

#-----------Docker资源隔离和限制--------
docker容器的本质是宿主机上的一个进程。
Docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过*写时复制机制(copy-on-write)*实现了高效的文件操作。

1、linux的namespace机制
namespace 机制提供一种资源隔离方案。
PID,IPC,Network等系统资源不再试全局性的,而是属于某个特定的Namespace.
每个namespace下的资源对于其他的namespace下的资源是透明的,不可见的。
Linux 内核实现namespace的一个主要目的就是实现轻量级虚拟化(容器)服务,在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知,以达到独立和隔离的目的。

namespace可以隔离哪些
一个容器要想与其他容器互不干扰需要能够做到:
    文件系统需要是被隔离的
    网络也是需要被隔离的
    进程间的通信也要被隔离
    针对权限,用户和用户组也需要隔离
    进程内的PID也需要与宿主机中的PID进行隔离
    容器也要有自己的主机名
    有了以上的隔离,我们认为一个容器可以与宿主机和其他容器是隔离开的。
    恰巧Linux 的namespace可以做到这些。

2、通过cgroups实现了资源限制:CPU和内存的限制

需要使用到压力测试工具:stress

stress安装教程:https://blog.csdn.net/datuzijean/article/details/86614597

或者创建一个stress的dockerfile:

(1)测试CPU

查看cpu信息:cat /proc/cpuinfo

开启一个压测stress:docker run -it --rm stress --cpu 1
再开启一个压测stress:docker run -it --rm stress --cpu 1

使用top查看CPU使用情况,会发现2个stress各占50%,每个容器默认权重都是1024,调整权重后(docker run -it --rm -c 512 stress --cpu 1),1,2占比2:1

(2)测试内存

docker run -it --rm -m 128m stress --vm 1 --vm-bytes 120m --vm-hang 0        (-m  限制容器使用128M内存,当--vm-bytes 256m时,大概是-m的2倍时,容器退出)

#-----------Docker网络模式-----------

(1)容器间的互联

docker守护进程的启动选项 --icc=true(默认)

容器重启后,容器的IP地址会发生改变,所以需要使用link来连接多个容器:

命令:docker run -it --name mycentos2 --link=mycentos1:webtest centos             (webtest是别名))

创建ing进入容器后,ping webtest就可以ping通mycentos1的容器

可以使用环境变量查看:env

也可以 vi /etc/hosts  查看webtest的地址映射

(2)拒绝所有容器间的互联

docker守护进程的启动选项 --icc=false

vim /etc/sysconfig/docker  添加DOCKER_OPTS="--icc=false"

重启docker服务:service docker restart

(3)允许特定容器中的链接

docker守护进程的启动选项 --icc=false   --iptables=true

--link

(4)容器与外部网络的链接

--ip-forword=true   决定系统是否会转发流量,默认开启

--iptables  iptables是与Linux内核集成的包过滤防火墙系统

阻止特定IP访问特定容器: iptables -I DOCKER -s 192.168.238.2 -d 172.17.0.2 -p TCP --dport -j DROP

查看iptables

#-----------registry私有镜像仓库-----------

在192.168.238.1的机器上执行:

下载registry镜像:docker pull registry

创建容器:docker run -d -p 5000:5000 registry

给要上传的镜像打标签,这里以redis为例:docker tag redis 192168.238.1:5000/redis:v1

上传redis到registry私有仓库:docker push 192168.238.1:5000/redis:v1

注意:此时若报错,可执行如下操作:

  vim /etc/sysconfig/docker

  在OPTIONS=后面加上:--insecure-registry 192.168.238.1:5000

  然后重启容器:systemctl restart docker

在192.168.238.2的机器上执行:

  vim /etc/sysconfig/docker

  在OPTIONS=后面加上:--insecure-registry 192.168.238.1:5000

  然后重启容器:systemctl restart docker

然后就可以pull镜像了:docker pull 192168.238.1:5000/redis:v1

#-----------公有镜像仓库 docker hub-----------

https://www.cnblogs.com/yangyangming/p/11646666.html



树莓派基本配置与Docker的安装的更多相关文章

  1. Linux(Manjaro) - Docker - MySQL 安装配置

    Linux(Manjaro) - Docker - MySQL 安装配置 拉取mysql镜像 # 使用网易的 MySQL 镜像地址 docker pull hub.c.163.com/library/ ...

  2. docker的安装和简单配置

    docker的安装和简单配置 docker是balabalabala...懒得介绍. 国内安装docker很蛋疼,按照官方配置好了软件源之后,几十MB的安装文件下载要半天,没办法,docker默认的软 ...

  3. docker+redis安装与配置,主从+哨兵模式

    docker+redis安装与配置 docker安装redis并且使用redis挂载的配置启动 1.拉取镜像 docker pull redis:3.2 2.准备准备挂载的目录和配置文件 首先在/do ...

  4. CentOS双机中Docker下安装Mysql并配置互为主从模式

    CentOS双机中Docker下安装Mysql并配置互为主从模式 目录 1.搜索镜像... 1 2.拉取镜像... 1 3.绑定端口: 1 4.配置文件(修改/etc/mysql/my.cnf文件): ...

  5. 在Docker中安装配置Oracle12c并实现数据持久化

    在Docker中安装配置Oracle12c并实现数据持久化 选定镜像,并pull到系统中,一定要先配置加速,不然超级慢 eric@userver:~$ docker pull sath89/oracl ...

  6. Docker的安装,配置,更新和卸载

    我们可以在Linux中安装Docker并运行Hello world应用程序.通过下面这些操作,我们将会学到更多有关于Docker的基础特征.我们将会学到如何: 安装Docker引擎 在一个容器中运行软 ...

  7. docker的安装以及jdk和tomcat的环境配置

    准备工作:需要Linux kernel 3.8支持查看linux内核的版本:root@ubuntu-dev:~# cat /proc/version查看linux版本:root@ubuntu-dev: ...

  8. Docker 快速安装&搭建 Ngnix 环境,并配置反向代理

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  9. Windows和Centos下Docker的安装配置

    Windows和Centos下Docker的安装配置 windows环境下的安装(win10) 在Windows系统上需要利用toolbox来安装Docker,现在 Docker 有专门的 Win10 ...

随机推荐

  1. 【C# TAP 异步编程】二 、await运算符已经可等待类型Awaitable

    await的作用: 1.await是一个标记,告诉编译器生成一个等待器来等待可等待类型实例的运行结果. 2.一个await对应一个等待器 ,任务的等待器类型是TaskAwaiter/TaskAwait ...

  2. 小白都能看懂的tcp三次握手

    众所周知,TCP在建立连接时需要经过三次握手.许多初学者经常对这个过程感到混乱:SYN是干什么的,怎么一会儿是1一会儿是0?怎么既有大写的ACK又有小写的ack?为什么ACK在第二次握手才开始出现?初 ...

  3. Qt:QJsonObject

    0.说明 QJsonObject在逻辑上就是一个Map或Dict!记住这一点对理解它的方法.说明很有帮助. QJsonObject类封装了JSON Object. JSON Object是一个Key- ...

  4. 文件上传漏洞之js验证

    0x00 前言 只有前端验证=没有验证 0x01 剔除JS 打开burpsuite,进入Proxy的Options,把Remove all JavaScript选上. 设置浏览器代理直接上传PHP木马 ...

  5. WPF优秀组件推荐之Stylet(一)

    一.简介 Stylet是基于WPF的一款MVVM组件,虽然WPF本身是自带MVVM功能的,但实现起来不是很方便 ,通过Stylet,用户可以用很少的代码就能享受MVVM带来的舒适体验. 目前Style ...

  6. 初识python(2)

    目录 引言 数据类型 字典 集合 元组 布尔值 用户交互 格式化输出 运算符 增量赋值 链式赋值 交叉赋值 解压赋值 逻辑运算符 成员运算符 身份运算符 引言 小伙伴们昨天已经讲了一点python的数 ...

  7. LeetCode-045-跳跃游戏 II

    跳跃游戏 II 题目描述:给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 假设你总是可以到 ...

  8. C# NPOI导出数据到Excel

    1 public void Export() 2 { 3 //创建工作簿对象 4 IWorkbook workbook = new XSSFWorkbook(); 5 6 ExportStatisti ...

  9. 如何创建一个 Cocoapods 插件

    原文链接 前言 我们在使用 Cocoapods 过程中,如果发现它未能满足我们的要求该怎么办呢? 最简单的粗暴的办法就是 fork 一份 Cocoapods 源码,然后自己公司内部或者个人直接针对源码 ...

  10. webug 4.0 打靶笔记-01

    webug 4.0 打靶笔记 1. 显错注入 1.1 访问靶场 1.2 判断注入点 查找一切有参数传入的地方进行测试,注意到有get传参?id=1 猜测后台php中sql语句模板可能为如下几种情况 $ ...