一、树莓派的安装

下载镜像

在 树莓派官网

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. 防世界之NaNNaNNaNNaN-Batman

    题目: 只有一个附件,下载解压放到桌面. web应该是个html文件,改下后缀打开看看 发现就一个框和按钮,测试发现也没注入点,应该不是考sql.打开源码查看一下,发现是个js脚本,但是,代码是乱码, ...

  2. 程序与CPU,内核,寄存器,缓存,RAM,ROM、总线、Cache line缓存行的作用和他们之间的联系?

    目录 缓存 什么是缓存 L1.L2.L3 为什么要设置那么多缓存.缓存在cup内还是cup外 MESI协议----主流的处理缓存和主存数据不一样问题 Cache line是什么已经 对编程中数组的影响 ...

  3. LINUX服务器常用命令

    转至:https://my.oschina.net/7shell/blog/70508 常用命令 查看所有80端口的连接数 1. netstat -nat|grep -i "80" ...

  4. LeetCode-001-两数之和

    两数之和 题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答 ...

  5. 【架构】从instagram学习最小化IT是怎么做的

    Keep it very simple (极简主义) Don't re-invent the wheel (不重复发明轮子) Go with proven and solid technologies ...

  6. .Net Core(.NET6)中接入Log4net和NLog进行日志记录

    一.接入Log4net 1.按日期和大小混合分割日志 nuget包安装 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 配置文件 配置文 ...

  7. LGP3281口胡

    当你看到一个东西的时候,GF 有可能比 DP 更方便.处理贡献也有可能比 DP 更方便. 这个题意明显是让我们计算 \(S(r)-S(l-1)\) 之类的东西( 所以直接考虑前缀的答案就好了( 考虑将 ...

  8. linux指令_张三

    1.基础指令语法 ls (路径) 含义:列出当前工作目录下的所有文件/文件夹的名称 pwd(printworkingdirectory,打印当前工作目录) cd (路径)       作用:用于切换当 ...

  9. 【面经】MySql常见问题

    1. 数据库三范式是什么? 1. 第一范式(1NF):字段具有原子性,不可再分.(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分) 2. 第二范式(2NF)是在第一范式(1 ...

  10. .NET MAUI 已在塔架就位 ,4月份RC

    最美人间三月天,春光不负赶路人.在充满无限希望的明媚春天里,一路风雨兼程的.NET 团队正奋力实现新的突破. 根据计划,新一代移动开发平台MAUI 将于4月份 发布RC. 目前,MAUI的测试工作和火 ...