您好,登錄后才能下訂單哦!
這篇文章主要介紹docker中容器命令有哪些,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
下面我們以下載一個centos鏡像來做演示。
[root@t-docker chenzx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@t-docker chenzx]# docker pull centos Using default tag: latest latest: Pulling from library/centos 256b176beaff: Already exists Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf Status: Downloaded newer image for centos:latest [root@t-docker chenzx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5182e96772bf 3 weeks ago 200MB
功能:新建并啟動容器
參數(shù):
--name='容器新名字':為容器指定一個別名; -d:后臺運行容器,并返回容器ID,也就是啟動守護(hù)式容器; -i:以交互式模式運行容器,通常與-t同時使用; -t:tty,為容器重新分配一個偽終端,通常與-i同時使用; -P:隨機(jī)端口映射; -p:指定端口映射,有以下四種格式: ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort
[root@t-docker chenzx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5182e96772bf 3 weeks ago 200MB [root@t-docker chenzx]# [root@t-docker chenzx]# docker run -it 5182e96772bf ##這句話就是說我以centos鏡像為模板,生成一個23c6bc378d16這樣的一個容器 [root@23c6bc378d16 /]# [root@23c6bc378d16 /]# ls ##這時已經(jīng)進(jìn)入容器的centos里面了 anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
再開另外一個窗口,在宿主機(jī)上執(zhí)行如下命令,看到啟動的容器:
[root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7da6063256a0 centos "/bin/bash" 6 seconds ago Up 5 seconds practical_ardinghelli
[root@t-docker chenzx]# docker run -it --name mycentos0115 centos
[root@0ecd4b9f8895 /]# #看到我們又生成了一個以centos鏡像為模板,id為0ecd4b9f8895的新容器。
畫外音:一個鏡像可以生成多個容器。
[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ecd4b9f8895 centos "/bin/bash" 3 minutes ago Up 3 minutes mycentos0115
[root@t-docker chenzx]#
功能:查看有哪些容器在跑,在宿主機(jī)上執(zhí)行該命令。
參數(shù):
-a:列出當(dāng)前所有正在運行的容器+歷史上運行過的; -l:last,顯示最近創(chuàng)建的容器; -n:顯示最近n個創(chuàng)建的容器; -q:靜默模式,只顯示容器編號 --no-trunc:不截斷輸出
[root@t-docker chenzx]# docker ps ##不加任何參數(shù),表示當(dāng)前正在運行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7da6063256a0 centos "/bin/bash" 6 seconds ago Up 5 seconds practical_ardinghelli
exit:容器停止退出
ctrl+P+Q:容器不停止退出
先查出最近啟動的容器,看到它們是關(guān)閉的狀態(tài):
[root@t-docker chenzx]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ecd4b9f8895 centos "/bin/bash" 7 minutes ago Exited (137) 16 seconds ago mycentos0115 7da6063256a0 centos "/bin/bash" 23 minutes ago Exited (130) 4 minutes ago practical_ardinghelli
啟動容器:
[root@t-docker chenzx]# docker start 0ecd4b9f8895 ##注意加的是上面ps查出的容器id 0ecd4b9f8895 [root@t-docker chenzx]# docker ps #查看當(dāng)前正在運行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ecd4b9f8895 centos "/bin/bash" 8 minutes ago Up 5 seconds mycentos0115
[root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ecd4b9f8895 centos "/bin/bash" 10 minutes ago Up 2 minutes mycentos0115 [root@t-docker chenzx]# docker restart 0ecd4b9f8895 0ecd4b9f8895
[root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ecd4b9f8895 centos "/bin/bash" 12 minutes ago Up About a minute mycentos0115 [root@t-docker chenzx]# [root@t-docker chenzx]# docker stop 0ecd4b9f8895 0ecd4b9f8895
[root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ecd4b9f8895 centos "/bin/bash" 13 minutes ago Up 2 seconds mycentos0115 [root@t-docker chenzx]# [root@t-docker chenzx]# docker kill 0ecd4b9f8895 0ecd4b9f8895
docker rm:刪除容器
docker rmi: 刪除鏡像
[root@t-docker chenzx]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ecd4b9f8895 centos "/bin/bash" 15 minutes ago Exited (137) About a minute ago mycentos0115 7da6063256a0 centos "/bin/bash" 31 minutes ago Exited (130) 11 minutes ago practical_ardinghelli [root@t-docker chenzx]# docker rm 0ecd4b9f8895 刪除已經(jīng)關(guān)閉的容器 0ecd4b9f8895 [root@t-docker chenzx]# docker rm -f 0ecd4b9f8895 強(qiáng)制刪除正在運行中的容器 0ecd4b9f8895
一次性刪除多個容器:
docker rm -rf $(docker ps -a -q)
docker ps -a -q |xargs docker rm
命令格式:docker run -d 容器名
參數(shù)說明:
-d:以守護(hù)式方式啟動容器:
-it:以交互式方式啟動容器;
[root@t-docker chenzx]# docker run -d centos fa80295c878acdf30531ecbf58be87b00427e4f941d10edf93b5d066ba40d000 [root@t-docker chenzx]# docker ps 沒有輸出,奇怪嗎 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
問題:上面我們看到通過docker run -d ceonts方式(即守護(hù)式啟動容器)啟動容器后,再通過docker ps -a進(jìn)行查看,會發(fā)現(xiàn)容器已經(jīng)退出。很重要的說明一點:Docker容器后臺運行,就必須有一個前臺進(jìn)程。
容器運行的命令如果不是那些一直掛起的命令(比如運行top,tail),就是會自動退出的。
這個是docker機(jī)制的問題,比如你的web容器,我們以nginx為例,正常情況下,我們配置啟動服務(wù)只需要啟動相應(yīng)的service即可。例如service nginx start。但是,這樣做,nginx為后臺模式運行,就導(dǎo)致docker前臺沒有運行的應(yīng)用,這樣的容器后臺啟動后,會立即自殺因為他覺得他沒事情可做了。所以,最佳的解決方案是,將你要運行的程序以前臺進(jìn)程的形式運行。
[root@t-docker chenzx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest 690cb3b9c7d1 7 days ago 463MB centos latest 5182e96772bf 3 weeks ago 200MB [root@t-docker chenzx]# [root@t-docker chenzx]# docker run -it centos [root@50fffecec77f /]# exit exit [root@t-docker chenzx]# docker run -it centos /bin/bash ##這個表示使用鏡像centos:latest以交互式模式啟動一個容器,并在容器內(nèi)執(zhí)行/bin/bash命令 [root@4eeeb44eef56 /]# exit exit [root@t-docker chenzx]# docker run -it centos /bin/bash
上面例子是用-it以交互式啟動的容器。
那么你可能要問了,用-d以守護(hù)式啟動容器有什么用呢。
命令格式:docker logs -f -t --tail 容器id
參數(shù)說明:
-t是加入時間戳
-f是跟隨最新的日志打印
--tail是Linux命令,表示顯示最后多少條
[root@t-docker chenzx]# docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done" b118747a68bbfc6698f9ef9e5d817c037c6ecb9835b86964f6a8b90683dcd178 [root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b118747a68bb centos "/bin/sh -c 'while t…" 5 seconds ago Up 4 seconds elegant_euclid
說明:上面命令的意思是用-d以后臺方式運行容器centos,并在容器里面運行命令/bin/bash -c "while true;do echo hello zzyy;sleep 2;done"。最后我們通過docker ps看status是up狀態(tài),說明我們雖然以后臺的方式啟動了,但是這次容器并沒有退出。
root@t-docker chenzx]#man sh -c string If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.
通過如下日志可以證明后臺-d方式運行的容器沒有停止:
[root@t-docker chenzx]# docker logs -t -f --tail 3 b118747a68bb 2018-08-30T01:47:55.198597337Z hello zzyy 2018-08-30T01:47:57.199661966Z hello zzyy 2018-08-30T01:47:59.200811444Z hello zzyy 2018-08-30T01:48:01.202114367Z hello zzyy 2018-08-30T01:48:03.203363568Z hello zzyy
命令格式:docker top 容器id
[root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b118747a68bb centos "/bin/sh -c 'while t…" 8 minutes ago Up 8 minutes elegant_euclid [root@t-docker chenzx]# docker top b118747a68bb UID PID PPID C STIME TTY TIME CMD root 2952 2934 0 09:43 ? 00:00:00 /bin/sh -c while true;do echo hello zzyy;sleep 2;done root 3410 2952 0 09:52 ? 00:00:00 sleep 2
命令格式:docker inspect 容器id
該命令會以json形式返回。
[root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b118747a68bb centos "/bin/sh -c 'while t…" 13 minutes ago Up 13 minutes elegant_euclid [root@t-docker chenzx]# docker inspect b118747a68bb [ { "Id": "b118747a68bbfc6698f9ef9e5d817c037c6ecb9835b86964f6a8b90683dcd178", "Created": "2018-08-30T01:43:24.433793568Z", "Path": "/bin/sh", "Args": [ "-c", "while true;do echo hello zzyy;sleep 2;done" .....
重新進(jìn)入容器的兩個命令:
docker exec -it 容器id bash shell
docker attach 容器id
上面兩個命令的區(qū)別:
attach:直接進(jìn)入容器啟動命令的終端,不會啟動新的進(jìn)程;
exec:是在容器中打開新的終端,并且可以啟動新的進(jìn)程。
[root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@t-docker chenzx]# docker run -it centos [root@3d6cf42834fa /]# 啟動一個容器實例并進(jìn)入容器里面 [root@3d6cf42834fa /]# pwd / [root@3d6cf42834fa /]# exit exit [root@t-docker chenzx]# docker run -it centos /bin/bash [root@3cb3babb797f /]# pwd /
說明:docker run -it centos和docker run -it centos /bin/bash是一樣的。也就是說docker run -it centos,就等價于
docker run -it centos /bin/bash。
繼續(xù)我們的實驗:
[root@t-docker chenzx]# docker run -it centos [root@04b568f7ee84 /]# ctrl+P+Q:容器不停止退出 [root@t-docker chenzx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 04b568f7ee84 centos "/bin/bash" 29 seconds ago Up 28 seconds [root@t-docker chenzx]# docker attach 04b568f7ee84 [root@04b568f7ee84 /]# ls /tmp ks-script-Lu6hIQ yum.log [root@t-docker chenzx]# docker exec -it f188fac12d4f ls /tmp ks-script-Lu6hIQ yum.log 說明: -t表示--tty
上面我們的實驗,可以看到以attch方式進(jìn)入運行中的容器,是需要在容器里面的命令行里面執(zhí)行l(wèi)s /tmp操作;而exec方式進(jìn)入運行中的容器,是直接在exec命令后面寫ls /tmp的操作,并把結(jié)果返回到宿主機(jī)的界面上。不好意思,表達(dá)的可能有點繞,看上面例子就會明白。
不過,exec也有進(jìn)入容器執(zhí)行命令的功能(和attach功能一樣),如下:
[root@t-docker chenzx]# docker exec -it f188fac12d4f /bin/bash [root@f188fac12d4f /]# ls /tmp ks-script-Lu6hIQ yum.log
所以,exec的功能比attach功能強(qiáng)大,建議只學(xué)exec的方式進(jìn)入容器。
應(yīng)用場景:當(dāng)我們以前臺交互式方式運行容器后,如果在容器里面執(zhí)行exit操作,容器就會停止,此時容器中運行的數(shù)據(jù)也就沒有了。這時我們就需要把運行中的容器數(shù)據(jù)拷貝到宿主機(jī)上來保留。
命令格式:docker cp 容器id或容器名:容器內(nèi)路徑 目的宿主機(jī)路徑
[root@t-docker tmp]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f188fac12d4f centos "/bin/bash" 25 minutes ago Up 25 minutes heuristic_nightingale [root@t-docker tmp]# docker cp f188fac12d4f:/tmp/yum.log /tmp/ [root@t-docker tmp]# ls yum.log
命令格式:docker cp 宿主機(jī)路徑 容器id或容器名:容器內(nèi)路徑
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
# 將鏡像導(dǎo)出到文件
1 |
|
# 創(chuàng)建一個新鏡像從導(dǎo)出的文件導(dǎo)入
1 2 |
|
1 2 3 4 5 6 7 8 9 10 |
|
以上是“docker中容器命令有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。