最近在搭建虛擬機上的運行環境,最開始是按照傳統方法一個一個安裝軟件,一大堆軟件裝下確實是挺費時間的。現在容器技術非常的火,於是就去看了一下docker,完全能夠滿足我的需求,省時省力, 何樂而不爲?
什麼是docker?
簡單的說,Docker是一個基於進程容器(Processcontainer)的輕量級VM解決方案。大概的示意圖如下(左邊是傳統VM,右邊是docker):
傳統的虛擬機是虛擬出硬件,然後在虛擬的硬件上安裝操作系統及各種上層應用。Docker則是共享操作系統,在操作系統上層虛擬出獨立的容器,每個容器是一個獨立的沙箱,擁有自己的文件系統及運行時。
segment上的大神 吳yh堅 對容器有個比較透徹的說明,感興趣的可以讀一下下文:
https://segmentfault.com/a/1190000006245007
幾個docker常用的命令
查詢docker鏡像
$ docker search XXX
下載docker鏡像
docker pull XXX
下載後默認是放到了:/var/lib/docker
查看已下載的docker鏡像
docker images
運行docker容器
docker run XXX
查看正在運行的docker容器
docker ps
停止正在運行的容器
docker stop XXX
刪除容器
docker rm -f XXX
注意事項
容器的數據持久化
docker運行期間產生的數據是不會在寫鏡像裏面的,重新用此鏡像啓動新的容器就會初始化鏡像,會加一個全新的讀寫入層來保存數據。因此,若使用docker來運行mysql等數據存儲類應用時,你需要使用 數據卷(Data volume) 來幫助你完成數據持久化。
你可以在docker run命令中使用 -v 標識來給容器內添加一個數據卷,例如:
docker run -v /data/var/mysql/:/var/lib/mysql mysql
此命令將本地目錄/data/var/mysql/掛載到了mysql的docker容器中,對應容器中的目錄/var/lib/mysql
容器的交互式操作
docker run -t -i ubuntu:14.04 /bin/bash
-t 在新容器內指定一個僞終端或終端,-i 允許我們對容器內的 (STDIN) 進行交互。最後的/bin/bash 是指定在容器中啓動bash shell
容器作爲守護進程
docker run -d mysql
-d 標識告訴 docker 在容器內以後臺進程模式運行,默認返回一個字符串(docker id),接着你可以使用 docker ps 命令來查看已經啓動的docker容器
容器的端口映射
docker run -p 5506:3306 mysql
-p 標識會綁定本地主機上的指定端口,與容器內的端口建立映射關係。例如:上麥的例子將本機的5506與容器內mysql的3306建立映射,你可以使用 本機IP:5506 連接容器內的msyql