標籤:linux 虛擬機器 網路
今天,daimajia推薦使用docker,其實一直都聽過docker,但沒用過,今天參考幾篇文檔把docker搞定了。果然起的速度比一般虛擬機器快
這個總結主要是整理工作,大部分內容都在文章最後的文檔裡已經有說明。
我的電腦是ubuntu14.04 安裝的話用包源進行安裝
$ sudo apt-get install apt-transport-https$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"$ sudo apt-get update$ sudo apt-get install lxc-docker
然後根據文章末尾給定的文章搞的。
我一開始下的fedora21,問題好多,比如yum源的問題,命令缺少的問題,搞到最後還是換成了ubuntu。ubuntu命令比較齊全,route,ifconfig等一些基本命令都已經有了。
接下來碰到一個問題:沒有iptables,我安裝完之後報錯:
[email protected]:/# iptables -nLiptables v1.4.21: can't initialize iptables table `filter': Permission denied (you must be root)Perhaps iptables or your kernel needs to be upgraded.
解決方案就是在啟動docker的時候添加下面這個參數:
--privileged=true
docker run --privileged=true -t -i ubuntu_2 /bin/bash
因為有些功能被禁用了。。。一開始我還以為需要重新編譯核心,看來不需要。
下面這個是docker的網路拓撲圖:
多台虛擬機器都是串連在docker0這個虛擬交換器上,再通過port(這個名詞好像應該叫interface)串連在宿主機上。這個拓撲不複雜。登入兩台虛報機相互ping一下,檢查是否連通。實踐證明一切OK。
再檢查是否可以連通外網,事實證明也可以,看來docker已經幫我們設定好資料包NAT轉寄了。
其實docker的拓撲可以修改,添加橋接器,劃分網路等一些二層的功能,但不具備三層添加路由器的功能。
比如,重新建立橋接器並刪除原橋接器:
除了預設的 docker0 橋接器,使用者也可以指定橋接器來串連各個容器。
在啟動 Docker 服務的時候,使用 -b BRIDGE或--bridge=BRIDGE 來指定使用的橋接器。
如果服務已經運行,那需要先停止服務,並刪除舊的橋接器。
$ sudo service docker stop$ sudo ip link set dev docker0 down$ sudo brctl delbr docker0
然後建立一個橋接器 bridge0。
$ sudo brctl addbr bridge0$ sudo ip addr add 192.168.5.1/24 dev bridge0$ sudo ip link set dev bridge0 up
查看確認橋接器建立並啟動。
$ ip addr show bridge04: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group defaultlink/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ffinet 192.168.5.1/24 scope global bridge0valid_lft forever preferred_lft forever
配置 Docker 服務,預設橋接到建立的橋接器上。
$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker$ sudo service docker start
啟動 Docker 服務。 建立一個容器,可以看到它已經橋接到了 bridge0 上。
可以繼續用 brctl show 命令查看橋接的資訊。另外,在容器中可以使用 ip addr 和 ip route 命令來查看 IP 位址配置和路由資訊。
有一個比較噁心的就是,每次用完虛擬機器如果更新過資源,記得退出時候把虛擬機器commit一下,否則虛擬機器不會儲存下來。
命令:
$ sudo docker commit -m "Changed some resource" -a "myUsrname" 0b2616b0e5a8 newVirt
其中各個參數含義如下:
Create a new image from a container's changes -a, --author="" Author (e.g., "John Hannibal Smith <[email protected]>") -m, --message="" Commit message -p, --pause=true Pause container during commit
0b2616b0e5a8為剛退出container ID,可以通過docker ps -l -q擷取
這些命令和git有些類似。
還有一個小問題就是每次輸入都要sudo許可權,神煩,可以通過添加使用者組來解決:
# 添加docker使用者組$ sudo groupadd docker# 把自己加到docker使用者組中$ sudo gpasswd -a myusername docker# 重啟docker後台服務$ sudo service docker restart# 登出,然後再登陸$ exit
再還有別的問題可以參考文檔。以下為本文參考文檔:
http://yeasy.gitbooks.io/docker_practice/content/image/create.htmlhttps://docker.cn/p/docker-15-tips/http://ikarishinjieva.github.io/tachikoma-blog/post/2014-07-10-docker-some-error/
Linux下安裝docker