『現學現忘』Docker常用命令 — 19、容器常用命令(一)

繁華似錦Fighting發表於2022-03-15

有映象才能建立容器,這是根本前提。

我們下載一個CentOS映象作為演示。

[root@192 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

[root@192 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   3 months ago   209MB

1、新建並啟動容器

命令:docker run [OPTIONS] IMAGE(映象名) [COMMAND] [ARG...(引數)]

常用OPTIONS說明:有些是一個減號,有些是兩個減號。

  • --name="容器新名字":為容需指定一個名稱,如tomcat1tomcat2用來區分容器。
  • -d:後臺執行容器,並返回容器ID,即啟動守護式容器。
  • -i:以互動模式執行容器,可進入容器檢視內容,通常與-t同時使用。(常用)
  • -t:為容器重新分配一個偽輸入終端,通常與-i同時使用。(常用)
  • -P:大寫P表示,Docker會隨機選擇一個宿主機埠,對映到容器內部開放的網路埠上。
  • -p:小寫p表示,Docker會選擇一個具體的宿主機埠,對映到容器內部開放的網路埠上。
    有以下四種格式:
    • -p ip:主機埠(hostPort):容器埠(containerPort)
    • -p 主機埠:容器埠 (常用)
    • -p 容器埠
    • -p ip::容器埠(待確定)

啟動映象示例:

使用映象centos:latest,以互動模式啟動一個容器,在容器內執行/bin/bash命令。

# 檢視本地映象
[root@192 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   3 months ago   209MB

# 建立啟動容器,並進入容器
[root@192 ~]# docker run -it 300e315adb2f /bin/bash
[root@5b6c5748a7b9 /]# 

# 以上說明以ID為300e315adb2f的這個映象,生成了一個名稱為5b6c5748a7b9的容器。
# 此時我們已經登陸在啟動的CentOS容器中了。
# 我們可以正常使用Linux命令來進行操作了,如下:
[root@5b6c5748a7b9 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@5b6c5748a7b9 /]# pwd
/
[root@5b6c5748a7b9 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 17:21 pts/0    00:00:00 /bin/bash

提示:因為Docker的CentOS映象只有200M左右,所以是CentOS系統的基礎版本,會有很多命令都是不完善。

2、列出當前所有正在執行的容器

命令:docker ps [OPTIONS]

我們從XShell中複製一個shell視窗,執行docker ps命令,如下:

image

說明:

  • 5b6c5748a7b9的STATUS選項是Up 狀態,說明該容器是啟動狀態。
  • 如果啟動容器的時候,沒有指定--name屬性,系統會自動分配一個名字給容器,如上圖中的hopeful_goldberg

提示:我們可以看到有一個CONTAINER ID5b6c5748a7b9容器正在執行,這個5b6c5748a7b9和上邊示例的Linux系統命令提示符[root@5b6c5748a7b9 /]中的名稱相吻合。

常用OPTIONS說明:

  • -a:列出當前所有正在執行的容器+歷史上執行過的容器。
  • -l:顯示最近建立的容器。
  • -n:顯示最近n個建立的容器,例如-n=3或者-n 3
  • -q:只顯示容器編號。(常用)
  • --no-trunc:不截斷輸出,顯示完整的映象資訊。

示例:

[root@192 ~]# docker ps -qa --no-trunc -n=3
f9444cf9f26f2f0e12aa309d1914a06553575fb00f6301ce541753fb92d00c0a
136475a80d92856c78c202b50edfff2e1cd61a4b832b5ed8fb767c546f355727
5b6c5748a7b9072ce246d546dbc4e4f7b69796fbeeb6884286e78cbbc94a7c0c
[root@192 ~]# docker ps -qa --no-trunc -n 3
f9444cf9f26f2f0e12aa309d1914a06553575fb00f6301ce541753fb92d00c0a
136475a80d92856c78c202b50edfff2e1cd61a4b832b5ed8fb767c546f355727
5b6c5748a7b9072ce246d546dbc4e4f7b69796fbeeb6884286e78cbbc94a7c0c

3、退出容器

在Docker中退出容器有兩種方式。

  1. exit:容器停止退出。
  2. ctrl+P+Q:容器不停止退出,(注意是大寫PQ)。

示例1:

# exit命令演示
# 1.檢視本機docker映象
[root@192 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   3 months ago   209MB

# 2.建立啟動並進入centos容器
[root@192 ~]# docker run -it 300e315adb2f /bin/bash

# 3.執行exit命令,停止並退出容器
[root@136475a80d92 /]# exit
exit

# 檢視當前宿主機上正在執行的容器,可以看到沒有任何容器正在執行。
[root@192 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@192 ~]# 

示例2:

# ctrl+P+Q退出容器演示
# 1.檢視本機docker映象
[root@192 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   3 months ago   209MB

# 2.建立啟動並進入centos容器,注意--name=mycentos 要解除安裝容器名前邊
[root@192 ~]# docker run -it --name=mycentos 300e315adb2f  /bin/bash
[root@14b077f2496b /]# 

# 3.ctrl+P+Q,不停止並退出容器
# 4.檢視當前宿主機上正在執行的容器,可以看到14b077f2496b容器正在執行。
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS          PORTS     NAMES
14b077f2496b   300e315adb2f   "/bin/bash"   About a minute ago   Up 59 seconds             mycentos

[root@192 ~]#

4、啟動容器

就是啟動之前被關閉的容器。

示例:

檢視當前宿主機中的容器。

image

我們可以看到,此時宿主機上有2個容器正在執行Up,有2個容器是關閉狀態Exited

我們可以通過命令:docker start 容器ID或者容器名,重新啟動容器。

如下圖:

執行啟動容器命令後,會啟動容器,並返回啟動的容器ID。

image

可以看到上圖中,第三個容器136475a80d92,已經被啟動了。

5、重啟容器

就是重新啟動一個容器。

命令:docker restart 容器ID或者容器名

示例:

先檢視當前宿主機的容器狀態。

image

然後重啟第一個容器,ID為14b077f2496b,名稱為mycentos

這裡我們一定要注意看STATUS 狀態為Up 2 hours

我們重啟該容器,並檢視他的啟動時間。

image

我們可以看到重啟之後,mycentos容器的啟動時間變為了4秒,說明該容器進行了重啟。

6、停止容器

停止正在執行的容器。(正常關閉容器)

命令:docker stop 容器ID或者容器名

演示:

先檢視當前宿主機的容器狀態。

image

執行命令關閉第三個容器,如下圖:

image

7、強制停止容器

停止正在執行的容器。(暴力關閉容器)

命令:docker kill 容器ID或者容器名

演示:

先檢視當前宿主機的容器狀態。

image

執行命令,強制關閉第二個容器,如下圖:

image

8、刪除已停止的容器

命令:docker rm 容器ID

(1)刪除一個已停止的容器

先檢視當前宿主機的容器狀態。

image

刪除第一個正在執行的容器,如下:

[root@192 ~]# docker rm 14b077f2496b
Error response from daemon: You cannot remove a running container 14b077f2496b3c11d041a8bb138f60b32538ddedebe88245dc805a25669d0d83. Stop the container before attempting removal or force remove

守護程式daemon會提示我們,您不能刪除正在執行的容器,請先停止容器。

如果需要刪除正在執行的容器,加-f引數,進行強制刪除。

那我們接下來刪除第二個容器,如下:

image

可以看到,第二個容器已經刪除,現在宿主機上只有3個容器了。

(2)一次性刪除多個已停止的容器

命令:docker rm 容器1ID 容器2ID 容器3ID ...

示例:

刪除第二第三個容器,如下:

[root@192 ~]# docker rm 136475a80d92 5b6c5748a7b9
136475a80d92
5b6c5748a7b9
[root@192 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS        PORTS  NAMES
14b077f2496b   300e315adb2f   "/bin/bash"   3 hours ago   Up 19 minutes        mycentos

我們可以看到,此時宿主機上只有一個容器了。

(3)刪除所有本機已停止的容器

  • 方式一:
    命令:docker rm -f $(docker ps -aq)
    說明:docker rm -f 刪除所有docker ps -aq命令顯示容器ID對應的容器。
  • 方式二:
    docker ps -aq| xargs docker rm
    說明:docker ps -aq命令執行的結果,通過管道符,傳遞給後邊的xargs
    xargs是給命令傳遞引數的一個過濾器,以將管道或標準輸入的資料轉換成引數。

相關文章