docker 常用指令
-
-
- docker 鏡像:
- docker 定制鏡像
- docker 容器
- docker 資料管理
-
docker 鏡像:
-
擷取鏡像
sudo docker pull [選項] [Docker Registry 位址[:端口号]/]倉庫名[:标簽]
docker pull ubuntu:16.04
-
運作鏡像
sudo docker run -it --rm ubuntu:16.04 bash
退出 exit
-
列出鏡像
sudo docker image ls
-
檢視鏡像、容器、資料卷所占用的空間
docker system df
-
根據倉庫名列出鏡像
docker image ls ubuntu
-
列出特定的某個鏡像
docker image ls ubuntu:16.04
-
删除本地鏡像
docker image rm [選項] <鏡像1> [<鏡像2>…]
docker 定制鏡像
- 建立自己的鏡像路徑
- 在路徑下touch Dockerfile
-
docker build [選項] <上下文路徑/URL/->
docker build -t scrapy:v3 .
-
鏡像建構上下文(Context)
1> ENV 設定環境變量
2> CMD 容器啟動指令
3> ADD 更進階的複制檔案
4> WORKDIR 指定工作目錄
格式為 WORKDIR <工作目錄路徑>
5> 列出所有在指定 image 之後建立的 image 的父 image
docker image inspect --format=’{{.RepoTags}} {{.Id}} {{.Parent}}’ $(docker image ls -q --filter since=xxxxxx) # xxxxx image ID
6> 強制删除none鏡像
檢視none鏡像
docker images | grep none
檢視none鏡像ID
docker images | grep none | awk ‘{print $3}’
強制删除none鏡像
docker images | grep none | awk ‘{print $3}’|xargs docker rmi
docker 容器
-
啟動容器
docker run -t -i 鏡像名 /bin/bash
-
進入容器
docker exec -it 容器名 bash
退出 exit
-
運作容器
docker run ubuntu:17.10 /bin/sh -c “while true; do echo helloworld; sleep 1; done” # 列印在主控端上
docker run -d ubuntu:17.10 /bin/sh -c “while true; do echo hello world; sleep 1; done” # 輸出在背景
-
檢視log資訊
docker container logs [container ID or NAMES]
-
終止容器
docker container stop [container ID or NAMES]
啟動終止狀态容器 docker container start
重新開機運作狀态容器 docker container restart
-
導入導出容器
導出容器
docker export 7691a814370e > ubuntu.tar
導入容器快照
cat ubuntu.tar | docker import - test/ubuntu:v1.0
指定URL、目錄 docker import http://example.com/exampleimage.tgz example/imagerepo
-
删除容器
用 docker container rm [] 删除一個終止狀态的容器
如果想删除運作中的容器, 添加 -f 參數
docker container prune # 清理所有處于終止狀态的容器
-
查詢容器資訊
docker inspect [容器名]
-
檢視容器狀态
docker inspect -f {{.State.Status}} [容器名]
10.檢視容器ip
docker inspect -f {{.NetworkSettings.IPAddress}} [容器名]
docker inspect [容器名] | grep IPAddress
-
檢視docker 占用的系統資源
docker stats [容器名]
docker 資料管理
-
資料卷
1> 是一個可供一個或者多個容器使用的特殊目錄它繞過 UFS,可以提供很多有用的特性:
a. 資料卷 可以在容器之間共享和重用
b.對 資料卷的修改會立馬生效
c. 對 資料卷的更新不會影響鏡像
d. 資料卷 預設會一直存在, 即使容器被删除
2> 檢視所有的資料卷
docker volume ls
3> 建立一個資料卷
docker volume create [資料卷名稱]
4> 以檢視指定 資料卷 的資訊
docker volume inspect my-vol
5> 啟動一個挂載資料卷的容器
docker run -d -P --name web --mount source=my-vol,target=/webapp training/webapp python app.py
6> 删除資料卷
docker volume rm my-vol
7> 清理無主資料卷
docker volume prune
-
挂載主機目錄
docker run -p 28018:27017 -v /data/db:/data/db -d --name mongo_server mongo:3.4
-
資料卷進階
volumes-from 用于資料卷容器(Data Volume Container)
1> 建立和挂載資料卷容器
有時候, 将相關的容器部署到同一個host上, 并且希望容器間可以資料共享, 我們應該建立一個命名的資料卷容器, 然後供其他容器挂載。
如: docker run -d -v /dbdata --name dbdata taining/postgres
然後通過–volumes-from 在其他容器挂載/dbdata 資料卷。
docker run -d --volumes-from dbdata --name db1 taining/postgres
docker run -d --volumes-from dbdata --name db2 taining/postgres
可以同時使用多個–volumes-from 參數, 從多個容器挂載多個資料卷。
也可以從其他已經挂載資料卷的容器挂載資料卷。
docker run -d --name db3 --volnumes-from db1 taining/postgres
即使删除挂載了資料卷的容器(包括初始的容器和其他子容器), 資料卷并不會被删除。 如果想删除該資料卷, 必須在删除最後一個引用該資料卷的時候調用docker rm -v 顯示删除資料卷
2> 資料卷容器的應用
----
3>備份、恢複和遷移資料卷
使用資料卷共享資料,難免面臨資料的備份, 恢複和遷移問題
a. 備份資料卷
通過參數 --volumes-from 從資料卷挂載資料卷, 然後備份資料卷中的資料。
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backip.tar /dbdata
這裡我們建立一個新的容器, 将Host本地目錄挂載到/backup. 然後将資料卷容器的dbdata的資料卷(/dbdata)打包到/backuo/back.tar
然後在Host的目前目錄下就可以得到backup.tar
b. 恢複資料卷
我們可以将備份的資料恢複到原有的容器或者其他任何容器。 備份到新的容器
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
然後執行
docker run --volnumes-from dbdata2 -v $(pwd):/backup busybox xvf /backup/backup.tar