『現學現忘』Docker常用命令 — 21、容器常用命令(三)
阿新 • • 發佈: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 ~]#
可以看到
- 在末尾追加Linux命令的時候,不要寫
/bin/bash
。我寫了,執行命令並沒有反應。 - Linux命令容器中執行完成後,命令提示符還是會到宿主機上,也就是完成了不關閉容器退出。
(3)attach和exec的區別
attach
:
- 不會在容器中建立程序,來執行額外的命令,只是進入到容器中。
- 如果執行
exit
命令退出容器,容器會停止執行。
exec
:
- 會在執行的容器上,建立程序,來執行新的命令。
- 如果執行
exit
命令退出容器,不會導致容器停止執行。
14、從容器內拷貝檔案到主機上
命令:docker cp 容器ID:容器內路徑 目的主機的路徑
如下圖:
示例:
先檢視宿主機/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常用命令圖解:
Docker的命令是十分多的,上面圖中的命令都是非常常用的命令,之後我們還會學習很多命令。說明如下:
(1)容器生命週期管理
-
run
:Run a command in a new container
,建立一個新的容器並執行一個命令。 -
start
:Start a stopped containers
,啟動容器。 -
restart
:Restart a running container
,重啟執行的容器。 -
stop
:Stop a running containers
,停止容器。 -
kill
:Kill a running container
,kill
指定Docker容器。 -
rm
:Remove one or more containers
,移除一個或者多個容器。 -
pause
:Pause all processes within a container
,暫停容器。 -
unpause
:Unpause a paused container
,取消暫停容器。 -
create
:Create a new container
,建立一個新的容器,同run
,但不啟動容器。
(2)容器操作
-
ps
:List containers
,列出容器列表。 -
inspect
:Return low-level information on a container
,檢視容器詳細資訊。 -
top
:Lookup the running processes of a container
,檢視容器中執行的程序資訊。 -
events
:Get real time events from the server
,從Docker服務獲取容器實時事件。 -
exec
:Run a command in an existing container
,在己存在的容器上執行命令。 -
attach
命令:Attach to a running container
,當前shell
下attach
連線指定執行容器。 -
logs
:Fetch the logs of a container
,輸出當前容器日誌資訊。 -
wait
:Block until a container stops,then print its exit code
,擷取容器停止時的退出狀態值。 -
export
:Stream the contents of a container as a tar archive
,匯出容器的內容流作為一個tar
歸檔檔案[對應import
]。 -
port
:Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
,檢視對映埠對應的容器內部源埠。
(3)映象倉庫
-
login
:Register or Login to the docker registry server
,註冊或者登陸一個Docker源伺服器。 -
logout
:Log out from a Docker registry server
,從當前Docker registry
退出。 -
pull
:Pull an image or a repository from the docker registry server
,從Docker映象源伺服器拉取指定映象或者庫映象。 -
push
:Push an image or a repository to the docker registry server
,推送指定映象或者庫映象至Docker源伺服器。 -
search
:Search for an image on the Docker Hub
,在Docker Hub
中搜索映象。
(4)容器rootfs命令
-
commit
:Create a new image from a container changes
,提交當前容器為新的映象。 -
cp
:Copy files/folders from the containers filesystem to the host path
,從容器中拷貝指定檔案或者目錄到宿主機中。 -
diff
:Inspect changes on a container's filesystem
,檢視Docker容器變化。
(5)本地映象管理
-
images
:List images
,列出系統當前映象。 -
rmi
:Remove one or more images
,移除一個或多個映象[無容器使用該映象才可刪除,否則需刪除相關容器才可繼續或-f
強制刪除]。 -
tag
:Tag an image into a repository
,給源中映象打標籤。 -
build
命令:Build an image from a Dockerfile
,通過Dockerfile定製映象。 -
history
:Show the history of an image
,展示一個映象形成歷史。 -
load
:Load an image from a tar archive
,從一個tar
包中載入一個映象[對應save
]。 -
save
:Save an image to a tar archive
,儲存一個映象為一個tar
包[對應load
]。 -
import
:Create a new filesystem image from the contents of a tarball
,從tar
包中的內容建立一個新的檔案系統映像[對應export
]。
(6)info|version
-
info
:Display system-wide information
,顯示系統相關資訊。 -
version
:Show the docker version information
,檢視Docker版本號。