導航:首頁 > 網路設置 > Lxc容器設置宿主機網路

Lxc容器設置宿主機網路

發布時間:2022-09-01 01:45:10

『壹』 docker容器與虛擬機有什麼區別

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架包括系統。
在docker的網站上提到了docker的典型場景:
Automating the packaging and deployment of applications
Creation of lightweight, private PAAS environments
Automated testing and continuous integration/deployment
Deploying and scaling web apps, databases and backend services
由於其基於LXC的輕量級虛擬化的特點,docker相比KVM之類最明顯的特點就是啟動快,資源佔用小。因此對於構建隔離的標准化的運行環境,輕量級的PaaS(如dokku), 構建自動化測試和持續集成環境,以及一切可以橫向擴展的應用(尤其是需要快速啟停來應對峰谷的web應用)。

『貳』 如何在Ubuntu上創建及管理LXC容器

將LXC安裝到Ubuntu上
想在Ubuntu上使用LXC,就要安裝LXC用戶空間工具,如下所示。
$ sudo apt-get install lxc

安裝完畢之後,運行lxc-checkconifg工具,檢查當前Linux內核支持LXC的情況。要是一切都已被啟用,內核對LXC的支持已准備就緒。
$ lxc-checkconfig

安裝LXC工具後,你會發現,LXC的默認網橋介面(lxcbr0)已自動創建(已在/etc/lxc/default.conf中加以配置)。

創建LXC容器後,窗口的介面就會自動連接到該網橋,那樣容器就能與外界進行聯系了。
創建LXC容器
為了能夠創建某個特定目標環境(比如Debian Wheezy 64位)的LXC容器,你就需要一個相應的LXC模板。幸運的是,Ubuntu上的LXC用戶空間工具隨帶一系列預先准備好的LXC模板。你可以在/usr/share/lxc/templates目錄下找到可用的LXC模板。
$ ls /usr/share/lxc/templates

LXC模板其實就是一段腳本而已,用來為某個特定的Linux環境創建容器。你在創建LXC容器時,需要用到這其中一個模板。
比如說,為了創建Ubuntu容器,使用下面這個命令行:
$ sudo lxc-create -n -t ubuntu

默認情況下,它會創建與本地主機同一版本號和同一架構的最小Ubuntu安裝系統,這種情況下是Saucy Salamander(13.10)64位。
如果你希望,可以創建任何一種版本的Ubuntu容器,只要傳遞release參數。比如說,想創建Ubuntu 14.10容器:
$ sudo lxc-create -n -t ubuntu -- --release utopic

它會下載並驗證目標容器環境需要的所有程序包。整個過程可能需要幾分鍾或更長時間,具體取決於容器類型。所以請耐心點。

經過一系列的程序包下載和驗證後,LXC容器映像最終創建完畢,你會看到默認的登錄資料可供使用。容器存儲在/var/lib/lxc/<container-name>,根文件系統則位於/var/lib/lxc/<container-name>/rootfs。
LXC創建過程中下載的所有程序包則緩存在/var/cache/lxc裡面,那樣使用同樣的LXC模板創建額外的容器就不用花時間了。
現在不妨看一下主機上的LXC容器列表:
$ sudo lxc-ls –fancy

NAME STATE IPV4 IPV6 AUTOSTART
------------------------------------
test-lxc STOPPED - - NO
想啟動一個容器,請使用下面這個命令。「-d」選項將容器作為守護程序來啟動。要是沒有這個選項,你在啟動容器後,會直接被連接到控制台。
$ sudo lxc-start -n -d

啟動容器後,不妨再次檢查容器狀態:
$ sudo lxc-ls –fancy

NAME STATE IPV4 IPV6 AUTOSTART
-----------------------------------------
lxc RUNNING 10.0.3.55 - NO
你會看到,容器處於「RUNNING」(運行)狀態,已被賦予了一個IP地址。
你還可以證實,容器的介面(比如vethJ06SFL)自動連接到LXC的內部網橋(lxcbr0),如下所示。
$ brctl show lxcbr0

管理LXC容器
既然我們已知道了如何創建及啟動LXC容器,現在不妨看看我們可以如何處理運行中的容器。
首先,我們想要訪問容器的控制台。為此,鍵入這個命令:
$ sudo lxc-console -n

鍵入<Ctrl+a q>組合鍵,退出控制台。
想停止和銷毀容器:
$ sudo lxc-stop -n
$ sudo lxc-destroy -n

想把現有容器克隆成另一個容器,使用這些命令:
$ sudo lxc-stop -n
$ sudo lxc-clone -o -n

故障排查
如果你遇到了LXC方面的錯誤,下面是故障排查方面的幾個要點。
1. 你無法創建LXC容器,出現下列錯誤。
$ sudo lxc-create -n test-lxc -t ubuntu
lxc-create: symbol lookup error: /usr/lib/x86_64-linux-gnu/liblxc.so.1: undefined symbol: cgmanager_get_pid_cgroup_abs_sync

這意味著你運行最新的LXC,卻使用較舊的libcgmanager(libcg管理器)。想解決這個問題,你就需要更新libcg管理器。
$ sudo apt-get install libcgmanager0

『叄』 如何在Ubuntu系統下安裝docker

