樹莓派基本配置與Docker的安裝


一、樹莓派的安裝

下載鏡像

在 樹莓派官網

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
#保存本地鏡像至本地
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 

     映射主機串口和總是啟動: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

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM