1. 程式人生 > >ovs+dpdk-docker實踐

ovs+dpdk-docker實踐

docker 概念

關於docker的基本概念相關,可以參考官網介紹,介紹的挺全面的。另外這篇文章介紹的也很清晰,並附帶有可以直接上手的例項。

關於container和vm的對比,需要重點關注下,直接放圖如下:
containers vs VMs
從圖中可以看出兩者的區別包括:
1. 傳統的VM需要依賴hypervisor層來實現,而不同hypervisor實現是和硬體強繫結的;docker對hardware的依賴則很少
2. VM內部除了包含app以及依賴的執行庫環境,還包括了Guest OS;相比docker,過於重量級,從而導致對host端資源的佔用率比較高
3. docker中多個container App都是使用Host的kernel,不適用與依賴不同kernel實現的App
4. docker提供的swarm模式,可以方便地建立一個docker叢集,從而靈活地提供高可用性和故障恢復等特性

研究方案選擇

目前dpdk官網提供兩種方案來支援container,如下圖:
Use models of running DPDK inside container
上圖(1) 方案中需要NIC支援SR-IOV功能,物理NIC支援的VF個數也依賴於硬體資源;每個container的介面獨佔VF,多個VF共享下面的一個PF。基於這種方案實現的container,無論對硬體的依賴和繫結,還是container的遷移,支援性都做得不夠好。
上圖(2) 方案中需要在host中執行vswitch或者vRouter來將上層的containers和底層的物理NIC解耦,只要vswitch(當前比較流行的OVS+DPDK,將OVS放在使用者態來實現)的效能足夠,一樣可以實現高效能的container app了。

技術分析

基於以上比較,本次預研主要選取第二種方案來實現,該方案中container中涉及的元件如下圖所示:
Overview of accelerating  container networking by virtio-user

方案中使用virtual device(包括virtio-user和vhost-user backend)來實現高效能的container App 或者IPC。Virtio使用共享記憶體的方式來收發報文,傳統的VM可以通過qemu來共享vhost後端的實體地址,但對container而言,作為系統的一個程序,使用這種方式則比較難。目前的思路是隻能使用DPDK初始化的hugepages來進行記憶體共享。所以,要在container中使用dpdk,必須要分配足夠的大頁記憶體,且不同container在使用共享記憶體時要能夠分割槽使用,避免地址重複。

container + dpdk 實踐

拓撲圖

實踐拓撲圖一
實踐拓撲圖二

dpdk 安裝

wget http://fast.dpdk.org/rel/dpdk-17.05.tar.xz
tar -xvf dpdk-17.05.tar.xz
cd dpdk-17.05

#設定DPDK庫目錄位置
echo export RTE_SDK=$(pwd) >>~/.bashrc
#設定DPDK目標環境
#注意!這裡的x86_64-native-linuxapp-gcc應替換為實際執行環境
echo export RTE_TARGET=x86_64-native-linuxapp-gcc  >> ~/.bashrc
source ~/.bashrc

#配置DPDK,需要使用Vhost-user驅動,需要將CONFIG_RTE_LIBRTE_VHOST=y
vim config/common_base

#安裝dpdk
make config T=$RTE_TARGET
make T=$RTE_TARGET -j8

#編譯l2fwd
[[email protected] dpdk-17.05]# cd examples/l2fwd/
[[email protected] l2fwd]# make 

hugepage的配置(配置使用1G大小的hugepagesize,同時最多分配8個):

sudo vim /etc/default/grub2.cfg
#找到其中一項為 GRUB_CMDLINE_LINUX_DEFAULT= ,不論後面的引號內包含任何內容,在原本內容之後新增 default_hugepagesz=1GB hugepagesz=1G hugepages=8(這裡分配了8個1G的hugepages)
reboot

#檢視分配情況
grep Huge /proc/meminfo

#分配成功後進行掛載
mkdir -p /dev/hugepages
mount -t hugetlbfs none /dev/hugepages
mkdir -p /mnt/huge
mount -t hugetlbfs -o pagesize=1G none /mnt/huge

pktgen 安裝

pktgen的安裝依賴於DPDK,安裝前確保RTE_SDK和RTE_TARGET環境變數設定正確。

