Docker 初探

本文作者是 QingCloud 用戶 roger。 對 Docker 好奇很久了,今天最終自己動手嘗試一下,系統(tǒng)要求 Ubuntu Server 12.04 LTS 64bit,本想用本地的 VirtualBox 但不支持 64bit(不知道為什么),那就用云服務了,QingCloud 的控制頁面確實簡潔,很容易使用。 1. 在 QingCloud 中創(chuàng)建測試機器
  • 創(chuàng)建一個 Ubuntu 12.04.2 主機(映像 ID 為 precisex64a)
  • 申請一個公網 IP、并捆綁至該主機
  • 創(chuàng)建一個 SSH 密鑰、并捆綁至該主機
以下操作需要 root 權限,如果你使用的帳號不是 root,那么需要 sudo. 2. 安裝 Docker 刷新: apt-get update apt-get install python-software-properties 添加 PPA: add-apt-repository ppa:dotcloud/lxc-docker apt-get update 安裝: apt-get install lxc-docker 3. 下載兩個 image (境外網絡可能比較慢、甚至中途掛,多試幾次,或掛后臺) docker pull ivarvong/redis docker pull kstaken/apache2 4. 啟容器中的服務 docker run -d -p 6379 ivarvong/redis /usr/bin/redis-server docker run -d -p 80:80 kstaken/apache2 5. 查看運行的容器 docker ps 記錄容器的 IP 地址 docker inspect 08821c6ffb4a 6. 為連接 redis 安裝一下 cli apt-get install redis-server 7. 連接 redis 測試一下 redis-cli -p 6379 -h 172.17.0.17 set foo bar get foo exit 8, 看看 apache 是否起來 curl localhost 如果可用那么兩個容器都正常運行了。 好了,總結一下 Docker 的常用命令: docker search 用于搜索是否有可用的images,實際從index.docker.io查找,放回查詢結果 例如: docker search apache docker1 docker pull 從 index.docker.io 下載一個 image ,下載過程會有好幾個 fs 層,因為 Docker 生成的容器是可以不斷修改保存的,每一次的保存生成fs,一個完整的容器可以是多次的 fs 的疊加。 docker inspect 查看容器的信息,實際是lxc容器的配置參數 docker2 docker run 在容器中運行一個命令,如果容器中有常駐任務會直接啟動容器本身 docker run 有諸多的選項,介紹常用的必要選項 -e 設置容器的運行env環(huán)境變量 -v 映射服務的一個目錄到容器中 -p 容器對服務器暴露的端口 -c cpu使用的權重 -m 限制容器的內存使用量 -i 標準輸出到當前term -t 分配一個tty 一般情況 -i -t 一起使用將容器的輸出到term 參考截圖: docker3 例如: docker run -d -p 80:80 -v /tmp:/var/www kstaken/apache2 將系統(tǒng)的80端口映射到容器的80端口,訪問系統(tǒng)的 localhsot 就訪問到容器的 apache 服務, apache 會讀取 /tmp/index.html 訪問 docker4 docker ps -a 列出所有的容器,包括運行的和已經停止的。 docker5 docker rm 刪除容器 如果容器不在需要可以用刪除容器操作 docker6 docker start 開啟停止的容器 docker stop 停止運行的容器 docker7 docker rmi 刪除 image docker info 查看系統(tǒng)的容器和 images docker commit 修改容器后提交保持 docker push 將 image 推送到 index.docker.io 保持 docker build 用 Dockerfile 文件創(chuàng)建一個 image,具體的 Dockerfile 語法不在介紹,很簡單參考官網就可以了。 后續(xù): Docker 確實可以快速構建一個容器,很快的構建一個 PaaS 容器,對不同的環(huán)境使用不同的 Docker 容器即可。不過呢Docker 必須用 root 權限運行,Docker 雖然可以控制容器映射到系統(tǒng)的目錄,但容器寫服務輸出的文件依然是隸屬root(非 root 用戶無法運行 Docker)。 如果對同一臺服務上的少數應用需要控制資源的直接使用 cgroup 是較好的選擇,可以按用戶或用戶組控制系統(tǒng)資源。如果服務需要指出多種環(huán)境,那么 Docker 就是最好的。 推薦參考: http://dockerbook.com/TheDockerBook_sample.pdf