1. 程式人生 > 實用技巧 >docker常用命令-docker網路

docker常用命令-docker網路

docker命令詳解

docker search          在docker hub中搜索映象;
docker pull            從docker映象源伺服器拉取指定映象或者庫映象;
docker push            推送指定映象或者庫映象至docker源伺服器;
docker history         展示一個映象形成歷史;
docker images          列出系統當前映象;
docker run             建立一個新的容器並執行一個命令;
docker start           啟動容器;
docker stop            停止容器;
docker attach          當前shell 下attach連線指定執行映象;
docker build           通過Dockerfile定製映象;
docker commit         提交當前容器為新的映象;
docker cp             從容器中拷貝指定檔案或者目錄到宿主機中;
docker create         建立一個新的容器,同run,但不啟動容器;
docker diff           檢視docker容器變化;
docker events         從docker服務獲取容器實時事件;
docker 
exec 在已存在的容器上執行命令; docker export 匯出容器的內容流作為一個tar歸檔檔案[對應import] docker import 從tar包中的內容建立一個新的檔案系統映像[對應export] docker info 顯示系統相關資訊; docker inspect 檢視容器詳細資訊; docker kill 指定docker容器; docker load 從一個tar包中載入一個映象[對應save]; docker login 註冊或者登入一個docker源伺服器; docker logs 輸出當前容器日誌資訊; docker port 檢視對映埠對應的容器內部源埠; docker pause 暫停容器; docker ps 列出容器列表; docker restart 重啟執行的容器; docker rm 移除一個或者多個容器; docker rmi 移除一個或者多個映象; docker save 儲存一個映象為一個tar包[對應load] docker tag 給源中映象打標籤; docker top 檢視容器中執行的程序資訊; docker unpause 取消暫停容器; docker version 檢視docker版本號; docker wait 擷取容器停止時的退出狀態值;

docker網路 4種模式

基於docker run建立docker容器時,可以使用--ent選項指定容器的網路模式,docker預設有以下四種網路模式:
  1. host模式,使用--ent=host指定;
  2. container模式,使用--ent=container:NAME or ID指定;
  3. none模式,使用--ent=none指定;
  4. bridge模式,使用--ent=bridge指定,預設設定;
host模式詳解: 預設docker容器執行會分配獨立的network namespace 隔離子系統,基於host模式,容器將不會獲得一個獨立的network namespace,而是和宿主機公用一個network namespace,容器將不會虛擬出自己的網絡卡,配置自己的IP等,而是使用宿主機的IP和埠。 container模式詳解: 熟悉了host模式,container模式也非常好理解,container模式指定新建立的容器和已經存在的一個容器共享一個network namespace,而不是和宿主機共享。 即新建立的容器不會建立自己的網絡卡,配置自己的IP,而是和一個指定的容器共享IP、埠範圍等。同樣兩個容器除了網路方面相同之外,其他的如文價系統、程序列表還是隔離的。 none模式詳解: none模式與其他的模式都不同,如果處於none模式,docker容器擁有自己的network namespace,但是並不為docker容器進行任何網路配置。也就是說該docker容器沒有網絡卡、IP、路由等資訊,需要手工為docker容器新增網絡卡、配置IP等,典型pipework為docker容器指定IP等資訊; bridge橋接模式: bridge模式docker預設的網路模式,該模式會為每一個容器分配network namespace、配置IP、路由等配置,預設會將docker容器連線到一個虛擬網橋交換機docker0上。

修改docker0的網路:vim /etc/sysconfig/docker-network 編輯此檔案,如果沒有就建立:新增如下內容

[root@localhost ~]# cat /etc/sysconfig/docker-network 
# /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS="--bip=172.16.1.1/16"
docker bridge建立過程:
  1. 首先宿主機上建立一對虛擬網絡卡veth pair裝置,veth裝置總是成對出現的,組成一個數據的通道,資料從一個裝置進入,就會從另一個裝置出來,veth裝置常用來連線兩個網路裝置。
  2. docker將veth pair裝置的一端放在新建立的容器中,並命名為eth0,然後將另一端放在宿主機中,以vethxxx這樣類似的名字命名,並將這個網路裝置加入到docker0網橋中,可以通過brctl show命令檢視。
  3. 從docker0子網中分配一個IP給容器使用,並設定docker0的IP地址為容器的預設閘道器。
  4. 此時容器IP與宿主機能夠通訊,宿主機也可以訪問容器中的IP地址,在bridge模式下,連在同一個網橋上的容器之間可以相互通訊,同時容器也可以訪問外網,但是其他物理機不能訪問docker容器IP,需要通過NAT將容器IP的port對映為宿主機的IP和port。

centos6.x docker橋接網路實戰: 基於centos 6.x構建的docker橋接網路,案例方法如下: docker0橋接網路可以自定義,如下為自定義的橋接網路的設定:
/etc/init.d/docker stop
關閉docker0
ifconfig docker0 down
刪除docker0
brctl delbr docker0
沒有brctl需要安裝
yum install bridge-utils -y  

centos6.x的配置:
 vim  /etc/sysconfig/docker-network
other_args="-b=br0"

/etc/sysconfig/network-scripts/下,修改ifcfg-eth0網絡卡配置,同時增加ifcfg-br0橋接網絡卡配置,操作流程如下:
vi  ifcfg-eth0內容修改為如下:
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
BRIDGE="br0"
IPADDR=192.168.43.81
NETMASK=255.255.255.0
GATEWAY=192.168.43.1
USERCTL=no

vi  ifcfg-br0內容如下:
DEVICE="br0"
BOOTPROTO=none
IPV6INIT=no
NM_CONTROLLED=no
ONBOOT=yes
TYPE="Bridge"
IPADDR=192.168.43.81
NETMASK=255.255.255.0
GATEWAY=192.168.43.1
USERCTL=no

啟動docker服務

/etc/init.d/docker start 

啟動一個新的docker客戶端,檢視客戶端ip如下: 進入已經啟動過的容器命令:docker attach 容器ID 即可。 此時可以外網了

centos7.x橋接網路實戰: 基於centos7.x構建docker橋接網路,案例方法如下: 配置bridge橋接網路可以直接設定網絡卡配置檔案: /etc/sysconfig/network-scripts/下,修改ifcfg-ens33網絡卡配置,同時增加ifcfg-br0橋接網絡卡配置,操作流程如下: vim ifcfg-ens33

TYPE=Ethernet
BOOTPROTO=static
BRIDGE="br0"
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.20
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
vim ifcfg-br0