溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker中容器命令有哪些

發(fā)布時間:2021-11-19 11:17:41 來源:億速云 閱讀:164 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹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]# 

docker ps

    功能:查看有哪些容器在跑,在宿主機(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

強(qiáng)制停止容器

[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

刪除已經(jīng)停止的容器

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

以守護(hù)式方式啟動容器

    命令格式: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

查看容器內(nèi)的進(jìn)程

    命令格式: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

查看容器內(nèi)的細(xì)節(jié)

    命令格式: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)入正在運行的容器并以命令行交互

    重新進(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)入容器。

從容器內(nèi)拷貝文件到宿主機(jī)上

    應(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

從宿主機(jī)上拷貝文件到容器內(nèi)

    命令格式:docker cp 宿主機(jī)路徑  容器id或容器名:容器內(nèi)路徑 

容器的導(dǎo)入和導(dǎo)出

1

2

3

[root@#localhost docker]# docker run -it  ubuntu:update /bin/bash

root@cbe3cb7799ed:/# ls

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  update.txt  usr  var

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@#localhost docker]# docker ps -a

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                        PORTS                                   NAMES

cbe3cb7799ed        ubuntu:update                  "/bin/bash"              47 seconds ago      Exited (16 seconds ago                                              adoring_kare

812a997f614a        ubuntu:14.04                   "/bin/bash"              16 minutes ago      Exited (8 minutes ago                                              zealous_euler

69304dea46c7        gitlab/gitlab-ce:latest        "/assets/wrapper"        2 hours ago         Exited (12753 minutes ago                                           competent_minsky

67ba866e21b        gitlab/gitlab-ce:latest        "/assets/wrapper"        2 hours ago         Exited (1372 hours ago                                              hungry_hoover

2a3d08aa2ff        twang2218/gitlab-ce-zh:9.0.3   "/assets/wrapper"        2 hours ago         Exited (1372 hours ago                                              nervous_wozniak

6db49540be99        twang2218/gitlab-ce-zh:9.0.3   "/assets/wrapper"        2 hours ago         Exited (2552 hours ago      22/tcp, 443/tcp, 0.0.0.0:3000->80/tcp   romantic_elion

b08a6d6ed716        gitlab/gitlab-ce:latest        "/assets/wrapper"        2 hours ago         Exited (2552 hours ago      22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp   competent_brahmagupta

33fdb1ebd27        gitlab/gitlab-ce:latest        "/assets/wrapper"        3 hours ago         Exited (1272 hours ago                                              loving_brattain

6f53620a930c        twang2218/gitlab-ce-zh:9.0.3   "/assets/wrapper"        3 hours ago         Exited (1272 hours ago                                              brave_galileo

88df78f77c4e        ubuntu:14.04                   "sleep 360"              4 days ago          Exited (1374 days ago                                               testcopy

81a879a36bd3        wordpress                      "docker-entrypoint..."   4 days ago          Exited (4 days ago                                                 wordpress

a57a3cc492b7        mysql                          "docker-entrypoint..."   4 days ago          Exited (4 days ago                                                 mysqlwp

# 將鏡像導(dǎo)出到文件

1

[root@#localhost docker]# docker export cbe3cb7799ed > update.tar

# 創(chuàng)建一個新鏡像從導(dǎo)出的文件導(dǎo)入

1

2

[root@#localhost /]# docker import - update < update.tar 

sha256:fd00d520a43eb5dc6cca8717feca04cfdc53b02cad2fb5b50d877b8e6d6c3bc

1

2

3

4

5

6

7

8

9

10

[root@#localhost /]# docker images

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE

update                      latest              fd00d520a43e        13 seconds ago      165 MB

ubuntu                      update              317f10258460        11 minutes ago      188 MB

twang2218/gitlab-ce-zh      9.0.3               36172b5fefab        44 hours ago        1.19 GB

gitlab/gitlab-ce            latest              5eff2e44957c        2 days ago          1.11 GB

mysql                       latest              9546ca122d3a        8 days ago          407 MB

wordpress                   latest              4ad41adc2794        2 weeks ago         401 MB

ubuntu                      14.04               7c09e61e9035        5 weeks ago         188 MB

daocloud.io/library/nginx   1.7.1               e3e043d3ed2f        2 years ago         499 MB

以上是“docker中容器命令有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI