docker常用命令列表

本文大部分內容來自Docker–從入門到實踐

命令 功能
docker images [-a] 查看本地鏡像
docker images -q 只顯示鏡像的id信息
docker rmi [-f] <鏡像> 刪除指定鏡像
docker ps [-a] 查看當前正在運行的容器,-a表示顯示所有的容器
docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤] 從 Docker 鏡像倉庫獲取鏡像
docker run <鏡像> 根據某個鏡像創建容器,如果鏡像不存在,就去遠方拉取
docker run -d 讓容器在後臺運行,其實就是一個進程
docker run --name NAME 給容器指定一個名字
docker run -p [容器宿主機端口]:[容器端口] 將容器的端口映射到宿主機的端口
docker exec -it <容器> [bash|/bin/bash|sh] 進入到某個容器中,通過命令交互

鏡像操作

獲取鏡像

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]

具體的選項可以通過 docker pull --help 命令看到,這裏我們說一下鏡像名稱的格式。

  • Docker 鏡像倉庫地址:地址的格式一般是 <域名/IP>[:端口號]。默認地址是 Docker Hub。
  • 倉庫名:如之前所說,這裏的倉庫名是兩段式名稱,即 <用戶名>/<軟件名>。對於 Docker Hub,如果不給出用戶名,則默認爲 library,也就是官方鏡像。
docker pull ubuntu:18.04
# 18.04: Pulling from library/ubuntu
# 23884877105a: Pull complete
# bc38caa0f5b9: Pull complete
# 2910811b6c42: Pull complete
# 36505266dcc6: Pull complete
# Digest: sha256:3235326357dfb65f1781dbc4df3b834546d8bf914e82cce58e6e6b676e23ce8f
# Status: Downloaded newer image for ubuntu:18.04
# docker.io/library/ubuntu:18.04

上面的命令中沒有給出 Docker 鏡像倉庫地址,因此將會從 Docker Hub 獲取鏡像。而鏡像名稱是 ubuntu:18.04,因此將會獲取官方鏡像 library/ubuntu 倉庫中標籤爲 18.04 的鏡像。

從下載過程中可以看到我們之前提及的分層存儲的概念,鏡像是由多層存儲所構成。下載也是一層層的去下載,並非單一文件。下載過程中給出了每一層的 ID 的前 12 位。並且下載結束後,給出該鏡像完整的 sha256 的摘要,以確保下載一致性。

列出鏡像

要想列出已經下載下來的鏡像,可以使用 docker image ls 命令。鏡像 ID 則是鏡像的唯一標識,一個鏡像可以對應多個 標籤

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               c3c304cb4f22        4 weeks ago         64.2MB
gitlab/gitlab-ce    latest              6597e56a80f3        5 weeks ago         1.92GB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

列出特定的某個鏡像

# 倉庫名列出鏡像
$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               f753707788c5        4 weeks ago         127 MB
ubuntu              latest              f753707788c5        4 weeks ago         127 MB
# 指定倉庫名和標籤
$ docker image ls ubuntu:18.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               f753707788c5        4 weeks ago         127 MB

指定過濾器顯示鏡像

# mongo:3.2 之後建立的鏡像
$ docker image ls -f since=mongo:3.2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              5f515359c7f8        5 days ago          183 MB
nginx               latest              05a60462f8ba        5 days ago          181 MB
# mongo:3.2 之前建立的鏡像
$ docker image ls -f before=mongo:3.2
...
# 使用label過濾
$ docker image ls -f label=com.example.version=0.1
...

顯示鏡像摘要 DIGEST

$ docker image ls --digests
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
ubuntu              18.04               sha256:3235326357dfb65f1781dbc4df3b834546d8bf914e82cce58e6e6b676e23ce8f   c3c304cb4f22        4 weeks ago         64.2MB
gitlab/gitlab-ce    latest              sha256:9be324293de2447c7b19146b58b01d2fae5b8539364bc4b4e0b3ffc45625006e   6597e56a80f3        5 weeks ago         1.92GB
hello-world         latest              sha256:8e3114318a995a1ee497790535e7b88365222a21771ae7e53687ad76563e8e76   bf756fb1ae65        4 months ago        13.3kB

顯示鏡像的ID

$ docker image ls -q
c3c304cb4f22
6597e56a80f3
bf756fb1ae65
# 刪除所有倉庫名爲 redis 的鏡像:
$ docker image rm $(docker image ls -q redis)
# 刪除所有在 mongo:3.2 之前的鏡像:
$ docker image rm $(docker image ls -q -f before=mongo:3.2)

自定義顯示列表,這裏用到了Go 的模板語法

$ docker image ls --format "{{.ID}}: {{.Repository}}"
5f515359c7f8: redis
05a60462f8ba: nginx
# 以表格等距顯示,並且有標題行
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY          TAG
5f515359c7f8        redis               latest
05a60462f8ba        nginx               latest
fe9198c04d62        mongo               3.2

刪除本地鏡像

docker image rm [選項] <鏡像短 ID|鏡像長 ID|鏡像名|鏡像摘要1> [<鏡像2> ...]
Aliases:
  rm, rmi, remove

容器操作

新建並啓動容器

下面的命令於ubuntu:18.04鏡像新建一個容器並啓動輸出一個 “Hello World”,之後終止容器

docker run ubuntu:18.04 /bin/echo 'Hello world'
# Hello world

啓動一個 bash 終端,允許用戶進行交互

docker run -t -i ubuntu:18.04 /bin/bash
root@af8bae53bdd3:/#

-t 選項讓Docker分配一個僞終端(pseudo-tty)並綁定到容器的標準輸入上,

-i 則讓容器的標準輸入保持打開。在交互模式下的操作,就跟使用一臺虛擬機一樣了。

當利用 docker run 來創建容器時,Docker 在後臺運行的標準操作包括:

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  • 利用鏡像創建並啓動一個容器
  • 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
  • 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
  • 從地址池配置一個 ip 地址給容器
  • 執行用戶指定的應用程序
  • 執行完畢後容器被終止

容器名字和映射端口

-p 參數用來指定容器和宿主機的映射端口,-name用來指定容器的名字。

docker run --name webserver -d -p 80:80 nginx

後臺運行

通過添加 -d 參數來實現

$ docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a

啓動已經終止的容器

docker <containerName|containerID> start

終止一個容器

docker <containerName|containerID> stop

終止狀態的容器可以用 docker container ls -a 命令查看。

重啓一個容器

docker <containerName|containerID> restart

進入容器

在使用 -d 參數時,容器啓動後會進入後臺。某些時候需要進入容器進行操作,就可以使用exec命令。

docker exec -it <containerName|containerID> /bin/bash

只用 -i 參數時,由於沒有分配僞終端,界面沒有我們熟悉的 Linux 命令提示符,但命令執行結果仍然可以返回。

-i -t 參數一起使用時,則可以看到我們熟悉的 Linux 命令提示符。

$ docker exec -i 69d1 bash
ls
bin
boot
dev
...

$ docker exec -it 69d1 bash
root@69d137adef7a:/#

刪除容器

可以使用 docker container rm 來刪除一個處於終止狀態的容器。例如

$ docker container rm  <containerName|containerID>
trusting_newton

如果要刪除一個運行中的容器,可以添加 -f 參數。Docker 會發送 SIGKILL 信號給容器。

清理所有處於終止狀態的容器

docker container ls -a 命令可以查看所有已經創建的包括終止狀態的容器,如果數量太多要一個個刪除可能會很麻煩,用下面的命令可以清理掉所有處於終止狀態的容器。

$ docker container prune

容器的導入和導出

Docker之間導出/導入鏡像

將文件拷貝到本機

docker container cp命令用於從正在運行的 Docker 容器裏面,將文件拷貝到本機。下面是拷貝到當前目錄的寫法。

docker container cp [containID]:[/path/to/file] .

查看日誌

docker container logs命令用來查看 docker 容器的輸出,即容器裏面 Shell 的標準輸出。如果docker run命令運行容器的時候,沒有使用-it參數,就要用這個命令查看輸出。

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