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

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

13、進入正在執行的容器並以命令列互動

我們通常使用容器的方式都是後臺執行模式,如果需要進入容器,則有兩種方式。

  • docker attach 容器ID
  • docker exec -it 容器ID /bin/bash(常用)

查詢當前虛擬機器的映象。

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

啟動CentOS映象,並ctrl+P+Q退出容器。

[root@192 ~]# docker run -it 300e315adb2f
[root@31281b319328 /]#
[root@192 ~]#

# 檢視當前宿主機中正在執行的容器
[root@192 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS
31281b319328   300e315adb2f   "/bin/bash"   3 minutes ago   Up 3 minutes

(1)方式一

命令:docker attach 容器ID

# 通過docker attach進入正在執行的容器中
[root@192 ~]# docker attach 31281b319328
[root@31281b319328 /]# ls 
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@31281b319328 /]# ll
bash: ll: command not found
[root@31281b319328 /]# ls -l
total 0
lrwxrwxrwx.   1 root root   7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x.   5 root root 360 Mar 16 12:11 dev
drwxr-xr-x.   1 root root  66 Mar 16 12:11 etc
drwxr-xr-x.   2 root root   6 Nov  3 15:22 home
lrwxrwxrwx.   1 root root   7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Nov  3 15:22 lib64 -> usr/lib64
drwx------.   2 root root   6 Dec  4 17:37 lost+found
drwxr-xr-x.   2 root root   6 Nov  3 15:22 media
drwxr-xr-x.   2 root root   6 Nov  3 15:22 mnt
drwxr-xr-x.   2 root root   6 Nov  3 15:22 opt
dr-xr-xr-x. 124 root root   0 Mar 16 12:11 proc
dr-xr-x---.   2 root root 162 Dec  4 17:37 root
drwxr-xr-x.  11 root root 163 Dec  4 17:37 run
lrwxrwxrwx.   1 root root   8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3 15:22 srv
dr-xr-xr-x.  13 root root   0 Mar 16 03:17 sys
drwxrwxrwt.   7 root root 145 Dec  4 17:37 tmp
drwxr-xr-x.  12 root root 144 Dec  4 17:37 usr
drwxr-xr-x.  20 root root 262 Dec  4 17:37 var
[root@31281b319328 /]# pwd
/

我們可以看到進入到容器可以正常的執行Linux命令。

提示:在啟動CentOS映象的時候,不加/bin/bash也可以,因為預設就是/bin/bash命令格式。

(2)方式二

命令:docker exec -it 容器ID /bin/bash(常用)

注意:這個命令的/bin/bash必須加。

# 通過docker exec 進入正在執行的容器中
[root@192 ~]# docker exec -it 31281b319328 /bin/bash
[root@31281b319328 /]#

# 執行Linux命令
[root@31281b319328 /]# pwd
/
[root@31281b319328 /]# ls -l /tmp/
total 8
-rwx------. 1 root root 701 Dec  4 17:37 ks-script-esd4my7v
-rwx------. 1 root root 671 Dec  4 17:37 ks-script-eusq_sc5

docker exec命令中可以直接加對容器的操作命令,如下:

# 在docker exec命令的結尾加入`ls -l /tmp`Linux命令
[root@192 ~]# docker exec -it 31281b319328 ls -l /tmp
total 8
-rwx------. 1 root root 701 Dec  4 17:37 ks-script-esd4my7v
-rwx------. 1 root root 671 Dec  4 17:37 ks-script-eusq_sc5
[root@192 ~]#

可以看到

  1. 在末尾追加Linux命令的時候,不要寫/bin/bash。我寫了,執行命令並沒有反應。
  2. Linux命令容器中執行完成後,命令提示符還是會到宿主機上,也就是完成了不關閉容器退出。

(3)attach和exec的區別

attach

  • 不會在容器中建立程式,來執行額外的命令,只是進入到容器中。
  • 如果執行exit命令退出容器,容器會停止執行。

exec

  • 會在執行的容器上,建立程式,來執行新的命令。
  • 如果執行exit命令退出容器,不會導致容器停止執行。

14、從容器內拷貝檔案到主機上

命令:docker cp 容器ID:容器內路徑 目的主機的路徑

如下圖:

image

示例:

先檢視宿主機/home目錄中的內容:

[root@192 ~]# ll /home/
總用量 0

可以看到沒有任何檔案。

開始從容器內拷貝檔案到主機上:

