天天看點

宇宙最全實用高超的docker指令技巧

????一件三連,賽過活神仙????

文章目錄

  • ​​1. 鏡像​​
  • ​​1.1 拉取 (docker pull)​​
  • ​​1.2 檢視配置資訊 (docker inspect)​​
  • ​​1.3 修改tag (docker tag)​​
  • ​​1.4 打包與解包 (docker save|load)​​
  • ​​1.5 推送 (docker push)​​
  • ​​1.6 删除 (docker rmi)​​
  • ​​2 容器​​
  • ​​2.1 建立容器 (docker run)​​
  • ​​2.2 檢視容器狀态 (docker ps)​​
  • ​​2.3 檢視容器日志 (docker logs)​​
  • ​​2.4 檢視容器配置資訊 (docker inspect)​​
  • ​​2.5 檢視容器内檔案操作(docker diff)​​
  • ​​2.5 重命名容器 (docker rename)​​
  • ​​2.6 将容器建構鏡像 (docker commit)​​
  • ​​2.6 打包與解包 (docker export / import)​​
  • ​​2.7 啟動停止容器 (docker start / stop)​​
  • ​​2.8 删除容器(docker rm)​​
  • ​​2.9 更新容器運作參數(docker update)​​
  • ​​3.0 容器邏輯卷管理 (docker volume)​​
  • ​​3.1 容器網絡管理 (docker network)​​
  • ​​docker service​​

1. 鏡像

dockerhub官網:​​https://hub.docker.com/​​ prometheus鏡像為示例

1.1 拉取 (docker pull)

$ docker search prom/prometheus #搜尋鏡像      
$ docker pull prom/prometheus    #預設版本latest
$ docker pull docker.io/prom/prometheus   #預設版本latest
$ docker pull docker.io/prom/prometheus:2.3.1   # 指定版本      
$ docker images #檢視鏡像清單
$ docker images -a  #标簽得鏡像也能被展示      

1.2 檢視配置資訊 (docker inspect)

$ docker inspect prom/prometheus:latest      

1.3 修改tag (docker tag)

$ docker tag prom/prometheus:latest prom/prometheus:v1.0  #修改版本
$ docker tag prom/prometheus:latest docker.registry.localhost/prometheus:latest #修改倉庫名,修改自己的私有倉庫docker.registry.localhost(自定義)      

1.4 打包與解包 (docker save|load)

打包

$ docker save -o prometheus.tar prom/prometheus:latest #第一種方式打包
$ docker save > prometheus.tar prom/prometheus:latest  #第二種方式打包
$ docker save -o monitor.tar prom/prometheus:latest prom/alertmanager:latest # 多個鏡像打包
$ docker save prom/prometheus:latest | gzip -> prometheus.tar.gz      

解包

$ docker load -i prometheus.tar  #第一種方式解包
$ docker load < prometheus.tar  #第二種方式解包      

1.5 推送 (docker push)

#将本地的鏡像推送至公共鏡像源的自己倉庫,一般差別官方鏡像,為私人定制。ghostwritten為我的倉庫名

$ docker push docker.io/ghostwritten/prometheus:latest      

将本地的鏡像推送至本地搭建的私有倉庫,一般為内網叢集環境公用。搭建私有倉庫請點選

$ docker push docker.registry.localhost/prometheus:latest  
$ docker push docker.registry.localhost/monitor/prometheus:latest  #加monitor tag友善區分鏡像類型      

1.6 删除 (docker rmi)

$ docker rmi prom/prometheus:latest
$ docker rmi  -f prom/prometheus:latest  #-f 為強制删除      

2 容器

2.1 建立容器 (docker run)

​​更多細節請點選​​​​參數細節​​

-d --detach  #背景運作容器
 -i --interactive #保持标準輸入流(stdin)對容器開發
 -t --tty #為容器配置設定一個虛拟終端
 -e --env username="ritchie": #為容器配置環境變量
 --env-file=[]: #從指定檔案讀入環境變量;
 --volume , -v : #綁定一個卷
 --volume-from  #挂載另一個容器的存儲卷與本容器
 -P: #随機端口映射,容器内部端口随機映射到主機的端口
 -p: #指定端口映射,格式為:主機(宿主)端口:容器端口
 --restart=always #自動重新開機
 --rm #停止即删除
 --entrypoint #運作指定程式,入口點
 --expose=[]: 開放一個端口或一組端口;
 --name="nginx-lb": #為容器指定一個名稱;
 --cpuset="0-2" or --cpuset="0,1,2": #綁定容器到指定CPU運作;
 -m :#設定容器使用記憶體最大值;
 --net="bridge": #指定容器的網絡連接配接類型,支援 bridge/host/none/container: 四種類型;
 --dns 8.8.8.8: #指定容器使用的DNS伺服器,預設和宿主一緻;
 --dns-search example.com: #指定容器DNS搜尋域名,預設和宿主一緻;
 --add-host #添加域名解析
 -h  --hostname "mars": #指定容器的hostname
 --link :alias     #name和id是源容器的name和id,alias是源容器在link下的别名 添加連結到另一個容器,是單向的網絡依賴。
 --read-only  #隻讀容器
 --privileged #root擁有真正的root權限,可以看到很多host上的裝置,并且可以執行mount,甚至允許在docker容器中啟動docker容器      
docker run -d prom/prometheus:latest  #背景模式啟動一個容器,容器名随機
docker run -d --name prometheus prom/prometheus:latest  #背景模式啟動一個容器,容器名定義為prometheus
docker run -d -P --name prometheus prom/prometheus:latest  #背景模式啟動一個容器,容器名定義為prometheus,容器的80端口映射到主機随機端口      

