docker命令詳解

Docker基本命令

  • docker ps

docker ps命令會列出所有運行中的容器。這隱藏了非運行態容器的存在,如果想要找出這些容器,我們需要使用下面這個命令。

docker ps -a 
 
  • docker images

docker images命令會列出了所有頂層top-level鏡像。實際上,在這裏我們沒有辦法區分一個鏡像和一個只讀層,所以我們提出了top-level鏡像。只有創建容器時使用的鏡像或者是直接pull下來的鏡像能被稱爲頂層top-level鏡像,並且每一個頂層鏡像下面都隱藏了多個鏡像層

docker images -a
 該命令列出了所有的鏡像,也可以說是列出了所有的可讀層。如果你想要查看某一個image-id下的所有層,可以使用docker history來查看。
 
  • docker stop <container-id>

docker stop命令會向運行中的容器發送一個SIGTERM的信號,然後停止所有的進程。

 
  • docker kill <container-id>

docker kill 命令向所有運行在容器中的進程發送了一個不友好的SIGKILL信號。

 
  • docker pause <container-id>

docker stop和docker kill命令會發送UNIX的信號給運行中的進程,docker pause命令則不一樣,它利用了cgroups的特性將運行中的進程空間暫停。

  • docker rm <container-id>

該命令會移除構成容器的可讀寫層。注意,這個命令只能對非運行狀態容器執行。

 
  • doccker rmi <image-id>

docker rmi命令會移除構成鏡像的一個只讀層。你只能夠使用docker rmi來移除最頂層top level layer(也可以說是鏡像),你也可以使用-f參數來強制刪除中間的只讀層。

 
  • docker commit <container-id>

該命令將容器的可讀性轉換爲了一個只讀層,這樣就把一個容器轉換成了不可變的鏡像。

 
  • docker build

構建

 
  • docker exec <running-container-id>

該命令會在運行中的容器執行一個新的進程

 
  • docker inspect <container-id> or <image-id>

docker inspect命令會提取出容器或者鏡像最頂層的元數據。

 
  • docker save <image-id>

該命令會創建一個鏡像的壓縮文件,這個文件能夠在;另外一個主機的docker上使用。和export命令不同,這個命令爲每一個層都保存了他們的元數據。這個命令只能對鏡像生效。

 
  • docker export <container-id>

該命令會創建一個tar文件,並且移除了元數據和不必要的層,將多個層整合成了一個層,只保存了當前統一視角看到的內容

 
  • docker history <image-id>

這個命令遞歸的輸出指定鏡像的歷史鏡像。

 
  • 刪除所有終止的容器

docker rm $(docker ps -a -q)

docker基本命令

    1. 查看docker信息
# 查看版本
docker version

#顯示docker系統信息
docker info
  • 2.對image的操作
# 檢索image
docker search image_name

# 下載image
docker pull image_name

# 列出鏡像列表
# -a 展示所有image; -q 僅展示id, 
docker images

# 刪除一個或多個鏡像
# -f 強制,
docker rmi image_nmae

# 顯示一個鏡像的歷史
docker history image_nmae


啓動容器

OPTIONS說明:

-a stdin: 指定標準輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;

-d: 後臺運行容器,並返回容器ID;

-i: 以交互模式運行容器,通常與 -t 同時使用;

-t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;

--name="nginx-lb": 爲容器指定一個名稱;

--dns 8.8.8.8: 指定容器使用的DNS服務器,默認和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 設置環境變量;

--env-file=[]: 從指定文件讀入環境變量;

--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;

-m :設置容器使用內存最大值;

--net="bridge": 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;

--link=[]: 添加鏈接到另一個容器;

--expose=[]: 開放一個端口或一組端口;

# 在容器中運行echo命令,輸出hello word
docker run image_name echo "hello word"

# 交互式進入容器中
docker run -i -t image_name /bin/bash

# 在容器中安裝新的程序
docker run image_name yum install -y app_name

Note: 在執行apt-get 命令的時候,要帶上-y參數。如果不指定-y參數的話,apt-get命令會進入交互模式,需要用戶輸入命令來進行確認,但在docker環境中是無法響應這種交互的。apt-get 命令執行完畢之後,容器就會停止,但對容器的改動不會丟失。

查看容器

1. 最常見的用法

$ docker ps

顯示當前正在運行的容器。

在 PORTS 一列,如果暴露的端口是連續的,還會被合併在一起,例如一個容器暴露了3個 TCP 端口:100,101,102,則會顯示爲 100-102/tcp。

2. 顯示所有狀態的容器

$ docker ps -a

容器的狀態共有 7 種:created|restarting|running|removing|paused|exited|dead。

3. 顯示最後被創建的 n 個容器

$ docker ps -n 3

注意,這裏不限狀態。

4. 顯示最後被創建的容器

$ docker ps -l

相當於 docker ps -n 1。

5. 顯示完整輸出

$ docker ps --no-trunc

即不會截斷輸出。該選項有點長,其中 trunc 算是 truncate 的縮寫。

6. 只顯示容器 ID

$ docker ps -q

清理容器時非常好用,filter 過濾顯示一節有具體實例。

7. 顯示容器文件大小

$ docker ps -s

該命令很實用,可以獲得 2 個數值:一個是容器真實增加的大小,一個是整個容器的虛擬大小。


8 -f
1. 選項後跟的都是鍵值對 key=value (可不帶引號),如果有多個過濾條件,就多次使用 filter 選項。例如:

docker ps --filter id=a1b2c3 --filter name=bingohuang

2. 相同條件之間的關係是或,不同條件之間的關係是與。例如:

docker ps --filter name=bingo --filter name=huang --filter status=running