# 1.檢視宿主機上的映象
[root@192 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   3 months ago   209MB

# 2.啟動centos映象
[root@192 ~]# docker run -it centos

# 3.進入容器的/home/目錄,檢視目錄中的內容
[root@f68cb580db71 /]# cd /home/
[root@f68cb580db71 home]# ls -l
total 0

# 4.在容器內的/home/目錄中,新建一個檔案test.py
[root@f68cb580db71 home]# touch test.py
[root@f68cb580db71 home]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 16 13:43 test.py

# 5.將容器內的/home/目錄中test.py檔案,拷貝到宿主機的/home/目錄中
# 5.1 先退回到宿主機上,容器可以是執行狀態,也可以是停止狀態
[root@f68cb580db71 home]# exit
exit
[root@192 ~]# 
# 5.2 執行拷貝命令,下面命令/home/改檔名,也是可以的。
[root@192 ~]# docker cp f68cb580db71:/home/test.py /home
# 5.3 檢視宿主機/home/目錄,已經從容器中拷貝過來了test.py檔案
[root@192 ~]# ls -l /home/
總用量 0
-rw-r--r--. 1 root root 0 3月  16 21:43 test.py

提示:

拷貝是一個手動的過程,未來我們使用-v資料卷的技術,可以實現自動同步。

比如容器內的/home目錄和宿主機的/home目錄進行聯通同步。

Docker的命令是十分多的,上面我們學習的那些都是最常用的,且關於的容器和映象的命令,之後我們還會學習很多命令。

15、Docker常用命令小結

Docker常用命令圖解:

image

Docker的命令是十分多的,上面圖中的命令都是非常常用的命令,之後我們還會學習很多命令。說明如下:

(1)容器生命週期管理

  • runRun a command in a new container,建立一個新的容器並執行一個命令。
  • startStart a stopped containers,啟動容器。
  • restartRestart a running container,重啟執行的容器。
  • stopStop a running containers,停止容器。
  • killKill a running containerkill指定Docker容器。
  • rmRemove one or more containers,移除一個或者多個容器。
  • pausePause all processes within a container,暫停容器。
  • unpauseUnpause a paused container,取消暫停容器。
  • createCreate a new container,建立一個新的容器,同run,但不啟動容器。

(2)容器操作

  • psList containers,列出容器列表。
  • inspectReturn low-level information on a container,檢視容器詳細資訊。
  • topLookup the running processes of a container,檢視容器中執行的程式資訊。
  • eventsGet real time events from the server,從Docker服務獲取容器實時事件。
  • execRun a command in an existing container,在己存在的容器上執行命令。
  • attach命令:Attach to a running container,當前shellattach連線指定執行容器。
  • logsFetch the logs of a container,輸出當前容器日誌資訊。
  • waitBlock until a container stops,then print its exit code,擷取容器停止時的退出狀態值。
  • exportStream the contents of a container as a tar archive,匯出容器的內容流作為一個tar歸檔檔案[對應import]。
  • portLookup the public-facing port which is NAT-ed to PRIVATE_PORT,檢視對映埠對應的容器內部源埠。

(3)映象倉庫

  • loginRegister or Login to the docker registry server,註冊或者登陸一個Docker源伺服器。
  • logoutLog out from a Docker registry server,從當前Docker registry退出。
  • pullPull an image or a repository from the docker registry server,從Docker映象源伺服器拉取指定映象或者庫映象。
  • pushPush an image or a repository to the docker registry server,推送指定映象或者庫映象至Docker源伺服器。
  • searchSearch for an image on the Docker Hub,在Docker Hub中搜尋映象。

(4)容器rootfs命令

  • commitCreate a new image from a container changes,提交當前容器為新的映象。
  • cpCopy files/folders from the containers filesystem to the host path,從容器中拷貝指定檔案或者目錄到宿主機中。
  • diffInspect changes on a container's filesystem,檢視Docker容器變化。

(5)本地映象管理

  • imagesList images,列出系統當前映象。
  • rmiRemove one or more images,移除一個或多個映象[無容器使用該映象才可刪除,否則需刪除相關容器才可繼續或-f強制刪除]。
  • tagTag an image into a repository,給源中映象打標籤。
  • build命令:Build an image from a Dockerfile,通過Dockerfile定製映象。
  • historyShow the history of an image,展示一個映象形成歷史。
  • loadLoad an image from a tar archive,從一個tar包中載入一個映象[對應save]。
  • saveSave an image to a tar archive,儲存一個映象為一個tar包[對應load]。
  • importCreate a new filesystem image from the contents of a tarball,從tar包中的內容建立一個新的檔案系統映像[對應export]。

(6)info|version

  • infoDisplay system-wide information,顯示系統相關資訊。
  • versionShow the docker version information,檢視Docker版本號。

相關文章