限制記憶體使用上限

$ docker run -it -m 300M --memory-swap -1 --name con1 u-stress /bin/bash      

正常情況下, --memory-swap 的值包含容器可用記憶體和可用 swap。是以 --memory=“300m” --memory-swap=“1g” 的含義為:

容器可以使用 300M 的實體記憶體,并且可以使用 700M(1G -300M) 的 swap。–memory-swap 居然是容器可以使用的實體記憶體和可以使用的 swap 之和!

把 --memory-swap 設定為 0 和不設定是一樣的,此時如果設定了 --memory,容器可以使用的 swap 大小為 --memory 值的兩倍。

如果 --memory-swap 的值和 --memory 相同,則容器不能使用 swap

限制可用的 CPU 個數

$ docker run -it --rm --cpus=2 u-stress:latest /bin/bash      

指定固定的 CPU

$ docker run -it --rm --cpuset-cpus="1" u-stress:latest /bin/bash      

設定使用 CPU 的權重

$ docker run -it --rm --cpuset-cpus="0" --cpu-shares=512 u-stress:latest /bin/bash
$ docker run -it --rm --cpuset-cpus="0" --cpu-shares=1024 u-stress:latest /bin/bash      

注意:

當 CPU 資源充足時,設定 CPU 的權重是沒有意義的。隻有在容器争用 CPU 資源的情況下, CPU 的權重才能讓不同的容器分到不同的 CPU 用量。–cpu-shares 選項用來設定 CPU 權重,它的預設值為 1024。我們可以把它設定為 2 表示很低的權重,但是設定為 0 表示使用預設值 1024。

2.2 檢視容器狀态 (docker ps)

​​更多細節請點選​​

$ docker ps         #檢視啟動的容器
$ docker ps -n 3    #檢視前三個容器
$ docker ps -q     #檢視啟動的容器ID
$ docker ps -a     #檢視全部容器,包括停止的
$ docker ps -a -q  #檢視全部容器ID
$ docker ps --filter status=running   #檢視狀态為啟動的容器      
$ docker top prometheus #檢視容器程序
$ docker exec prometheus ps #檢視容器程序      

2.3 檢視容器日志 (docker logs)

​​更多細節請點選​​

$ docker logs prometheus
$ docker logs -f prometheus
$ docker logs -f --tail 200 prometheus #檢視日志後200行      

2.4 檢視容器配置資訊 (docker inspect)

​​更多細節請點選​​

$ docker inspect prometheus
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' prometheus #指定檢視具體網卡位址ip配置資訊      

2.5 檢視容器内檔案操作(docker diff)

  • A開頭:表示檔案被添加
  • C開頭:表示檔案被修改
  • D開頭:表示檔案被删除
$ docker diff prometheus      

2.5 重命名容器 (docker rename)

$ docker rename prometheus prometheus-new      

注意:不影響運作狀态

2.6 将容器建構鏡像 (docker commit)

$ docker commit  
$ docker commit prometheus prometheus:v2
$ docker commit -a "@author" -m "added somthing" prometheus prometheus:v3      

注意:當通過容器建構的鏡像,也許你再用新鏡像建立容器時發現無法啟動,這是因為建立鏡像的容器附帶了​

​/bin/bash​

​​指令,當你通過這個容器建構的鏡像建立容器時,啟動一個shell指令它會停止它,如果你想啟動某一個指令,你可以以某個指令通過​

​--entrypoint​

​作為一個入口點。

$ docker run -tid --name git-cmd --entrypoint git ubuntu:latest
$ docker -a "@ghostwritten" -m "action git "  git-cmd ubuntu-git:v1
$ docker run -tid --name git-cmd2 git-cmd ubuntu-git:v1 version      

2.6 打包與解包 (docker export / import)

打包

$ docker export -o prometheus.tar prometheus
$ docker export > prometheus.tar prometheus      

解包

$ docker import prometheus.tar prometheus-new #預設tag為latest
$ docker import prometheus.tar prometheus-new:v1.0 #為新鏡像指定name和tag      

2.7 啟動停止容器 (docker start / stop)

$ docker start prometheus #啟動
$ docker stop prometheus #停止
$ docker restart prometheus #重新開機
$ docker kill prometheus #強制停止      

2.8 删除容器(docker rm)

$ docker rm prometheus
$ docker rm -f prometheus      

2.9 更新容器運作參數(docker update)

$ docker update --restart=always prometheus
$ docker update --cpu-period=100000 --cpu-quota=20000 prometheus      

3.0 容器邏輯卷管理 (docker volume)

docker volume ls        #檢視容器卷清單
docker volume inspect <容器卷>   #檢視容器卷配置資訊
docker volume rm <容器卷>   #删除容器卷      

3.1 容器網絡管理 (docker network)

docker network ls     #容器網絡清單
docker network inspect <容器網絡> #檢視容器網絡配置資訊
docker network rm <容器網絡>   #删除容器網絡
docker network rm  -f <容器網絡>   #強制删除容器網絡
docker network disconnect <容器網絡> <容器名稱>  #斷開容器網絡連接配接
docker network disconnect --force <容器網絡> <容器名稱>  #強制斷開容器網絡連接配接      

docker service

#Docker Swarm 啟動了兩個 Nginx 容器執行個體。其中,第一條 create 指令建立了這兩個容器
#第二條 update 指令則把它們“滾動更新”成了一個新的鏡像。
$ docker service create --name nginx --replicas 2  nginx
$ docker service update --image nginx:1.7.9 nginx