本指南假設(shè)你已經(jīng)完成了Docker的安裝工作。檢查你安裝的Docker,運行以下命令:
# Check that you have a working install
$ docker info
如果你得到 docker: command not found,你可能沒有完整的安裝上Docker。
如果你得到 /var/lib/docker/repositories: permission denied ,那你可能沒有權(quán)限訪問你主機上的Docker。
為獲得訪問Docker權(quán)限可以直接在命令前加sudo,或者采取以下步驟授予權(quán)限::
# 如果還沒有docker group就添加一個:
$ sudo groupadd docker
# 將用戶加入該group內(nèi)。然后退出并重新登錄即可生效。
$ sudo gpasswd -a ${USER} docker
# 重啟docker
$ sudo service docker restart
# Download an ubuntu image
$ sudo docker pull ubuntu
這將從Docker Hub中查找到 Ubuntu 鏡像,并且從Docker Hub中下載鏡像到本地緩存中。
提示:當鏡像下載成功之后,你將會看到鏡像的短id一個12字符的hash,
539c0211cd76: Download complete,這些短的鏡像IDS是完整ID的前12個字符。你可以使用docker inspect和docker images --no-trunc=true來查看完整ID。
如果你使用OS X,你可以使用 sudo。
# 在ubuntu鏡像中使用運行交互shell,
# 分配一個控制臺,分配輸入輸出流
# To detach the tty without exiting the shell,
# use the escape sequence Ctrl-p + Ctrl-q
# note: This will continue to exist in a stopped state once exited (see "docker ps -a")
$ sudo docker run -i -t ubuntu /bin/bash
提示:修改默認的 docker 進程綁定到一個tcp端口或者 Unix docker群組,這將會增加你的安全風險,允許非 root 用戶獲得 root 訪問的主機權(quán)限。請確保你的
docker權(quán)限。如果你綁定一個TCP端口任何人可以通過這個端口來訪問你的Docker,所以它不應(yīng)該放在一個開放的網(wǎng)絡(luò)中。
使用 -H 標記可以使 Docker 來監(jiān)聽指定的IP和端口。默認情況下,它將監(jiān)聽 unix:///var/run/docker.sock只允許本地root用戶連接。你可以將它設(shè)置為 0.0.0.0:2375或者指定的主機IP來給所有人訪問權(quán)限。但是這不推薦,因為這樣普通用戶獲得主機上運行進程的root權(quán)限。
同樣,Docker 客戶端可以使用 -H 來連接指定的主機端口。
-H 使用以下格式來分配主機和端口
tcp://[host][:port]` or `unix://path
舉例:
-H,當輸入為空的時候,將默認為相同的原始值,即沒有-H輸入。
-H也接受短形式的TCP綁定。
host[:port]` or `:port
進程模式運行Docker
$ sudo <path to>/docker -H 0.0.0.0:5555 -d &
下載Ubuntu鏡像:
sudo docker -H :5555 pull ubuntu
你可以使用多個-H標記,例如,你想要同時監(jiān)聽TCP和Unix socket。
# 進程模式下運行docker
$ sudo <path to>/docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d &
# 使用默認的unix socker來下載ubuntu鏡像
$ sudo docker pull ubuntu
# 或者使用TCP端口
$ sudo docker -H tcp://127.0.0.1:2375 pull ubuntu
# 開始一個非常有用的長時間運行的進程
$ JOB=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")
# 到目前為止收集的輸出工作
$ sudo docker logs $JOB
# 關(guān)閉這項進程
$ sudo docker kill $JOB
$ sudo docker ps # Lists only running containers
$ sudo docker ps -a # Lists all containers
$ sudo docker ps -l # List the last running container
# 開始一個新的容器
$ JOB=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")
# 停止容器
$ docker stop $JOB
# 開始容器
$ docker start $JOB
# 重啟容器
$ docker restart $JOB
# 殺死一個工作
$ docker kill $JOB
# 刪除一個容器
$ docker stop $JOB # Container must be stopped to remove it
$ docker rm $JOB
#讓容器綁定4444端口,并通知netcat監(jiān)聽它。
$ JOB=$(sudo docker run -d -p 4444 ubuntu:12.10 /bin/nc -l 4444)
# 查看容器轉(zhuǎn)發(fā)的公共端口
$ PORT=$(sudo docker port $JOB 4444 | awk -F: '{ print $2 }')
# 連接這個公共端口
$ echo hello world | nc 127.0.0.1 $PORT
# 確認網(wǎng)絡(luò)連接工作
$ echo "Daemon received: $(sudo docker logs $JOB)"
保存你鏡像容器的狀態(tài),這也就可以重復利用。
當你提交你的容器,僅僅是鏡像和容器之間的不同,從創(chuàng)建到容器的當前狀態(tài)來存儲(作為差異)。你可以使用 docker images來查看已有鏡像。
# 使用新的名稱來提交你的鏡像
$ sudo docker commit <container_id> <some_name>
# 列出你的容器
$ sudo docker images
你現(xiàn)在有一個鏡像的狀態(tài),你可以創(chuàng)建新的實例。
首先要保證有權(quán)限對Docker鏡像或者容器進行操作,具體做法參見進入前文安裝部分。
# 停止所有容器
$ docker stop $(docker ps -a -q)
# 刪除指定鏡像
$ docker rmi $image
# 刪除無標示鏡像,即id為<None>的鏡像
$ docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
# 刪除所有鏡像
$ docker rmi $(docker images -q)