在 樹莓派官網javascript
https://www.raspberrypi.org/downloads/raspbian/html
Win32 DiskImager
,是一個把系統鏡像寫入SD卡的工具:java
https://sourceforge.net/projects/win32diskimager/python
解壓系統鏡像文件獲得img文件,點擊Write,寫入系統。 格式化爲F32,插入樹莓派樹莓派便可開機。linux
因爲沒有桌面服務,就算開機也不能進入系統來操做,若是有網線的話直接把網線插入樹莓派便可聯網,若是沒有網線,只有 wifi 的話,就須要設置 wifi 的網絡配置。nginx
其實操做方法是很簡單的:只要將刷好 Raspbian 系統的 SD 卡用電腦讀取。在 boot 分區,也就是樹莓派的 /boot 目錄下新建 wpa_supplicant.conf
文件,按照下面的參考格式填入內容並保存到 wpa_supplicant.conf
文件便可。web
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 配置示例:redis
ssid:網絡的ssidsql
psk:wifi的密碼docker
priority:鏈接優先級,數字越大優先級越高(不能夠是負數)
scan_ssid:鏈接隱藏WiFi時須要指定該值爲1
network={ ssid="你的無線網絡名稱(ssid)" key_mgmt=NONE }
network={ ssid="你的無線網絡名稱(ssid)" key_mgmt=NONE wep_key0="你的wifi密碼" }
network={ ssid="你的無線網絡名稱(ssid)" key_mgmt=WPA-PSK psk="你的wifi密碼" }
新系統的話是不能夠經過 ssh 來鏈接樹莓派的,會出現 Access denied 這個提示,因此須要手動開啓,固然,這是很簡單的。和 WiFi 配置類似,一樣在 boot 分區新建一個文件,空白的便可,文件命名爲 ssh
。注意要小寫且不要有任何擴展名!
樹莓派使用的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
$ cd /etc/docker
$ cat 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
apt-get install -y apt-transport-https wget -q https://packagecloud.io/gpg.key -O - | sudo apt-key add - apt-get update apt-get install -y docker-hypriot systemctl enable docker
#查看當前Docker的版本
docker -v
#搜索Docker, nginx表明您要搜索的鏡像
docker search nginx
#拉取鏡像文件
docker pull nginx
#查看已下載鏡像
docker images
#刪除本地鏡像
docker rmi nginx
#強制刪除docker本地鏡像
docker rmi -f nginx
#保存本地鏡像至本地
docker save -o nginx_image.docker nginx
#加載鏡像
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 /bin/bash
-i: 以交互模式運行容器,一般與 -t 同時使用;
-p: 端口映射,格式爲:主機(宿主)端口:容器端口
#列出容器 -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(主機):/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)*實現了高效的文件操做。
一、linux的namespace機制
namespace 機制提供一種資源隔離方案。
PID,IPC,Network等系統資源再也不試全局性的,而是屬於某個特定的Namespace.
每一個namespace下的資源對於其餘的namespace下的資源是透明的,不可見的。
Linux 內核實現namespace的一個主要目的就是實現輕量級虛擬化(容器)服務,在同一個namespace下的進程能夠感知彼此的變化,而對外界的進程一無所知,以達到獨立和隔離的目的。
namespace能夠隔離哪些
一個容器要想與其餘容器互不干擾須要可以作到:
文件系統須要是被隔離的
網絡也是須要被隔離的
進程間的通訊也要被隔離
針對權限,用戶和用戶組也須要隔離
進程內的PID也須要與宿主機中的PID進行隔離
容器也要有本身的主機名
有了以上的隔離,咱們認爲一個容器能夠與宿主機和其餘容器是隔離開的。
恰巧Linux 的namespace能夠作到這些。
二、經過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