Docker跟Virtual Box這種Virtual Machine上的虛擬化不同,他是基於64 bit linux上,由cgroups/AUFS/LXC為基礎發展出來的Linux virtualization,目前也僅能在Linux上跑,相對於VM等級,更輕量化且更省資源。
安裝
由於Docker需要Linux kernel 3.8以上的,如果版本比較舊的要先更新
1 | $ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring |
Update: Ubuntu 14.04
由於Ubuntu 14.04直接收入Docker
所以直接安裝docker.io就好,然後以下的指令全部用docker.io
取代docker
1 | $ sudo apt-get install docker.io |
將Docker的PGP Key跟Repository加入環境中
1 | $ sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -" |
跟新Source且安裝LXC-Docker
1 | $ sudo apt-get update |
測試安裝是否成功
1 | $ sudo docker pull busybox |
Image
Image就類似Vagrant的Box,是被包裝過的容器。可以在Docker index尋找想要的Image。
REPOSITORY的命名格式是username/repository
如果沒有username表示是官方的Image。
或是透過以下指令,找尋想要的Image
1 | $ sudo docker search {keywork} |
透過docker pull
,下載想要的
透過以下指令,列出目前本地有的Image
1 | $ sudo ducker images |
結果如下
1 | REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE |
刪除Image的方法
1 | $ sudo docker rmi {REPOSITORY-NAME} |
Dockerfile
類似VagrantFile,用這個當按來控制Image的生成。這裡是官方教學Dockerfile tutorial,有時間在仔細看。
Docker Project收錄了常用的Dockerfile。
以下是個範例
1 | # VERSION 0.0.1 |
接著下
1 | $ sudo docker build -t="custom/sshd" . |
就會建立一個custom/sshd
的Image。
Run a Container
執行中的Image叫做Container,跟Program/Process的定義很像。
我們有兩種方法執行Image,一個是直接對Image下指令,或者是在背景執行。
立即執行
1 | $ sudo docker run -i -t ubuntu /bin/bash |
-i表示interacive mode,-t表示建立一個tty。選擇ubuntu的image之後,執行Bash指令。
記住在這邊執行任何操作,不會紀錄在Image之中,這點跟Vagrant不同,需要Commit成為新的Image。
暫停目前Container
利用Ctrl + D
或是exit
達成
得到這個Container的Metadata
1 | $ sudo docker inspect {CONTAINER-ID} |
背景執行
1 | $ sudo docker run -d -p 12345:80 -v /home/hm//share:/var/www:rw dockerfile/nginx |
其中 -d
表示Daemon mode, -p
表示Container中的port 80映射到Host PC的port 12345。而-v表示映射目錄。
透過 以下指令看到目前運行中的Image
1 | $ sudo docker ps -l |
如果要停止一個Daemon,就要透過
$ sudo docker stop {CONTAINER-ID}
刪除Container
1 | $ sudo docker rm {CONTAINER-ID} |
Diff / Commit Container / Push / Pull
可以知道目前的Container做了什麼改變,且Commit改變成為新的Image
1 | $ sudo docker diff {CONTAINER-ID} |
首先先在[Docker index]申請一個帳號
1 | $ sudo docker login |
Remove sudo
每次都打sudo有點麻煩,這邊有個簡化方法
1 | $ sudo groupadd docker |