13窗价、進(jìn)入正在運(yùn)行的容器并以命令行交互
我們通常使用容器的方式都是后臺(tái)運(yùn)行模式,如果需要進(jìn)入容器屈糊,則有兩種方式钱烟。
docker attach 容器ID
-
docker exec -it 容器ID /bin/bash
(常用)
查詢當(dāng)前虛擬機(jī)的鏡像
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 3 months ago 209MB
啟動(dòng)centos鏡像,并ctrl+P+Q退出容器
[root@192 ~]# docker run -it 300e315adb2f
[root@31281b319328 /]#
[root@192 ~]#
# 查看當(dāng)前宿主機(jī)中正在運(yùn)行的容器
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
31281b319328 300e315adb2f "/bin/bash" 3 minutes ago Up 3 minutes
方式一
命令:docker attach 容器ID
# 通過docker attach進(jìn)入正在運(yùn)行的容器中
[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
/
我們可以看到進(jìn)入到容器可以正常的執(zhí)行Linux命令眶俩。
提示:在啟動(dòng)centos鏡像的時(shí)候莹汤,不加
/bin/bash
也可以,因?yàn)槟J(rèn)就是/bin/bash
命令格式颠印。
方式二
命令:docker exec -it 容器ID /bin/bash
(常用)
注意:這個(gè)命令的/bin/bash
必須加纲岭。
# 通過docker exec 進(jìn)入正在運(yùn)行的容器中
[root@192 ~]# docker exec -it 31281b319328 /bin/bash
[root@31281b319328 /]#
# 執(zhí)行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
命令中可以直接加對(duì)容器的操作命令,如下:
# 在docker exec命令的結(jié)尾加入`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命令的時(shí)候线罕,不要寫
/bin/bash
止潮。我寫了,執(zhí)行命令并沒有反應(yīng)钞楼。 - Linux命令容器中執(zhí)行完成后喇闸,命令提示符還是會(huì)到宿主機(jī)上,也就是完成了不關(guān)閉容器退出询件。
attach和exec的區(qū)別
attach:
- 不會(huì)在容器中創(chuàng)建進(jìn)程燃乍,來執(zhí)行額外的命令,只是進(jìn)入到容器中宛琅。
- 如果執(zhí)行
exit
命令退出容器刻蟹,容器會(huì)停止運(yùn)行。
exec:
- 會(huì)在運(yùn)行的容器上嘿辟,創(chuàng)建進(jìn)程座咆,來執(zhí)行新的命令痢艺。
- 如果執(zhí)行
exit
命令退出容器,不會(huì)導(dǎo)致容器停止運(yùn)行介陶。
14堤舒、從容器內(nèi)拷貝文件到主機(jī)上
命令:docker cp 容器ID:容器內(nèi)路徑 目的主機(jī)的路徑
如下圖:
示例:
先查看宿主機(jī)/home目錄中的內(nèi)容:
[root@192 ~]# ll /home/
總用量 0
可以看到?jīng)]有任何文件
開始從容器內(nèi)拷貝文件到主機(jī)上:
# 1.查看宿主機(jī)上的鏡像
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 3 months ago 209MB
# 2.啟動(dòng)centos鏡像
[root@192 ~]# docker run -it centos
# 3.進(jìn)入容器的/home/目錄,查看目錄中的內(nèi)容
[root@f68cb580db71 /]# cd /home/
[root@f68cb580db71 home]# ls -l
total 0
# 4.在容器內(nèi)的/home/目錄中哺呜,新建一個(gè)文件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.將容器內(nèi)的/home/目錄中test.py文件舌缤,拷貝到宿主機(jī)的/home/目錄中
# 5.1 先退回到宿主機(jī)上,容器可以是運(yùn)行狀態(tài)某残,也可以是停止?fàn)顟B(tài)
[root@f68cb580db71 home]# exit
exit
[root@192 ~]#
# 5.2 執(zhí)行拷貝命令国撵,下面命令/home/改文件名,也是可以的玻墅。
[root@192 ~]# docker cp f68cb580db71:/home/test.py /home
# 5.3 查看宿主機(jī)/home/目錄介牙,已經(jīng)從容器中拷貝過來了test.py文件
[root@192 ~]# ls -l /home/
總用量 0
-rw-r--r--. 1 root root 0 3月 16 21:43 test.py
提示:
拷貝是一個(gè)手動(dòng)的過程,未來我們使用
-v
數(shù)據(jù)卷的技術(shù)澳厢,可以實(shí)現(xiàn)自動(dòng)同步环础。比如容器內(nèi)的/home目錄和宿主機(jī)的/home目錄進(jìn)行聯(lián)通同步。
Docker的命令是十分多的剩拢,上面我們學(xué)習(xí)的那些都是最常用的线得,且關(guān)于的容器和鏡像的命令,之后我們還會(huì)學(xué)習(xí)很多命令徐伐。