Docker從0開始

安裝

參考官網便可。我在Ubuntu-14.04上經過User Guide沒有任何問題。 web

Docker神奇的AUFS文件系統


AUFS (AnotherUnionFS in version 1, but advanced multi layered unification filesystem since version 2) implements a union mount for Linux file systems. Developed by Junjiro Okajima in 2006. aufs is a complete rewrite of the earlier Unionfs. It aimed to improve reliability and performance, but also introduced some new concepts, like writable branch balancing, and other improvements - some of which are now implemented in the Unionfs 2.x branch.


執行:docker info能夠看到系統級別的信息。以下所示,能夠看到docker使用的存儲驅動叫aufs。簡而言之,AUFS就是一個可堆疊聯合文件系統,經過aufs可靈活組裝一個目標容器,如在一個只讀的操做系統上疊加一個可讀可寫的應用程序容器,當應用程序執行過程當中發生數據變化,只在可寫的容器層發生,這樣可實現靈活的容器組裝(如替換操做系統層而不影響應用程序層),同時無需像image同樣須要保存成一個大文件,節省存儲空間。 redis

Containers: 2
Images: 20
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 24
Execution Driver: native-0.2
Kernel Version: 3.13.0-24-generic
WARNING: No swap limit support

煩人的sudo

ubuntu下每次執行docker都要輸入sudo,比較煩人,可經過以下配置簡化 docker

# 添加當前用戶到docker用戶組裏,注意這裏的littcai爲ubuntu server登陸用戶名
sudo gpasswd -a littcai docker
# 重啓Docker後臺監護進程
sudo service docker restart
# 重啓以後,嘗試一下,是否生效
docker version
#若還未生效,則系統重啓,則生效
sudo reboot


運行

運行一個Redis服務

執行以下命令:運行一個名爲common-redis的docker容器,-d表示以daemon方式運行,-p表示將容器內的6379端口映射到宿主主機的6379端口,這樣一個最簡單的redis服務就建立好了。 shell

sudo docker run --name common-redis -d -p 6379:6379 redis


鏈接到Redis服務

運行redis-cli命令並link到以前運行的common-redis服務上,-it表示開一個tty終端,提供交互模式,--rm表示自動刪除已運行存在的相同image的容器 ubuntu

sudo docker run -it --link common-redis:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'


Attach到Container

有時候咱們須要從新進入一個正在運行的container,這裏咱們可使用attach命令,其中-i表示以交互方式訪問。當須要退出時,需使用ctrl-p + ctrl-q(注意是連續兩個指令)而不是exit(exit會致使容器中止)。 tomcat

docker attach -i f2b0ae55d07a



保存修改(new image)

首先用docker ps -a命令查詢全部已建立的容器,以下圖所示,得知其CONTAINER ID=f2b0ae55d07a

執行以下命令保存鏡像,其中-m表示本次提交的註釋,-a爲author,f2b0ae55d07a爲容器ID,ycai/ubuntu-jdk爲鏡像名稱(此處經過前綴方式增長了用戶名做爲分類,方便查詢),v1爲tag名。 app

docker commit -m="Basic JDK ENV" -a="ycai" f2b0ae55d07a ycai/ubuntu-jdk:v1

提交成功後,可經過docker images命令查看鏡像倉庫中是否有剛纔保存的鏡像,以下圖所示
webapp


拷貝文件

拷貝容器內文件到Host ide

sudo docker cp container:/path hostpath


拷貝Host文件到容器內
注:這個操做不修改原來的image內容,而是再它的基礎上新建一個image.
sudo docker insert image url path


掛載Host目錄到容器中

經過-v參數能夠將Host的指定目錄mount到目標容器的指定目錄,這樣就能夠直接在Host中修改文件而不用每次都複製到容器中了。 ui

sudo docker run --name tomcat -v /home/user/webapps:/opt/tomcat/webapps ubuntu-tomcat


Docker容器鏈接

未理解問題

問題:經過-v掛載了Host的一個目錄到容器中,然而退出後經過start命令再啓動該容器,則Host該目錄下的文件變化無法體現到容器中,容器中在該目錄下的文件操做沒法體現到Host中,及mount失效了。 現象:將容器內掛載目錄下的文件刪掉,退出容器,再從新啓動進入容器,發現目錄又被從新mount上了,並且又支持雙向同步了,詭異 分析:該目錄同時也是Host經過mount方式掛載的一個遠端存儲,因爲Host上mount失效致使三者之間不一樣步

相關文章
相關標籤/搜索