指令詳解
從遠程倉庫拉取鏡像
//docker image pull library/hello-world默認從library拉取可以省略
docker image pull hello-world
查看鏡像列表
docker image ls
運行一個docker的鏡像,產生一個容器實例
//運行
docker run hello-world
//echo會在shell打印一段文字,起提示作用
Hello world
- 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
- 利用鏡像創建並啓動一個容器
- 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
- 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
- 從地址池配置一個 ip 地址給容器
- 執行用戶指定的應用程序
- 執行完畢後容器被終止
查看容器
// 列出本機正在運行的容器
docker container ls
// 列出本機所有容器,包括終止運行的容器
docker container ls --all
啓動一個可交互的容器
docker run -t -i ubuntu:14.04 /bin/bash
- docker run 命令,並啓動名稱爲ubuntu:14.04的容器 。
- -t 表示在新容器內指定一個僞終端或終端
- -i表示允許我們對容器內的 (STDIN) 進行交互。
- 可以將-t -i縮減爲-it好記
- 我們在容器內還指定了一個新的命令: /bin/bash 。這將在容器內啓動 bash shell,這是一個交互程序
- 注意":"後面爲TAG,如果沒有指定默認就爲latest
所以當容器(container)啓動之後,我們會獲取到一個命令提示符:
root@af8bae53bdd3:/#
這代表我們已經進入了容器內部
啓動守護進程,後臺一直運行容器
docker run -d ubuntu:14.04
//注意-d和-it同時使用,-it會無效,-d需要返回一個容器id
端口映射,掛載數據卷,命名容器
docker run -d --name=ant_web_pro -v /宿主機絕對路徑:/容器內目錄 -p docker外部端口:docker內部端口 nginx
- -P: 隨機端口映射,容器內部端口隨機映射到主機的高端口
- -p: 指定端口映射,格式爲:主機(宿主)端口:容器端口
- --name="nginx-lb": 爲容器指定一個名稱;
- --volume , -v: 綁定一個卷
- 如果是容器裏的目錄不存在,兩者都會自動創建
- -v $PWD/目錄:/容器內目錄 $PWD表示當前文件夾
- 當你在容器容器內部改變數據卷是其實軟連接到了外部,數據直接在宿主機改變
查看數據卷
docker volume ls
啓動已終止的容器
容器可以通過run新建一個來運行,也可以重新start已經停止的container,但start不能夠再指定容器啓動時運行的指令,因爲docker只能有一個前臺進程。
容器stop(或Ctrl+D)時,會在保存當前容器的狀態之後退出,下次start時保有上次關閉時更改。而且每次進入attach進去的界面是一樣的,與第一次run啓動或commit提交的時刻相同。
docker start $CONTAINER_ID
docker stop $CONTAINER_ID
docker restart $CONTAINER_ID
退出容器
exit
進入容器
docker exec -it ant-design-pro_web /bin/bash
//docker exec -it 64b9ded82141 bash (可以是id)
刪除一個或多個container、image(rm、rmi)
// 刪除容器
docker rm <container_id/contaner_name>
// 刪除所有停止的容器
docker rm $(docker ps -a -q)
// 刪除鏡像
docker rmi <image_id/image_name ...>
commit 容器,創建新鏡像
我們期望能定製自己的鏡像,在裏面安裝一些基礎環境(比如上文中的 node),然後製作出自己要的基礎鏡像。
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
- -a :提交的鏡像作者;
- -c :使用Dockerfile指令來創建鏡像;
- -m :提交時的說明文字;
- -p :在commit時,將容器暫停。