在 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 指令的參數介紹
-t | TTY模式。 |
-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=true | container 停止時,自動刪除 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