#安裝依賴
yum install -y libpcap.x86_64
wget http://www.dpdk.org/browse/apps/pktgen-dpdk/snapshot/pktgen-3.4.2.tar.gz
tar -xvf pktgen-3.4.2.tar.gz
cd pktgen-3.4.2
make -j8
ln -s $(pwd)/app/$RTE_TARGET/pktgen /usr/bin/pktgen

ovs 安裝與配置

  1. 安裝ovs:
#下載
wget http://openvswitch.org/releases/openvswitch-2.8.1.tar.gz
#解壓
tar xzvf openvswitch-2.8.1.tar.gz
cd openvswitch-2.8.1
#配置環境並安裝
./boot.sh
CFLAGS='-march=native' ./configure --with-dpdk=$RTE_SDK/$RTE_TARGET
make
make install

#檢視大頁記憶體
cat /proc/meminfo
AnonHugePages:     32768 kB
HugePages_Total:       8
HugePages_Free:        4
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB
  1. 啟動ovs:
#start_ovs.sh
  1 #init new ovs database
  2 ovsdb-tool create /usr/local/etc/openvswitch/conf.db ./vswitchd/vswitch.ovsschema
  3 
  4 #start database server
  5 ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
  6     --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
  7     --pidfile --detach --log-file
  8 
  9 #initialize ovs database
 10 ovs-vsctl --no-wait init
 11 
 12 #configure ovs dpdk 
 13 ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true \
 14     other_config:dpdk-lcore=0x2 other_config:dpdk-socket-mem="1024"
 15 
 16 ##start ovs
 17 ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock \
 18     --pidfile --detach
  1. 建立ovs ports:
# creat_ports.sh
  1 #ovs use core 2 for the PMD
  2 ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x4
  3 
  4 #create br0 and vhost ports which use DPDK
  5 ovs-vsctl add-br ovs-br0 -- set bridge ovs-br0 datapath_type=netdev
  6 ovs-vsctl add-port ovs-br0 vhost-user0 -- set Interface vhost-user0 type=dpdkvhostuser
  7 ovs-vsctl add-port ovs-br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser
  8 ovs-vsctl add-port ovs-br0 vhost-user2 -- set Interface vhost-user2 type=dpdkvhostuser
  9 ovs-vsctl add-port ovs-br0 vhost-user3 -- set Interface vhost-user3 type=dpdkvhostuser
 10 
 11 #show ovs-br0 info
 12 ovs-vsctl show
  1. 新增流表
# add_flow.sh
  1 #clear current flows
  2 ovs-ofctl del-flows ovs-br0
  3 
  4 #add bi-directional flow between vhost-user1 and vhost-user2(port 2 and 3)
  5 ovs-ofctl add-flow ovs-br0 \
  6     in_port=2,dl_type=0x800,idle_timeout=0,action=output:3
  7 ovs-ofctl add-flow ovs-br0 \
  8     in_port=3,dl_type=0x800,idle_timeout=0,action=output:2
  9 #add bi-directional flow between vhost-user0 and vhost-user4(port 1 and 4)
 10 ovs-ofctl add-flow ovs-br0 \
 11     in_port=1,dl_type=0x800,idle_timeout=0,action=output:4
 12 ovs-ofctl add-flow ovs-br0 \
 13     in_port=4,dl_type=0x800,idle_timeout=0,action=output:1
 14 
 15 #show current flows
 16 ovs-ofctl dump-flows ovs-br0

可以檢查系統配置如下:

[[email protected] openvswitch-2.8.1]# ovs-vsctl show 
a852baf4-b7ab-44cf-8c73-c9d7031af99d
    Bridge "ovs-br0"
        Port "vhost-user3"
            Interface "vhost-user3"
                type: dpdkvhostuser
        Port "vhost-user1"
            Interface "vhost-user1"
                type: dpdkvhostuser
        Port "ovs-br0"
            Interface "ovs-br0"
                type: internal
        Port "vhost-user0"
            Interface "vhost-user0"
                type: dpdkvhostuser
        Port "vhost-user2"
            Interface "vhost-user2"
                type: dpdkvhostuser

[[email protected] openvswitch-2.8.1]# ovs-ofctl show ovs-br0
 1(vhost-user0): addr:00:00:00:00:00:00
     config:     0
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
 2(vhost-user1): addr:00:00:00:00:00:00
     config:     0
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
 3(vhost-user2): addr:00:00:00:00:00:00
     config:     0
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
 4(vhost-user3): addr:00:00:00:00:00:00
     config:     0
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(ovs-br0): addr:62:07:93:f5:72:48
     config:     PORT_DOWN
     state:      LINK_DOWN
     current:    10MB-FD COPPER
     speed: 10 Mbps now, 0 Mbps max

[[email protected] openvswitch-2.8.1]# ovs-ofctl dump-flows ovs-br0
 cookie=0x0, duration=89113.410s, table=0, n_packets=655640, n_bytes=21468324000, ip,in_port="vhost-user1" actions=output:"vhost-user2"
 cookie=0x0, duration=89113.404s, table=0, n_packets=27460, n_bytes=21133440, ip,in_port="vhost-user2" actions=output:"vhost-user1"
 cookie=0x0, duration=89113.398s, table=0, n_packets=1200940, n_bytes=39358530000, ip,in_port="vhost-user0" actions=output:"vhost-user3"
 cookie=0x0, duration=89113.392s, table=0, n_packets=15560, n_bytes=11562240, ip,in_port="vhost-user3" actions=output:"vhost-user0"

[[email protected] openvswitch-2.8.1]# ovs-ofctl dump-ports ovs-br0
OFPST_PORT reply (xid=0x2): 5 ports
  port  "vhost-user3": rx pkts=15560, bytes=11562240, drop=0, errs=0, frame=?, over=?, crc=?
           tx pkts=27460, bytes=21133440, drop=1173480, errs=?, coll=?
  port  "vhost-user1": rx pkts=1748120, bytes=57248848800, drop=0, errs=0, frame=?, over=?, crc=?
           tx pkts=27460, bytes=21133440, drop=0, errs=?, coll=?
  port  "vhost-user0": rx pkts=1747020, bytes=57248782800, drop=0, errs=0, frame=?, over=?, crc=?
           tx pkts=15560, bytes=11562240, drop=0, errs=?, coll=?
  port  "vhost-user2": rx pkts=27460, bytes=21133440, drop=0, errs=0, frame=?, over=?, crc=?
           tx pkts=15560, bytes=11562240, drop=640080, errs=?, coll=?
  port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
           tx pkts=0, bytes=0, drop=0, errs=0, coll=0

至此ovs就啟動並配置好了,vhost-user backend口已經建立好,相應的流表路由表項也已經新增好,接下來就該部署container了。

建立testpmd container 和 l2fwd container

前提:系統已經安裝了docker,這個過程文件就不再記錄

l2fwd和testpmd都屬於dpdk提供的app,使用同一個container即可。建立container時把之前build的dpdk目錄copy到docker中。

# cd $RTE_SDK/../
# cat Dockerfile
  1 FROM ubuntu:latest
  2 RUN apt update -y
  3 RUN apt-get install -y  numactl
  4 WORKDIR /root/dpdk
  5 COPY dpdk-17.05 /root/dpdk/.
  6 ENV PATH "$PATH:/root/dpdk/x86_64-native-linuxapp-gcc/app/"
# docker build -t dpdk-docker:17.05 .
# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
dpdk-docker                                 17.05               15a8a7206e7c        3 days ago          366.5 MB

建立pktgen docker

同理,把之前編譯好的pktgen對映到container中即可。此外需要注意的是,pktgen依賴libpcap,所以需要在container中安裝一份。使用時還發現執行container提示無法找到共享庫libpcap.so.1, 而安裝libpcap後只有libpcap.so,解決辦法就是做個軟鏈就可以了。
具體的配置步驟如下:

# cd pktgen-3.4.2/..
# cat Dockerfile
  1 FROM ubuntu:latest
  2 RUN apt update -y
  3 RUN apt-get install -y  numactl libpcap-dev
  4 WORKDIR /root/dpdk
  5 COPY dpdk-17.05 /root/dpdk/.
  6 COPY pktgen-3.4.2 /root/pktgen/.
  7 RUN ln -s /root/pktgen/app/x86_64-native-linuxapp-gcc/pktgen /usr/bin/pktgen
  8 RUN ln -s /usr/lib/x86_64-linux-gnu/libpcap.so /usr/lib/x86_64-linux-gnu/libpcap.so.1
  9 ENV PATH "$PATH:/root/dpdk/x86_64-native-linuxapp-gcc/app/"
# docker build -t pktgen-docker .
# docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
pktgen-docker                               latest              371924729d87        23 hours ago        431.7 MB
dpdk-docker                                 17.05               15a8a7206e7c        3 days ago          366.5 M

實驗一

  1. overview
App parameter thread Core Mask
Open vSwitch dpdk-lcore-mask=0x2 daemon 0000 0010
- pmd-cpu-mask=0x4 DPDK PMD 0000 0100
pktgen -c 0x19 GUI& Messages 0001 1001
- –master-lcore 3 DPDK master lcore 0000 1000
- -m “0.0,4.1” DPDK PMD core 0:port 0, core 4:port 1
testpmd -c 0xE0 testpmd DPDK PMD 1110 0000
  1. 啟動pktgen
#首先啟動docker container
[root@nsfocus]# docker run -ti --privileged --name=pktgen-docker \
-v /mnt/huge:/mnt/huge -v /usr/local/var/run/openvswitch:/var/run/openvswitch \ 
pktgen-docker:latest
root@a2603b54d66d:~/pktgen# pktgen -c 0x19 --master-lcore 3 -n 1 --socket-mem 1024,1024 --file-prefix pktgen --no-pci  \
--vdev 'net_virtio_user0,mac=00:00:00:00:00:05,path=/var/run/openvswitch/vhost-user0'  \ 
--vdev 'net_virtio_user1,mac=00:00:00:00:00:01,path=/var/run/openvswitch/vhost-user1' \
-- -T -P -m "0.0,4.1"
  1. 啟動testpmd
[root@nsfocus ~]# docker run -it --privileged --name=dpdk-docker \ 
-v /mnt/huge:/mnt/huge -v /usr/local/var/run/openvswitch:/var/run/openvswitch \
dpdk-docker:17.05
root@bdbe9fabe89a:~/dpdk/examples/l2fwd/build# cd ~/dpdk/x86_64-native-linuxapp-gcc/app/
root@bdbe9fabe89a:~/dpdk/x86_64-native-linuxapp-gcc/app# 
testpmd -c 0xE0 -n 1 --socket-mem 1024,1024 --file-prefix testpmd --no-pci  \
--vdev 'net_virtio_user2,mac=00:00:00:00:00:02,path=/var/run/openvswitch/vhost-user2' \
--vdev 'net_virtio_user3,mac=00:00:00:00:00:03,path=/var/run/openvswitch/vhost-user3' \
-- -i --burst=64 --disable-hw-vlan --txd=2048 --rxd=2048 -a --coremask=0xc0
  1. 發包驗證
    在pktgen端執行:
# 在pktgen中設定速率為10%,更具體的速率設定可以通過tx_cycles設定
# 埠0共傳送100個包,埠1傳送200個
Pktgen:/>set all rate 10
Pktgen:/>set 0 count 100
Pktgen:/>set 1 count 200
Pktgen:/>str

pktgen端:
發包
testpmd端:
轉發包
ovs端:
flows 統計

實驗二

  1. overview
App parameter thread Core Mask
Open vSwitch dpdk-lcore-mask=0x2 daemon 0000 0010
- pmd-cpu-mask=0x4 DPDK PMD 0000 0100
pktgen -c 0x19 GUI& Messages 0001 1001
- –master-lcore 3 DPDK master lcore 0000 1000
- -m “0.0,4.1” DPDK PMD core 0:port 0, core 4:port 1
l2fwd -c 0xE0 l2fwd DPDK PMD 1110 0000

2. 啟動pktgen

#首先啟動docker container
[root@nsfocus]# docker run -ti --privileged --name=pktgen-docker \
-v /mnt/huge:/mnt/huge -v /usr/local/var/run/openvswitch:/var/run/openvswitch \
pktgen-docker:latest
root@a2603b54d66d:~/pktgen# pktgen -c 0x19 --master-lcore 3 -n 1 --socket-mem 1024,1024 --file-prefix pktgen --no-pci \
--vdev 'net_virtio_user0,mac=00:00:00:00:00:05,path=/var/run/openvswitch/vhost-user0' \
--vdev 'net_virtio_user1,mac=00:00:00:00:00:01,path=/var/run/openvswitch/vhost-user1' \
-- -T -P -m "0.0,4.1"
  1. 啟動l2fwd
[root@nsfocus ~]# docker run -it --privileged --name=dpdk-docker  \
-v /mnt/huge:/mnt/huge -v /usr/local/var/run/openvswitch:/var/run/openvswitch \
dpdk-docker:17.05
root@bdbe9fabe89a:~/dpdk/examples/l2fwd/build#./l2fwd -c 0xE0 -n 1 --socket-mem 1024,1024 --file-prefix testpmd --no-pci \
    --vdev 'net_virtio_user2,mac=00:00:00:00:00:02,path=/var/run/openvswitch/vhost-user2' \
    --vdev 'net_virtio_user3,mac=00:00:00:00:00:03,path=/var/run/openvswitch/vhost-user3' \
    -- -p 0x3
  1. 發包驗證
    在pktgen端執行:
# 在pktgen中設定速率為10%,更具體的速率設定可以通過tx_cycles設定
# 埠0共傳送100個包,埠1傳送200個
Pktgen:/>set all rate 10
Pktgen:/>set 0 count 100
Pktgen:/>set 1 count 200
Pktgen:/>str

pktgen端:
發包
l2fwd端:

說明l2fwd已按照我們的預想進行了報文的轉發。

總結

本次實踐主要還是集中在OVS上面的container App的互通以及container內部對dpdk的支援,分別驗證了在container內部執行testpmd和l2fwd來進行報文轉發。其中,dpdk app的執行模式可以為後續cneos平臺server docker化提供一定的技術指導作用。
如果從更系統化的層面來考慮docker結合ovs以及dpdk的使用,更通用的使用場景應該是這樣的:在ovs的南向通過dpdk pmd和硬體平臺上物理nic的PF或VF繫結,高速收發報文;在ovs的北向,通過virtual device和docker container來共享收發報文,進行上層業務的處理。 南北向之間的流量需要配置flow table來指導轉發。流量示意如下圖所示:

1. 流量從物理port流入,到達OVS查詢流表送入到串聯檢測類container1(如NF,IPS)中,container1處理完後再送回流表,再次查詢流表找到物理口傳送出去
2. 流量從物理port流入,到達OVS查詢流表送入到檢測類container2中(如WAF)
3. 考慮到有多個安全container app,流量序列通過containerN,container2; 實際上,container之間的資料互動還有別的實現方式,如docker天然支援容器互聯技術,這塊還有待進一步確定實際方案

參考資料

相關推薦

ovs+dpdk-docker實踐

docker 概念 關於docker的基本概念相關,可以參考官網介紹,介紹的挺全面的。另外這篇文章介紹的也很清晰,並附帶有可以直接上手的例項。 關於container和vm的對比,需要重點關注下,直接放圖如下: 從圖中可以看出兩者的區別包括: 1.

OVS + dpdk 安裝與實驗環境配置

binding exp pidfile *** 掛載 rem 環境變量 rep new ***DPDK datapath的OVS的安裝與實驗環境配置 首先肯定是DPDK的安裝 0:安裝必要的工具 make gcc

OVS+DPDK Datapath 包分類技術

ava eas edit pat 技術 分類 edi dpdk ... // editing... please wait for a java time // editing... please wait for a java time // editing... ple

docker實踐4

停止 info default ash enabled curl port c-s gin 我的docker學習筆記4-守護式容器 $docker run -i -t ubuntu /bin/bash $ctrl-p 或 ctrl-q # 轉到後臺 $docker

docker實踐3

fault docker etc idf pid 修改 選項 service dock 我的docker學習筆記3 $docker run ubuntu echo‘hello world‘ $docker run -i -t ubuntu /bin/bash #ps -

docker 實踐

blank tar .html post clas you docker href 實踐 https://doc.yonyoucloud.com/doc/docker_practice/etcd/etcdctl.htmldocker 實踐

Docker實踐 -- 使用Open vSwitch實現跨主機通信

sha centos queue 基本架構 fan tom name uil str 作為目前最火熱的容器技術,docker在網絡實現和管理方面還存在不足。最開始的docker是依賴於Linux Bridge實現的網絡設置,只能在容器裏創建一個網卡。後來隨著docker/l

[日常] Linux下的docker實踐

alt AS 使用 img 一個 虛擬 名稱 AR 令行 1.Linux 發展出了另一種虛擬化技術:Linux 容器(Linux Containers,縮寫為 LXC) 2.Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離 3.Docker 屬於 Linux

[ovs][dpdk] ovs-dpdk 線程數,收包隊列,core綁定

ovs org int RF conf 線程 PE -cp outer http://docs.openvswitch.org/en/latest/intro/install/dpdk/?highlight=dpdk 綁定2,4,6, 8核 [root@vrout

掘金 AMA:我是《開發者必備的 Docker 實踐指南》小冊作者--有明,你有什麼問題要問我?

掘金 AMA(ask me anything) 是掘金沸點的一個話題,掘金團隊會邀請一位技術大牛通過「你問我答」的形式回答你的問題,讓大家在技術、工作、生活方面有所成長。 AMA 嘉賓 掘金 AMA 第十一期嘉賓是《沒什麼難的 Docker》書籍、《開發者必備的 Docker

一份不能錯過的 Docker 實踐指南

如果你從來沒聽說過 Docker,我想你也不敢拍拍胸脯說自己是技術圈的人吧。不得不說,這個在 2013 年才釋出首個公開版本的軟體,僅僅用了幾年的時間,就已經火遍大江南北,甚至已經形成了自己的生態圈。之所以 Docker 能夠在這麼短的時間內快速成為備受關注的程式部署方案,是因為其以顛覆性的方式改進了分散式部

一下科技關於docker實踐分享摘錄

公司介紹 炫一下(北京)科技有限公司2011年8月成立於北京,是移動短視訊娛樂分享應用和移動視訊技術服務提供商。旗下擁有“秒拍”、“小咖秀”、“一直播”三款移動視訊產品 [1-2] 。 2016年11月21日,旗下擁有秒拍、小咖秀、一直播的一下科技宣佈完成5億美元E輪融資,該輪融資也創下了國內移動視訊

docker實踐錄2:使用dockerhub中轉站下載cuda安裝包

最近,演算法小組使用最新版本的tensorflow,需要用到cuda9,去年安裝的是cuda8,已經不合適了,於是要在伺服器上升級。由於是伺服器,我不敢讓其它人做,我就自己來升級。去年因為有同事安裝cuda把python搞壞,我修復半天不行,ubunut一層一層

Docker實踐(三)容器

Docker中,容器是獨立執行的一個或一組應用,以及應用執行的環境;對應傳統的虛擬化,虛擬機器可以理解為模擬作業系統和執行在上面的應用。 啟動容器 啟動容器一般有兩種方式,一種是新建容器並啟動,一種是將終止狀態的容器重新啟動,Docker容器非常的輕量級,能夠很好的支援使

docker 實踐(一)安裝

一、Docker理論關於Docker理論特別多,一句話就是傳統虛擬機器是完全模擬物理機核心空+使用者空間;Docker是隻模擬使用者空間。 二、Docker三個概念映象(Image)、容器(Container)、倉庫(Repository) 1.1.映象映象就像是一個目標可以用來建立docker容器,類似

docker 實踐(二)映象

一、獲取映象 1.1.從倉庫(Docker hub)獲取一個映象 # docker pull busybox Using default tag: latest   #預設標籤為最新 latest: P

docker 實踐(三)dockerfile 說明

一、dockfile 說明 docker 執行一個自定義的image時,就需要自己來定義,這時候就需要dockfile了。 二、docker commit生成新映象 2.1.執行容器 # docker run -it centos /bin/bas

docker 實踐(五)公共倉庫及私有倉庫

一、docker倉庫說明 Docker registries 可以上傳和下載image,有共有和私有兩種。共有就是Docker Hub,私有就是自建一個倉庫使用。 二、docker hub使用 2.1.註冊使用者 註冊地址:https://hub.docker.com 2.2.登陸上傳映

docker 實踐(六)docker 資源隔離及限制

一、docker 底層實現 docker 通過namespace實現資源隔離;通過cgroup實現資源限額 二、namespace說明 2.1.概述 namespace使得容器像一臺獨立的計算機,namespace實現容器間資源隔離。linux六中namespace mnt namespac

Docker實踐(四)Dockerfile

什麼是Dockerfile? 使用Dockerfile,可以方便的建立自定義映象。 基本結構 由一行行命令組成,支援#註釋。Dockerfile一般分為四個部分: 基礎映象資訊 維護者資訊 映象操作指令 容器啟動指令 如下面是一個基礎的Dockerfile