以上過濾條件會找出 name 包含 bingo 或 huang 並且 status 爲 running 的容器。

3. id 和 name,支持正則表達式,使用起來非常靈活。例如:

docker ps --filter name=^/bingohuang$

精確匹配 name 爲 bingohuang 的容器。注意,容器實際名稱,開頭是有一個正斜線 / ,可用 docker inspect 一看便知。

docker ps --filter name=.*bingohuang.*

匹配 name 包含 bingohuang 的容器,和 --filter name=bingohuang 一個效果。

最後, 舉一個複雜點的例子,用於清理名稱包含 bingohuang,且狀態爲 exited 或 dead 的容器:

docker rm $(docker ps -q --filter name=.*bingohuang.* --filter status=exited --filter status=dead2>/dev/null)

Format 格式化顯示

如果想自定義顯示容器字段,可以用格式化選項 --format 。
1. 當使用了 --format 選項,那麼 ps 命令只會輸出 template 中指定的內容:

$ docker ps --format "{{.ID}}: {{.Command}}"

a87ecb4f327c: /bin/sh -c #(nop) MA

01946d9d34d8: /bin/sh -c #(nop) MA

c1d3b0166030: /bin/sh -c yum -y up

41d50ecd2f57:/bin/sh -c #(nop) MA

2. 如果想帶上表格列頭,需要再 template 中加上 table 指令:

保存對容器的修改

  • 當你對某一個容器做了修改之後(通過在容器中運行某一個命令),可以把對容器的修改保存下來,這樣下次可以從保存後的最新狀態運行該容器。
#  -a  作者信息, -m 提交的信息
docker commit ID new_image_name

Note:image相當於類,container相當於實例,不過可以動態給實例安裝新軟件,然後把這個container用commit命令固化成一個image。

對容器的操作(注意是容器,不是鏡像)

# 刪除所有容器
docker rm `docker ps -a -q`

# 刪除鏡像,注意,需要先刪除容器,並且刪除前需要保證容器時停止的,然後才能刪除鏡像.
docker rmi image_id




#刪除單個容器;- f 強制;-l, 刪除指定的鏈接,而不是底層容器;-v 刪除與容器關聯的卷
docker rm Name/ID

# 停止、啓動、殺死一個容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID

# 從一個容器中獲取日誌
# -f ,-t 展示時間戳

# 列出一個容器裏面被改變的文件或者目錄,list列表會顯示出三種事件,A 增加的, D 刪除的 ,C 被改變的
docker diff Name/ID

# 顯示一個運行的容器裏面的進程信息
docker top Name/ID

# 從容器裏面拷貝文件、目錄到本地一個路徑
docker restart Name/ID

# 附加到一個運行的容器上面
#--detach-keys string  覆蓋用於分離容器的鍵序列
#--no-stdin            沒有附加STDIN
#--sig-proxy           代理所有接收到的信號到進程(默認爲true)


保存和加載鏡像

  • 當需要把一臺機器上的鏡像遷移到另一臺機器的時候,需要保存鏡像與加載鏡像。
# 保存鏡像到一個tar包;-o filename  寫入到這個文件。
docker save image_name -o file_path

# 加載一個tar包格式的鏡像; -i --input="" read from a tar archive file
docker load -i file_path

# 機器a
docker save image_name > /home/save.tar

# 使用scp將save.tar拷到機器b上
docker load < /home/save.tar



8.登錄registry server


# 登陸registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username  
$docker login  
登錄成功後會在用戶目錄下的.docker目錄中有一個config.json文件,裏面保存了用戶的信息.

9. 發佈image

docker push new_image_name

10. 根據Dockerfile構建出一個容器

      --add-host list           添加自定義主機到ip映射(主機:ip)
      --build-arg list          設置構建時變量
      --cache-from strings      將圖像視爲緩存源
      --cgroup-parent string    可選的容器父cgroup
      --compress                使用gzip壓縮構建上下文
      --cpu-period int          限制CPU CFS(完全公平調度程序)的週期
      --cpu-quota int           限制CPU CFS(完全公平調度程序)配額
  -c, --cpu-shares int          CPU份額(相對權重)
      --cpuset-cpus string      允許執行的cpu (0- 3,0,1)
      --cpuset-mems string      允許執行的MEMs (0- 3,0,1)
      --disable-content-trust   跳過圖像驗證(默認爲true)
  -f, --file string             Dockerfile的名稱(默認爲‘PATH/Dockerfile’)
      --force-rm                總是移除中間容器
      --iidfile string          將圖像ID寫入文件
      --isolation string        容器隔離技術
      --label list              爲圖像設置元數據
  -m, --memory bytes            內存限制
      --memory-swap bytes       交換限制等於內存加上交換:'-1'以啓用無限交換
      --network string          在構建期間爲運行指令設置網絡模式(默認“默認”)
      --no-cache                在構建映像時不使用緩存
      --pull                    總是嘗試拉出圖像的新版本
  -q, --quiet                   成功時禁止生成輸出和打印圖像ID
      --rm                      成功構建後刪除中間容器(默認爲true)
      --security-opt strings    安全選項
      --shm-size bytes          /dev/shm大小
  -t, --tag list                名稱和可選的“Name:tag”格式的標記
      --target string           設置要構建的目標構建階段。
      --ulimit ulimit           Ulimit選項(默認[])
      
      
docker build -t image_name Dockerfile_path

爲鏡像打印標記

dcoker tag server:latest myname/server:lastest
or
docker tag d583c3ac45fd myname/server:latest

# https://blog.csdn.net/yangshangwei/article/details/52799675



最後歡迎大家批評指正,您的建議就是我前進的動力。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章