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

1、樹莓派的安裝

下載鏡像

在 樹莓派官網javascript

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

Win32 DiskImager,是一個把系統鏡像寫入SD卡的工具:java

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

解壓系統鏡像文件獲得img文件,點擊Write,寫入系統。 格式化爲F32,插入樹莓派樹莓派便可開機。linux

2、WiFi 網絡配置

因爲沒有桌面服務,就算開機也不能進入系統來操做,若是有網線的話直接把網線插入樹莓派便可聯網,若是沒有網線,只有 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

若是您的 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密碼" }

3、開啓 SSH 服務

新系統的話是不能夠經過 ssh 來鏈接樹莓派的,會出現 Access denied 這個提示,因此須要手動開啓,固然,這是很簡單的。和 WiFi 配置類似,一樣在 boot 分區新建一個文件,空白的便可,文件命名爲 ssh 。注意要小寫且不要有任何擴展名!

4、樹莓派啓用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

5、樹莓派上運行Docker

換成阿里源

$ 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

安裝Docker

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的版本
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 同時使用;

  • -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(主機):/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

相關文章
相關標籤/搜索