Docker 是 dotCloud 最近幾個月剛宣布的開源引擎,旨在提供一種應用程序的自動化部署解決方案,簡單的說就是,在 Linux 系統上迅速創建一個容器(類似虛擬機)並在容器上部署和運行應用程序,並通過配置文件可以輕松實現應用程序的自動化安裝、部署和升級,非常方便。因為使用了容器,所以可以很方便的把生產環境和開發環境分開,互不影響,這是 docker 最普遍的一個玩法。更多的玩法還有大規模 web 應用、資料庫部署、持續部署、集群、測試環境、面向服務的雲計算、虛擬桌面 VDI 等等。
注意:由於Docker需要在Linux Kernel 3.8及以上才可以很好的工作【本人在ubuntu12.04 lts 內核3.2也正常安裝】,官方更是推薦Ubuntu系統,這里有兩種選擇:Ubuntu 12.04 LTS或最新的Ubuntu 13.10 而本文比較喜歡傾向LTS,幸好有辦法解決Kernel版本問題。
1、更新Ubuntu內核
使用如下命令行更新內核至3.8.0-25
sudo apt-get install linux-image-3.8.0-25-generic
sudo apt-get install linux-headers-3.8.0-25-generic
完成後重啟電腦,通過命令 「uname -r」 來查看內核是否成功更新。
2、安裝lxc-docker
root@ubuntu: sudo apt-get install software-properties-common #增加 add-apt-repository 命令
root@ubuntu: sudo apt-get install python-software-properties
root@ubuntu: sudo add-apt-repository ppa:dotcloud/lxc-docker #增加一個ppa源,如:ppa:user/ppa-name
root@ubuntu: sudo apt-get update #更新系統
root@ubuntu: sudo apt-get install lxc-docker
3、測試doctor是否安裝成功
root@ubuntu:~# docker #出現如下信息表示docker安裝成功
Usage: docker [OPTIONS] COMMAND [arg...]
-H=[tcp://127.0.0.1:4243]: tcp://host:port to bind/connect to or unix://path/to/socket touse

A self-sufficient runtime for linux containers.
...

4、Hello World
4.1、下載官方ubuntu image
linjiqin@ubuntu:~$ sudo docker pull ubuntu #pull命令需要到國外的鏡像倉庫,拉取鏡像,因為GFW的關系,拉取失敗的可能性很大
4.2、運行hello world
linjiqin@ubuntu:~$ sudo docker run ubuntu /bin/echo hello world
5、docker常用命令
5.1、docker三種命令運行模式
docker有三種命令運行的方式:短暫方式、交互方式、daemon方式。
a、短暫方式:就是剛剛的那個」hello world」,命令執行完後,container就終止了,不過並沒有消失,可以用 sudo docker ps -a 看一下所有的container,第一個就是剛剛執行過的container,可以再次執行一遍:
linjiqin@ubuntu:~$ sudo docker start container_id
不過這次看不到」hello world」了,只能看到ID,用logs命令才能看得到:
linjiqin@ubuntu:~$ sudo docker logs container_id
可以看到兩個」hello world」,因為這個container運行了兩次。
b、交互方式
linjiqin@ubuntu:~$ sudo docker run -i -t image_name /bin/bash #image_name為docker鏡像名稱
c、daemon方式
即讓軟體作為長時間服務運行,這就是SAAS啊!
例如,一個無限循環列印的腳本(替換為memcached、apache等,操作方法仍然不變!):
linjiqin@ubuntu:~$ CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done")
在container外面查看它的輸出
linjiqin@ubuntu:~$ sudo docker logs $CONTAINER_ID
或者連接上容器實時查看
linjiqin@ubuntu:~$ sudo docker attach $CONTAINER_ID
終止容器
linjiqin@ubuntu:~$ sudo docker stop $CONTAINER_ID
linjiqin@ubuntu:~$ sudo docker ps #看一下,已經沒了
5.2、docker ps命令
linjiqin@ubuntu:~$ sudo docker ps #列出當前所有正在運行的container
linjiqin@ubuntu:~$ sudo docker ps -l #列出最近一次啟動的,且正在運行的container
linjiqin@ubuntu:~$ sudo docker ps -a #列出所有的container
注意:
a、其他用法請參考 sudo docker ps -h
b、還有一種方式可以讓程序在daemon模式下運行,就是在Dockerfile里設置USER為daemon
5.3、docker export命令
linjiqin@ubuntu:~$ container_id=`docker run -d <image_name> ls`
linjiqin@ubuntu:~$ docker export $container_id > image.tgz
5.4、docker import命令
linjiqin@ubuntu:~$ cat image.tgz | sudo docker import - simple_dev #simple_dev為自定義的鏡像名稱
5.5、docker port命令
linjiqin@ubuntu:~$ docker run -p 80:8080 <image> <cmd> #映射容器的8080埠到宿主機的80埠
5.6、刪除容器
5.6.1、刪除所有容器
linjiqin@ubuntu:~$ sudo docker rm `sudo docker ps -a -q`
5.6.1、刪除具體某個容器
linjiqin@ubuntu:~$ sudo docker rm $CONTAINER_ID
5.7、docker命令快速參考
linjiqin@ubuntu:~$ sudo docker images #查看本地鏡像
linjiqin@ubuntu:~$ sudo docker attach $CONTAINER_ID #啟動一個已存在的docker實例
linjiqin@ubuntu:~$ sudo docker stop $CONTAINER_ID #停止docker實例
linjiqin@ubuntu:~$ sudo docker logs $CONTAINER_ID #查看docker實例運行日誌,確保正常運行
linjiqin@ubuntu:~$ sudo docker inspect $CONTAINER_ID #查看container的實例屬性,比如ip等等

sudo docker run -t -i -v /home/linjiqin/dev/docker:/home/mycontainer:rw -p 8000:8000 mydocker /bin/bash
寫在前面,運行我們的鏡像的命令使用上面的為參考,這樣會掛載本地文件夾,並且會映射container的8000埠到宿主機的8000埠
/home/linjiqin/dev/docker為要掛載的本地文件夾,需提前創建
/home/mycontainer為docker映射路徑,執行上面命令會幫我們創建。

『肆』 docker 安裝 ubuntu 怎麼

Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業余項目。它基於 Google公司推出的
Go 語言實現。 項目後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub上進行維護。
Docker 自開源後受到廣泛的關注和討論,以至於 dotCloud 公司後來都改名為 Docker Inc。RedHat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。
Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。
在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。

安裝docker

docker安裝方法一

ubuntu14.04以上的版本都是自帶docker安裝包的;所以可以直接安裝;但是這個一般不是最先版本
sudo apt-get update
sudo apt-get install docker.io

docker安裝方法二;安裝最新版本
sudo apt-get update
curl -s https://get.docker.io/ubuntu/ | sudo sh
這個方法啟動docker若出現下面錯誤;(這個我沒遇到)
FATA[0000] Error loading docker apparmor profile: fork/exec /sbin/apparmor_parser: no such file or directory ()
別擔心,請安裝apparmor軟體即可
sudo apt-get install apparmor

用戶組和配置文件修改
把當前用戶加入到docker用戶組中
sudo usermod -a -G docker $USER
添加配置文件
sudo vim /etc/default/docker
在配置文件中添加或修改
DOCKER="/usr/bin/docker"
重啟docker
sudo service docker restart #重啟

安裝完成之後可以測試下面幾個命令
查看版本
docker -v

顯示如下:

這就表明你安裝成功了
查看狀態:
sudo service docker status

顯示如下:

其他狀態命令:
sudo service docker start #啟動
sudo service docker stop #關閉
sudo service docker restart #重啟
查看鏡像:此時應該沒有鏡像
docker images

顯示如下:

安裝第一個鏡像ubuntu
下載docker 鏡像,需要幾分鍾。
sudo docker pull ubuntu
啟動容器,並且進入到Ubuntu容器的bash命令
sudo docker run -i -t ubuntu /bin/bash
輸出hello world

下載時的現象:

啟動時的現象:其實相當於啟動了一個虛擬機;

輸出hello world:

ps命令:

Docker常用命令速查
# 下載一個ubuntu鏡像
sudo docker pull ubuntu
# 使用ubuntu運行一個交互性的shell,
# 分配一個偽終端,附帶stdin和stdout(輸入/輸出流)
# 如果你想退出分離出來的偽終端,
# 可以使用CTRL -p+CTRL -q --就像先按CTRL -p 然後CTRL -q
sudo docker run -i -t ubuntu /bin/bash
#docker ps命令
sudo docker ps #列出當前所有正在運行的container
sudo docker ps -l #列出最近一次啟動的,且正在運行的container
sudo docker ps -a #列出所有的container
#port命令
docker run -p 80:8080 <image> <cmd> #映射容器的8080埠到宿主機的80埠
#刪除容器命令
sudo docker rm `sudo docker ps -a -q`#刪除所有容器
sudo docker rm $CONTAINER_ID#刪除容器id為CONTAINER_ID的容器
#其他命令快速參考:
sudo docker images #查看本地鏡像
sudo docker attach $CONTAINER_ID #啟動一個已存在的docker實例
sudo docker stop $CONTAINER_ID #停止docker實例
sudo docker logs $CONTAINER_ID #查看docker實例運行日誌,確保正常運行
sudo docker inspect $CONTAINER_ID #查看container的實例屬性,比如ip等等

sudo docker run -t -i -v /home/linjiqin/dev/docker:/home/mycontainer:rw -p 8000:8000 mydocker /bin/bash

寫在前面,運行我們的鏡像的命令使用上面的為參考,這樣會掛載本地文件夾,並且會映射container的8000埠到宿主機的8000埠
/home/linjiqin/dev/docker為要掛載的本地文件夾,需提前創建
/home/mycontainer為docker映射路徑,執行上面命令會幫我們創建

『伍』 如何理解 LXC 與 Docker 之間的主要區別

兩者的概述
容器技術獨立運行並且從主機系統上封裝應用程序工作量。把容器想像成可以安裝和運行應用程序的主機操作系統裡面的操作系統,從實用目的來講,它就像一個虛擬機。

LXC項目給不同配置和用戶空間應用提供最小的容器操作樣本來管理容器生命周期, LXC項目的這個特性和Linux內核使模仿機制能夠正常啟用。

便攜性
容器技術將應用從主機操作系統上解耦下來,摘錄該程序並且使之在任意支持LXC的系統上都實現輕便化。低調的說法就是:非常好用。用戶在這樣一個原始和最小庫的Linux操作系統上可以在容器里運行任何程序(就像是在容器里運行LAMP堆棧)。

因為應用程序和工作量是相對獨立的,所以用戶可以運行多版本的語言,比如PHP,Python,Ruby,Apache,這些語言都可以共存,隱藏在容器里。實現雲計算,就好比是這些例子和工作量都可以靈活的被移動到別的系統,復制,以及快速配置。

難道虛擬技術就做不到嗎?
不不不,虛擬技術也可以做到,但是會有一定程度的性能損失,靈活度也會下降。容器技術不是模仿硬體層次,而是在Linux內核里使用cgroup和namespaces來打造輕便的、將近裸機速度的虛擬技術操作系統環境。因為不是虛擬化存儲,所以容器技術不會管底層存儲或者文件系統,而是你放哪裡,它操作哪裡。

這從根本上改變了我們如何虛擬化工作負載和應用程序,因為容器速度比硬體虛擬化技術更快,更加便捷,彈性擴容的更加高效,只是它的工作負載要求操作系統,而不是Linux或特定的Linux內核版本。

那VMWare就這樣玩完了?
沒那麼快!虛擬技術相對成熟,又有廣泛的工具,還有生態系統來支持它在不同環境下的配置。至於工作負載,它要求非Linux操作系統,或者只能使用特定的核心虛擬化技術。

LXC
LXC起源於cgroup和namespaces在Linux內核方面的發展,它支持輕便的虛擬技術操作系統環境(容器技術),Daniel Lezcano和Serge Hallyn做了一些它的早期工作,這個可以追溯到2009年在IBM的時候。

LXC系統提供工具來管理容器,先進的網路和存儲支持,還有最小容器操作系統模板的廣泛選擇。它目前由一個兩人的團隊領導:來自Ubuntu的Stephane Graber和Serge Hallyn。LXC是由Ubuntu支持的。

如何區分他們
生產Docker的目的是為了盡可能減少容器中運營的程序,減少到只運營單個程序,並且通過Docker來管理這個程序。

有了Docker,可以從底層應用程序通過Docker來配置,網路,存儲和編排。

LXC用正常操作系統環境迴避那個問題,並且因此可以快速兼容所有應用程序和工具,以及任意管理和編制層次,來替代虛擬機。

除此之外,Docker使用層次,禁用存儲持久性。LXC支持AUFS層次和覆蓋,對COW克隆和用brtfs、ZFS、LVM Thin快照廣泛支持,並且將選擇留給用戶。LXC容器技術里的分散存儲是綁定安裝的,來為用戶達到主機或者另一個容器。

Docker和LXC都設置了一個默認的NAT網路。另外,Docker設置一個埠轉發到主機上,就會有一個-p標記,比如「-p80:80」就是80從主機轉發到容器。有NAT,本地主機就可以直接通過IP訪問容器,外部服務需要的時候可以通過IPtable規則來簡單完成,當外部服務被消耗的時候,只需要埠轉發就可以。至於為什麼需要這么做,原因目前還不是很明確。

要把事項復合起來,Docker只給了很少的IP和主機文件控制權,所以不能給容器設置靜態IP,這對於IP的分配任務來說有點讓人疑惑。我們需要使用「--Links」標記來連接容器,這個容器中要在被連接的容器中加一個入口在/etc/主機上。

有了LXC,分配靜態IP,動態IP,使用多網路設備就簡單多了,可以使用/etc/hosts文件,基本上使用Linux網路全棧是沒有限制的。您希望在主機上連接容器嗎?用戶使用GRE,L2TPV3或者VXLAN來快速設置層次,或者是任意的在使用的網路技術。

LXC容器技術可以無縫運行虛擬機運行的一切。

Docker
Docker是dotCloud也就是現在的Docker公司在2013年3月發布的,一開始是基於LXC項目來創建單個應用程序容器。Docker現在已經開發了他們自己的直接使用核心namespaces和cgroup的工具:libcontainer。

分層容器
Docker最開始是基於LXC對Aufs的支持來建立分層容器,因為Aufs可能無法被合並到核心中,所以現在對Brtfs、設備映射和覆蓋也添加支持,
Docker容器技術是由基底鏡像構成,當提交變成Docker鏡像的時候會再加上一個分層面板。當運行一個鏡像的時候,它的復本就作為容器被啟動了,在提交之前,它的任何數據都只是暫時的。每一個提交都是一個獨立的鏡像,所以可以從鏡像開始。

我們在《如何用LXC覆蓋》里有一個指導說明,它給用戶描述了分層結構是如何工作的。有了像Aufs或者覆蓋(他們在實施上、性能上有區別,而且支持一定數量的低一點的層次)這樣的文件系統的聯合,較低一點的層次是只讀的,而較高一點的層次是在運行的時候是可讀可寫的。在容器內容中通常是基底操作系統,但是也不是很必要,而上層的圖層面板則是由你來修改。

雖然圖層面板的想法聽起來很不錯,但是分層文件系統在技術上仍然是不成熟的,在使用圖層面板的時候,還有有一個固有的復雜性和性能的損失。《陷入圖層面板》是一個真實的冒險實例,大家不妨看看。

單個應用程序容器
Docker將容器技術限制到只能運行單個進程。Docker的底層鏡像操作系統模版不是為運行多個應用程序,進程設計,也不是為像init,cron,syslog,ssh等服務而設計。

我們來看早期的東西,它介紹了日復一日的用戶場景有一定的復雜性。因為目前的架構,應用程序和服務是為正常的多程序操作系統環境設計的,所以需要去尋找一種以Docker的方式來工作或使用工具來支持Docker。

拿一個簡單的應用程序舉個例子,比如WordPress。你可能需要建立3個容器來互相消耗服務。PHP容器,Nginx容器和MySQL容器加上2個分別用來放MysqlDB和WordPress文件持久性數據的容器。然後通過適當的許可權將WordPress文件安裝成PHP-FPM和Nginx兩種語言都可用,然後為了把東西弄得更加讓人興奮,找出一種能夠讓容器在本地網路上可以互相交流的方法,不需要對網路不定時的控制,也不需要Docker後台程序設置IP!但是我們還沒有計算WordPress賬戶管理的cron和Email。哎!

為了在Docker里運行多個程序,你需要shell 腳本,或者是一個分開的程序管理,比如runit或者管理器。但是Docker生態系統會將之視為「反模式「,而且Docker的整個架構是建立在運行單個程序的容器上的。

代碼庫
Docker為用戶提供公共或者個人push和pull鏡像的資料庫。這個跟Flockport app Store為用戶使用容器做好准備有點相似。這樣做,對用戶來說,分享和分布應用程序就很簡單了。

Dockerfile
Dockerfile是一個告訴Docker如何從鏡像用特定的應用程序來創建容器的腳本。跟使用特定的安裝好的應用程序通過bash腳本來創建一個LXC容器相似。

跟LXC拉開距離
LXC的特點需要通過Docker團隊來重載實現,使之在Docker中可用,比如LXC現在支持讓非根用戶創建和配置容器的未經授權容器,LXC現在還致力於實時遷移和多主機管理。這些對容器來說都是很大的進步,也為更好的安全性,多租戶工作量以及虛擬平價鋪平了道路。
Docker還不支持這些。隨著最近的libcontainer聲明,推測兩者間的差距還將增大。

運行容器的方法沒有對錯之分,容器怎麼用主要取決於用戶,docker方法是獨特的,而且還將在每個階段自定義途徑成為必須途徑,並以此來找到Docker的方法從安裝和運行應用程序來完成任務,完成彈性擴容。

『陸』 如何理解LXC與Docker之間的主要區別

Docker不是lxc的一個替代方案。「lxc」是指linux內核(尤指命名空間以及Cgroup)的一個特性,它允許其他一些沙盒進程運行在一塊相對獨立的空間,並且能夠方便的控制他們的資源調度。而基於底層的內核特性的基礎上,Docker在上層構建了一個更高層次的具備多個強大功能的工具集:可移植的跨機器部署。Docker定義了一個將應用打包的規范,而它的所有依賴都被封裝到了一個簡單對象里,它可以被傳輸到任意一台能運行Docker的機器,並且在這里啟動Docker的實例之後,它能夠確保承載應用的執行環境將會與之前所定義的完全一致。Lxc實現了進程級的沙盒封裝,它是可移植部署的一個重要前提,但是要想實現可移植部署,僅僅是這樣可還不夠。如果你發送給我一份安裝到一個自定義LXC配置下的應用副本,那麼幾乎可以肯定的是,它在我的機器上運行的結果不會跟你的完全一樣,因為它綁定了你機器的一些特殊配置:網路,存儲,日誌,Linux發行版本等等。Docker為這些機器的特定配置定義了一個抽象層,所以它使得這些相同的Docker容器能夠一成不變的運行在多個不同的主機上,甚至帶上各種不同的配置。以應用為中心。相對於機器而言,Docker被用於優化應用的部署過程。這可以從它的API,UI,設計理念還有文檔里得到體現。反之,lxc的輔助腳本專注在把容器作為一個輕量級的機器使用——基本上就是一堆啟動更快並且內存需求更小的伺服器。我們認為容器技術的內容遠遠不止這些。自動構建。Docker為開發人員引入了一個可以用來把他們的源代碼自動打包到容器里的工具,並且他們能夠對於應用的依賴,構建工具,打包服務等有著完全的自主掌控能力。他們能夠自由的使用make,maven,chef,puppet,salt,debian包,rpm包,源碼包,或者任意以上的結合,而無需關心機器本身的配置。版本化。Docker引入了一個類似git的特性來完成一個容器的連續版本追蹤,版本之間的差異diff,新的版本的提交,回滾等。歷史記錄信息里也包含了容器的用戶信息以及他是如何構建它的,因此生產環境的伺服器你都有充足的手段去一步步的定位到最上游的開發人員。Docker也實現了一個增量上傳和下載功能,類似於gitpull,所以更換到新版本的容器只需要傳輸增量部分就行。組件的重用。任意容器都能用作「基礎鏡像」來創建更特定的組件。這可以手工完成也可以做成自動構建的一部分。例如,你可以准備一個理想的python環境,並且把它用作10個不同的應用的基礎鏡像。你所定義的標准postgresql設置可以被將來你手上的所有項目重用。諸如此類。共享。Docker有權訪問一個公共的注冊中心(/)而這里有數以千計的業界人士上傳各種各樣有價值的容器:任一從redis,couchdb,postgres到ircbouncers再到rails應用伺服器,Hadoop甚至是多個發行版本的基礎鏡像。該注冊中心也包含了一個官方的「標准庫」,這里提供了一些由Docker官方團隊維護的實用容器。注冊中心本身也是開源的,所以任何人都能部署他們自己的私有注冊中心來存儲和下發私有容器,例如用於內網伺服器的部署。工具生態圈。Docker定義了一個API來自動化和個性化的創建和部署容器。也因此催生了眾多的工具集成到Docker,為之提供一些擴展特性。類PaaS的部署(Dokku,Deis,Flynn),多節點編排(maestro,salt,mesos,openstacknova),管理看板(docker-ui,openstackhorizon,shipyard),配置管理(chef,puppet),持續集成(jenkins,strider,travis)等等。Docker正在迅速的建立以它本身為標準的基於容器的工具生態圈。

『柒』 docker run 和網路有關嗎

在Docker中,run應該是用戶使用最多的命令了,很多讀者反饋不是很明白run命令的用法,而且相關的書籍、中文資料中對run命令的描述也不是非常完整,所以DockerOne組織翻譯了Docker官方的文檔,以饗讀者。注意,本文基於最新的Docker 1.4文檔翻譯。

Docker會在隔離的容器中運行進程。當運行 docker run命令時,Docker會啟動一個進程,並為這個進程分配其獨占的文件系統、網路資源和以此進程為根進程的進程組。在容器啟動時,鏡像可能已經定義了要運行的二進制文件、暴露的網路埠等,但是用戶可以通過docker run命令重新定義(譯者註:docker run可以控制一個容器運行時的行為,它可以覆蓋docker build在構建鏡像時的一些默認配置),這也是為什麼run命令相比於其它命令有如此多的參數的原因。

命令格式
最基本的docker run命令的格式如下:
$ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

如果需要查看[OPTIONS]的詳細使用說明,請參考Docker關於OPTIONS的章節。這里僅簡要介紹Run所使用到的參數。OPTIONS總起來說可以分為兩類:

設置運行方式:
決定容器的運行方式,前台執行還是後台執行;
設置containerID;
設置網路參數;
設置容器的CPU和內存參數;
- 設置許可權和LXC參數;
設置鏡像的默認資源,也就是說用戶可以使用該命令來覆蓋在鏡像構建時的一些默認配置。

docker run [OPTIONS]可以讓用戶完全控制容器的生命周期,並允許用戶覆蓋執行docker build時所設定的參數,甚至也可以修改本身由Docker所控制的內核級參數。

Operator exclusive options
當執行docker run時可以設置以下參數:

Detached vs Foreground
Detached (-d)
- Foreground
Container Identification
Name (--name)
- PID Equivalent
IPC Setting
Network Settings
Clean Up (--rm)
Runtime Constraints on CPU and Memory
Runtime Privilege, Linux Capabilities, and LXC Configuration

接下來我們依次進行介紹。

Detached vs foreground

當我們啟動一個容器時,首先需要確定這個容器是運行在前台還是運行在後台。
-d=false: Detached mode: Run container in the background, print new container id

Detached (-d)

如果在docker run後面追加-d=true或者-d,那麼容器將會運行在後台模式。此時所有I/O數據只能通過網路資源或者共享卷組來進行交互。因為容器不再監聽你執行docker run的這個終端命令行窗口。但你可以通過執行docker attach來重新附著到該容器的回話中。需要注意的是,容器運行在後台模式下,是不能使用--rm選項的。

Foregroud
在前台模式下(不指定-d參數即可),Docker會在容器中啟動進程,同時將當前的命令行窗口附著到容器的標准輸入、標准輸出和標准錯誤中。也就是說容器中所有的輸出都可以在當前窗口中看到。甚至它都可以虛擬出一個TTY窗口,來執行信號中斷。這一切都是可以配置的:
-a=[] : Attach to `STDIN`, `STDOUT` and/or `STDERR`
-t=false : Allocate a pseudo-tty
--sig-proxy=true: Proxify all received signal to the process (non-TTY mode only)
-i=false : Keep STDIN open even if not attached

如果在執行run命令時沒有指定-a參數,那麼Docker默認會掛載所有標准數據流,包括輸入輸出和錯誤,你可以單獨指定掛載哪個標准流。
$ sudo docker run -a stdin -a stdout -i -t ubuntu /bin/bash

如果要進行互動式操作(例如Shell腳本),那我們必須使用-i -t參數同容器進行數據交互。但是當通過管道同容器進行交互時,就不需要使用-t參數,例如下面的命令:
echo test | docker run -i busybox cat

容器識別

Name(--name)

可以通過三種方式為容器命名:

1. 使用UUID長命名("")
2. 使用UUID短命令("f78375b1c487")
3. 使用Name("evil_ptolemy")

這個UUID標示是由Docker deamon生成的。如果你在執行docker run時沒有指定--name,那麼deamon會自動生成一個隨機字元串UUID。但是對於一個容器來說有個name會非常方便,當你需要連接其它容器時或者類似需要區分其它容器時,使用容器名稱可以簡化操作。無論容器運行在前台或者後台,這個名字都是有效的。

PID equivalent

如果在使用Docker時有自動化的需求,你可以將containerID輸出到指定的文件中(PIDfile),類似於某些應用程序將自身ID輸出到文件中,方便後續腳本操作。
--cidfile="": Write the container ID to the file

Image[:tag]

當一個鏡像的名稱不足以分辨這個鏡像所代表的含義時,你可以通過tag將版本信息添加到run命令中,以執行特定版本的鏡像。例如: docker run ubuntu:14.04

IPC Settings

默認情況下,所有容器都開啟了IPC命名空間。
--ipc="" : Set the IPC mode for the container,
'container:<name|id>': reuses another container's IPC namespace
'host': use the host's IPC namespace inside the container

IPC(POSIX/SysV IPC)命名空間提供了相互隔離的命名共享內存、信號燈變數和消息隊列。

共享內存可以提高進程數據的交互速度。共享內存一般用在資料庫和高性能應用(C/OpenMPI、C++/using boost libraries)上或者金融服務上。如果需要容器中部署上述類型的應用,那麼就應該在多個容器直接使用共享內存了。

Network settings

默認情況下,所有的容器都開啟了網路介面,同時可以接受任何外部的數據請求。
--dns=[] : Set custom dns servers for the container
--net="bridge" : Set the Network mode for the container
'bridge': creates a new network stack for the container on the docker bridge
'none': no networking for this container
'container:<name|id>': reuses another container network stack
'host': use the host network stack inside the container
--add-host="" : Add a line to /etc/hosts (host:IP)
--mac-address="" : Sets the container's Ethernet device's MAC address

你可以通過docker run --net none來關閉網路介面,此時將關閉所有網路數據的輸入輸出,你只能通過STDIN、STDOUT或者files來完成I/O操作。默認情況下,容器使用主機的DNS設置,你也可以通過--dns來覆蓋容器內的DNS設置。同時Docker為容器默認生成一個MAC地址,你可以通過--mac-address 12:34:56:78:9a:bc來設置你自己的MAC地址。

Docker支持的網路模式有:

none。關閉容器內的網路連接
bridge。通過veth介面來連接容器,默認配置。
host。允許容器使用host的網路堆棧信息。 注意:這種方式將允許容器訪問host中類似D-BUS之類的系統服務,所以認為是不安全的。
container。使用另外一個容器的網路堆棧信息。
None模式

將網路模式設置為none時,這個容器將不允許訪問任何外部router。這個容器內部只會有一個loopback介面,而且不存在任何可以訪問外部網路的router。

Bridge模式

Docker默認會將容器設置為bridge模式。此時在主機上面將會存在一個docker0的網路介面,同時會針對容器創建一對veth介面。其中一個veth介面是在主機充當網卡橋接作用,另外一個veth介面存在於容器的命名空間中,並且指向容器的loopback。Docker會自動給這個容器分配一個IP,並且將容器內的數據通過橋接轉發到外部。

Host模式

當網路模式設置為host時,這個容器將完全共享host的網路堆棧。host所有的網路介面將完全對容器開放。容器的主機名也會存在於主機的hostname中。這時,容器所有對外暴露的埠和對其它容器的連接,將完全失效。

Container模式

當網路模式設置為Container時,這個容器將完全復用另外一個容器的網路堆棧。同時使用時這個容器的名稱必須要符合下面的格式:--net container:<name|id>.

比如當前有一個綁定了本地地址localhost的Redis容器。如果另外一個容器需要復用這個網路堆棧,則需要如下操作:
$ sudo docker run -d --name redis example/redis --bind 127.0.0.1
$ # use the redis container's network stack to access localhost
$ sudo docker run --rm -ti --net container:redis example/redis-cli -h 127.0.0.1

管理/etc/hosts
/etc/hosts文件中會包含容器的hostname信息,我們也可以使用--add-host這個參數來動態添加/etc/hosts中的數據。
$ /docker run -ti --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts
172.17.0.22 09d03f76bf2c
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
86.75.30.9 db-static

Clean up (--rm)

默認情況下,每個容器在退出時,它的文件系統也會保存下來,這樣一方面調試會方便些,因為你可以通過查看日誌等方式來確定最終狀態。另外一方面,你也可以保存容器所產生的數據。但是當你僅僅需要短暫的運行一個容器,並且這些數據不需要保存,你可能就希望Docker能在容器結束時自動清理其所產生的數據。

這個時候你就需要--rm這個參數了。 注意:--rm 和 -d不能共用!
--rm=false: Automatically remove the container when it exits (incompatible with -d)

Security configuration
--security-opt="label:user:USER" : Set the label user for the container
--security-opt="label:role:ROLE" : Set the label role for the container
--security-opt="label:type:TYPE" : Set the label type for the container
--security-opt="label:level:LEVEL" : Set the label level for the container
--security-opt="label:disable" : Turn off label confinement for the container
--secutity-opt="apparmor:PROFILE" : Set the apparmor profile to be applied to the container

你可以通過--security-opt修改容器默認的schema標簽。比如說,對於一個MLS系統來說(譯者註:MLS應該是指Multiple Listing System),你可以指定MCS/MLS級別。使用下面的命令可以在不同的容器間分享內容:
#docker run --security-opt label:level:s0:c100,c200 -i -t fedora bash

如果是MLS系統,則使用下面的命令:
# docker run --security-opt label:level:TopSecret -i -t rhel7 bash

使用下面的命令可以在容器內禁用安全策略:
# docker run --security-opt label:disable -i -t fedora bash

如果你需要在容器內執行更為嚴格的安全策略,那麼你可以為這個容器指定一個策略替代,比如你可以使用下面的命令來指定容器只監聽Apache埠:
# docker run --security-opt label:type:svirt_apache_t -i -t centos bash

注意:此時,你的主機環境中必須存在一個名為svirt_apache_t的安全策略。

Runtime constraints on CPU and memory

下面的參數可以用來調整容器內的性能。
-m="": Memory limit (format: <number><optional unit>, where unit = b, k, m or g)
-c=0 : CPU shares (relative weight)

通過docker run -m可以調整容器所使用的內存資源。如果主機支持swap內存,那麼可以使用-m可以設定比主機物理內存還大的值。

同樣,通過-c可以調整容器的CPU優先順序。默認情況下,所有的容器擁有相同的CPU優先順序和CPU調度周期,但你可以通過Docker來通知內核給予某個或某幾個容器更多的CPU計算周期。

比如,我們使用-c或者--cpu-shares =0啟動了C0、C1、C2三個容器,使用-c/--cpu-shares=512啟動了C3容器。這時,C0、C1、C2可以100%的使用CPU資源(1024),但C3隻能使用50%的CPU資源(512)。如果這個主機的操作系統是時序調度類型的,每個CPU時間片是100微秒,那麼C0、C1、C2將完全使用掉這100微秒,而C3隻能使用50微秒。

Runtime privilege, Linux capabilities, and LXC configuration
--cap-add: Add Linux capabilities
--cap-drop: Drop Linux capabilities
--privileged=false: Give extended privileges to this container
--device=[]: Allows you to run devices inside the container without the --privileged flag.
--lxc-conf=[]: (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"

默認情況下,Docker的容器是沒有特權的,例如不能在容器中再啟動一個容器。這是因為默認情況下容器是不能訪問任何其它設備的。但是通過"privileged",容器就擁有了訪問任何其它設備的許可權。

當操作者執行docker run --privileged時,Docker將擁有訪問主機所有設備的許可權,同時Docker也會在apparmor或者selinux做一些設置,使容器可以容易的訪問那些運行在容器外部的設備。你可以訪問Docker博客來獲取更多關於--privileged的用法。

同時,你也可以限制容器只能訪問一些指定的設備。下面的命令將允許容器只訪問一些特定設備:
$ sudo docker run --device=/dev/snd:/dev/snd ...

默認情況下,容器擁有對設備的讀、寫、創建設備文件的許可權。使用:rwm來配合--device,你可以控制這些許可權。
$ sudo docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc

Command (m for help): q
$ sudo docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc
You will not be able to write the partition table.

Command (m for help): q

$ sudo docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk /dev/xvdc
crash....

$ sudo docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc
fdisk: unable to open /dev/xvdc: Operation not permitted

使用--cap-add和--cap-drop,配合--privileged,你可以更細致的控制人哦怒氣。默認使用這兩個參數的情況下,容器擁有一系列的內核修改許可權,這兩個參數都支持all值,如果你想讓某個容器擁有除了MKNOD之外的所有內核許可權,那麼可以執行下面的命令:
$ sudo docker run --cap-add=ALL --cap-drop=MKNOD ...

如果需要修改網路介面數據,那麼就建議使用--cap-add=NET_ADMIN,而不是使用--privileged。
$ docker run -t -i --rm ubuntu:14.04 ip link add mmy0 type mmy
RTNETLINK answers: Operation not permitted
$ docker run -t -i --rm --cap-add=NET_ADMIN ubuntu:14.04 ip link add mmy0 type mmy

如果要掛載一個FUSE文件系統,那麼就需要--cap-add和--device了。
$ docker run --rm -it --cap-add SYS_ADMIN sshfs sshfs [email protected]:/home/sven /mnt
fuse: failed to open /dev/fuse: Operation not permitted
$ docker run --rm -it --device /dev/fuse sshfs sshfs [email protected]:/home/sven /mnt
fusermount: mount failed: Operation not permitted
$ docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
# sshfs [email protected]:/home/sven /mnt
The authenticity of host '10.10.10.20 (10.10.10.20)' can't be established.
ECDSA key fingerprint is 25:34:85:75:25:b0:17:46:05:19:04:93:b5:dd:5f:c6.
Are you sure you want to continue connecting (yes/no)? yes
[email protected]'s password:
root@30aa0cfaf1b5:/# ls -la /mnt/src/docker
total 1516
drwxrwxr-x 1 1000 1000 4096 Dec 4 06:08 .
drwxrwxr-x 1 1000 1000 4096 Dec 4 11:46 ..
-rw-rw-r-- 1 1000 1000 16 Oct 8 00:09 .dockerignore
-rwxrwxr-x 1 1000 1000 464 Oct 8 00:09 .drone.yml
drwxrwxr-x 1 1000 1000 4096 Dec 4 06:11 .git
-rw-rw-r-- 1 1000 1000 461 Dec 4 06:08 .gitignore

如果Docker守護進程在啟動時選擇了lxc lxc-driver(docker -d --exec-driver=lxc),那麼就可以使用--lxc-conf來設定LXC參數。但需要注意的是,未來主機上的Docker deamon有可能不會使用LXC,所以這些參數有可能會包含一些沒有實現的配置功能。這意味著,用戶在操作這些參數時必須要十分熟悉LXC。

特別注意:當你使用--lxc-conf修改容器參數後,Docker deamon將不再管理這些參數,那麼用戶必須自行進行管理。比如說,你使用--lxc-conf修改了容器的IP地址,那麼在/etc/hosts裡面是不會自動體現的,需要你自行維護。

Overriding Dockerfile image defaults

當開發者使用Dockerfile進行build或者使用commit提交容器時,開發人員可以設定一些鏡像默認參數。

『捌』 如何在Ubuntu上藉助Docker管理Linux容器

雖說標準的硬體虛擬化技術(比如KVM、Xen或Hyper-V)擅長於在一個物理主機上運行多個操作系統的完全隔離的實例,但這種虛擬化技術在性能、資源和資源配置時間等方面存在各種各樣的開銷。標準的機器虛擬化實際上可能沒有必要,這取決於你的實際使用場合。

另外一種輕型虛擬化方法就是所謂的Linux容器(LXC),它提供了操作系統級別的虛擬化。由於不存在運行虛擬機帶來的開銷,LXC讓用戶可以在輕型容器沙盒裡面運行標准Linux操作系統的多個實例。如果你搭建一個可復制的開發/測試環境,或者在安全沙盒裡面部署應用程序,容器就派得上大用場。

Docker就是為了便於部署Linux容器而開發的這樣一款開源工具。Docker正迅速成為容器技術方面的一項事實上的標准,已經被諸如Ubuntu和紅帽之類的各大Linux發行版所採用。

我在本教程中將演示如何在Ubuntu 14.04上,藉助Docker管理Linux容器。請注意:對Ubuntu的早期版本而言,操作步驟可能略有不同。

眼下,Ubuntu上可用的Docker程序包只支持64位系統。想在32位機器上運行它,你就要利用源代碼構建32位版本的Docker(詳見這里)。

安裝Docker

藉助apt-get命令,安裝Docker是件輕而易舉的事。

$ sudo apt-get install docker.io
為了允許非根用戶也可以運行Docker,將你自己添加到docker群組。下面這個命令會允許當前用戶運行Docker,無需根用戶許可權。

$ sudo usermod -a -G docker $USER
退出,然後重新登錄,以激活群組成員的變化。

下一步,編輯Docker配置文件,以便更新Docker二進制代碼的位置。

$ sudo vi /etc/default/docker.io
DOCKER="/usr/bin/docker.io"
重啟Docker服務。

$ sudo service docker.io restart
管理Docker容器

如果你想啟動Ubuntu操作系統的一個新的Docker容器,首先需要獲取Ubuntu Docker映像文件。下面這個命令會通過網路下載Docker映像文件。

$ docker pull ubuntu
你可以以一種交互模式來開啟Ubuntu Docker,如下所示。最後一個參數「/bin/bash」是一旦啟動就將在容器裡面執行的命令,這里是一個簡單的bash外殼命令。

$ docker run -i -t ubuntu /bin/bash
上述命令會立即啟動一個Ubuntu容器(這正是容器的魅力所在!),並為你提供容器裡面的外殼提示符。這時候,你應該能夠訪問沙盒環境裡面的標準的Ubuntu操作系統了。

想退出Docker容器,在容器裡面的提示符處鍵入「exit」。

你可以啟動不同形式的容器。比如,想啟動Fedora容器,請執行下面這個命令:

$ docker.io run -i -t fedora /bin/bash
如果本地沒有Fedora Docker映像文件,該命令就會首先自動下載映像文件,然後啟動Docker。

如果你想啟動採用某個發行版版本的容器,也可以這么做。比如說,想啟動Ubuntu 13.04 Docker,請執行下面這個命令:

$ docker.io run -i -t ubuntu:13.04 /bin/bash
容器網路

Docker使用Linux網橋將容器彼此互聯起來,並將它們連接到外部網路。安裝了Docker後,你應該會看到默認情況下自動組建的docker0 Linux網橋。你創建的每個容器都將連接到docker0網橋介面。

自定義Linux網橋

如果你想,也可以使用自定義Linux網橋將諸容器互聯起來。為此,你可以建立一個自定義網橋,並對它進行配置,如下所示。你可以為該網橋分配一個單獨的子網,並且從子網為Docker分配IP地址。我會使用10.0.0.0/24作為Docker子網。

$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0
想讓Docker使用自定義網橋,將「-b=br0」添加到/etc/default/docker.io中的DOCKER_OPTS變數,然後重啟Docker服務。

$ sudo service docker.io restart
至此,任何新的容器都會連接到br0,其IP地址會自動從10.0.0.0/24來分配。

其他定製

還有另外幾種方法可以定製Docker的默認網路設置,主要是通過改動/etc/default/docker.io中的DOCKER_OPTS變數來實現。

「-dns 8.8.8.8 -dns 8.8.4.4」:指定容器使用的DNS伺服器。
「-icc=false」:讓諸容器彼此隔離開來。
故障排查

1. 運行docker.io命令時,你會遇到下面這個錯誤。

dial unix /var/run/docker.sock: no such file or directory(沒有此類文件或目錄)
出現這個錯誤,可能是由於Docker守護程序沒在運行。檢查Docker守護程序的狀態,確保先啟動它。

$ sudo service docker.io status
$ sudo service docker.io start

『玖』 docker相當於一個Linux上虛擬機嗎可以在docker上放置網站,提供外部訪問嗎

當前,Docker內部使用的是Linux容器技術(LXC),這是運行在與它的宿主機器同樣的操作系統上。這准許它可以和宿主機器共享許多系統資源。它也會使用AuFS作為文件系統,也為你管理網路。
AuFS是一個層狀的文件系統,因此你可以有一個只讀部分和一個只寫部分,然後將二者組合起來。你可以使系統的共同的部分用作只讀,那塊是被所有容器共享,並且給每個容器自己的可寫區域

Mitisky
翻譯於 3年前
3人頂

頂 翻譯得不錯哦!
好吧,讓我們假設你有一個容器鏡像(image)容量是1GB,如果你想用一個完整的虛擬機來裝載,你得需要容量的大小是1GB乘上你需要虛擬機的數量。但使用Linux容器虛擬化技術(LXC)和AuFS,你可以共享1GB容量,如果你需要1000個容器,假設他們都運行在同樣的系統影像上,你仍然可以用稍微比1GB多一點的空間來給容器系統,
一個完整的虛擬化系統得到了分給它的自有全部資源,只有最小的共享。你獲得了更多的隔離,但是這是很龐大的(需要更多的資源)
使用Linux容器虛擬化技術(LXC),隔離性方面有所缺失,但是他們更加輕量,而且需要更少資源。所以你可以輕松運行1000個容器在一個宿主機器上,甚至眼都不眨。試著用Xen來實現那個,我想除非你有一個超級強大的主機,不然我看是不可能的了

Mitisky
翻譯於 3年前
2人頂

頂 翻譯得不錯哦!
一個完整的虛擬系統通常得用幾分鍾去啟動,linux容器虛擬技術(LXC)只要數秒,甚至有時時間更短。
對於每種虛擬系統都有反對者和支持者。如果你希望一個完全隔離的和資源有保障的環境,那麼完全的虛擬機是你的選擇。如果你只希望進程之間相互隔離,並且希望大量運行他們在一個合理大小的宿主機器上。那麼linux容器虛擬技術(LXC)是你的選擇。

閱讀全文

與Lxc容器設置宿主機網路相關的資料

熱點內容
網路語學長是什麼意思 瀏覽:896
韶關網路安全教育基地 瀏覽:437
網上鄰居怎麼設置虛擬網路 瀏覽:891
網路不能接收信號怎麼辦 瀏覽:874
ps網路列印機無法共享 瀏覽:305
為啥我的網路信號是e 瀏覽:972
網路老是掉線是什麼情況 瀏覽:744
網路橋接小米路由器 瀏覽:705
沒有網路安全的企業 瀏覽:481
華為麥芒五如何上5g網路 瀏覽:613
小米在哪裡修改無線網路 瀏覽:659
重置路由器後網路用不了了 瀏覽:887
5g網路耗電量是多少 瀏覽:758
現在最新的網路安全手抄報 瀏覽:698
插網線網路連接信號差 瀏覽:723
小電視網路wiFI很卡 瀏覽:893
深圳網路教育哪個正規 瀏覽:598
手機怎麼看網路號碼 瀏覽:72
裝網路要買電腦嗎 瀏覽:674
有沒有哪個音樂軟體不用網路 瀏覽:233

友情鏈接