2015年8月25日 星期二

Docker - 操作說明

在 Ubuntu 14.04 安裝 Docker

$wget -qO- https://get.docker.com/ | sh

// If you would like to use Docker as a non-root user, you should now consider
// adding your user to the "docker" group with something like:
$sudo usermod -aG docker your-user


在 CentOS 6.5 或更新版本安裝 Docker

$sudo yum update
$curl -O -sSL https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
$sudo yum localinstall --nogpgcheck docker-engine-1.7.1-1.el6.x86_64.rpm
$sudo service docker start
$sudo chkconfig docker on


測試 Docker 是否啟動

$sudo docker run hello-world


從 Docker hub 下載 Docker image (範例:最新版 Ubuntu)

$sudo docker pull Ubuntu
或是
$sudo docker pull ubuntu:latest
預設 tag 是 latest,這兩種寫法的執行結果是一樣的。


從 Docker hub 下載 Docker image (範例:指定 Ubuntu 14.04)

$sudo docker pull ubuntu:14.04
Docker image 的格式是 image:tag ,ubuntu 是 image 名稱,14.04 是 tag 名稱。


從 Docker hub 下載 Docker image (範例:Minimum 的 oracle-java 8)

$sudo docker pull minimum/oracle-java:8
minimum/oracle-java 是 image 名稱,8 是 tag 名稱。


查詢本機上的 Docker images

$sudo docker images


刪除本機上的 Docker image

舉 Ubuntu 14.04 為例,
$sudo docker rmi ubuntu:14.04
或是利用 images 的指令取得 image ID,
$sudo docker rmi d2a0ecffe6fa
或是簡單寫出 image ID 的前幾碼,
$sudo docker rmi d2a
此方法請小心誤刪其他有相同前幾碼的 images


刪除本機上的多個 Docker image

舉 Ubuntu 14.04 和 hello-world 為例,
$sudo docker rmi ubuntu:14.04 hello-world


強制刪除本機上的 Docker image

舉 Ubuntu 14.04 為例,
$sudo docker rmi -f ubuntu:14.04
此方法適用於有某一個 container 使用這個 image 建立,但是該 container 並不會一併被刪除。



建立 Docker container 並啟動

舉 Ubuntu 14.04 為例,
$sudo docker run -ti ubuntu:14.04
沒有指定 container 名稱時,Docker engine 會隨機命名。
也可以指定 container 名稱,例如指定為 ubuntu_instance,
$sudo docker run -ti --name ubuntu_instance ubuntu:14.04
建議全部指定 container 名稱,方便記憶與反覆進行 container 操作。

run 指令的參數介紹
-tTTY模式。
-i互動模式,可以和 container 進行指令操作。
-d後台模式,不會將 container 中的訊息輸出到 terminal。
-p host_port:container_port指定 container 的連接埠,例如 -p 8080:80,將 host 端 port 8080 導向到 container 的 port 80。
-e variable=value指定環境變數,例如 -e DB_HOST=mysql,在 container 中能存取 DB_HOST 這個環境變數。
-v host_dir:container_dir指定 container 的 volume,例如 -v /home/user/data:/data,container 的 /data 目錄是連結到 host 端的 /home/user/data 目錄。
--volumes-from name使用其他 container 的 volume,例如 --volumes-from web,將 container web 使用的 volumes 都連結到現在這個 container。
--link name[:alias]連線其他 container,例如 --link database:db,在 container 中能使用 db 作為 domain name。
--privileged=true如果要存取 container 中的系統資料夾,需要加這個參數提升權限。
--sig-proxy=false按下 Ctrl+C 只會中斷 container 中運行的程序,不會離開 container。可以按下 Ctrl+P 再按下 Ctrl+Q 離開 container,且 container 不會停止。
--restart=(no|on-failure|always)自動重新啟動 container,always 這個值在 Docker engine 啟動時也會有效。
--rm=truecontainer 停止時,自動刪除 container。


離開 Docker container

按下 Ctrl+C 可以從 container 中離開,或是在 container 中輸入 exit 指令離開。


查詢 Docker container

$sudo docker ps
可以查詢正在運行的 container ID、建立時間、狀態和名稱。
也可以查詢所有包含停止的 container,
$sudo docker ps -a


停止 Docker container

假定有個正在運行的 container ,其名稱是 ubuntu_instance,
$sudo docker stop ubuntu_instance


啟動 Docker container

假定有個停止的 container,其名稱是 ubuntu_instance,
$sudo docker start ubuntu_instance
start 指令的參數介紹
-a進入 container。
-i互動模式,可以和 container 進行指令操作。


刪除 Docker container

假定有個停止的 container,其名稱是 ubuntu_instance,
$sudo docker rm ubuntu_instance
假定有個正在運行的 container,其名稱是 ubuntu_instance,
$sudo docker rm -f ubuntu_instance
也可以一次刪除多數個 container,
$sudo docker rm ubuntu_instance_1 ubuntu_instance_2


進入 Docker container

假定有個正在運行的 container,其名稱是 ubuntu_instance,
$sudo docker attach ubuntu_instance

也可以加上參數 --sig-proxy=false。


查詢 Docker container 的訊息記錄

假定有個 container,其名稱是 ubuntu_instance,
$sudo docker logs ubuntu_instance
可以指定顯示行數
$sudo docker logs --tail=10 ubuntu_instance


查詢 Docker container 的組態設定

假定有個 container,其名稱是 ubuntu_instance,
$sudo docker inspect ubuntu_instance
可以查詢網路設定、連接埠設定、volume設定等。


將 Docker container 變成 Docker image

假設現有一個 container 為 hello,要變成 hello-world 第二版,
$sudo docker commit hello hello-world:2
也可以用來保存 container 內的資料。


刪除全部狀態為 Exited 的 Docker containers

$sudo docker rm -f `sudo docker ps -aq --filter="status=exited*"`


刪除全部無標籤的 Docker images

$sudo docker rmi `sudo docker images --filter "dangling=true" -q --no-trunc`


匯出並打包 Docker image

假定有個 image,其名稱是 hello-world,匯出成 docker-hello-world.tar。
$sudo docker save -o docker-hello-world.tar hello-world


解包並載入 Docker image

$sudo docker load --input docker-hello-world.tar

沒有留言: