文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

docker中容器命令有哪些

2023-06-04 14:34

关注

这篇文章主要介绍docker中容器命令有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    下面我们以下载一个centos镜像来做演示。

[root@t-docker chenzx]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE[root@t-docker chenzx]# docker pull centosUsing default tag: latestlatest: Pulling from library/centos256b176beaff: Already exists Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024fafStatus: Downloaded newer image for centos:latest[root@t-docker chenzx]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos              latest              5182e96772bf        3 weeks ago         200MB

以交互式方式启动容器

    功能:新建并启动容器

    参数: 

 --name='容器新名字':为容器指定一个别名; -d:后台运行容器,并返回容器ID,也就是启动守护式容器; -i:以交互式模式运行容器,通常与-t同时使用; -t:tty,为容器重新分配一个伪终端,通常与-i同时使用; -P:随机端口映射; -p:指定端口映射,有以下四种格式:     ip:hostPort:containerPort     ip::containerPort     hostPort:containerPort     containerPort

    

[root@t-docker chenzx]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos              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 ##这时已经进入容器的centos里面了anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

    再开另外一个窗口,在宿主机上执行如下命令,看到启动的容器:

[root@t-docker chenzx]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES7da6063256a0        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

    功能:查看有哪些容器在跑,在宿主机上执行该命令。

    参数:

-a:列出当前所有正在运行的容器+历史上运行过的;-l:last,显示最近创建的容器;-n:显示最近n个创建的容器;-q:静默模式,只显示容器编号--no-trunc:不截断输出
[root@t-docker chenzx]# docker ps ##不加任何参数,表示当前正在运行的容器CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES7da6063256a0        centos              "/bin/bash"         6 seconds ago       Up 5 seconds                            practical_ardinghelli

退出容器

exit:容器停止退出

ctrl+P+Q:容器不停止退出

启动容器

先查出最近启动的容器,看到它们是关闭的状态:

[root@t-docker chenzx]# docker ps -n 2CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES0ecd4b9f8895        centos              "/bin/bash"         7 minutes ago       Exited (137) 16 seconds ago                       mycentos01157da6063256a0        centos              "/bin/bash"         23 minutes ago      Exited (130) 4 minutes ago                        practical_ardinghelli

启动容器:

[root@t-docker chenzx]# docker start 0ecd4b9f8895  ##注意加的是上面ps查出的容器id0ecd4b9f8895[root@t-docker chenzx]# docker ps #查看当前正在运行的容器CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES0ecd4b9f8895        centos              "/bin/bash"         8 minutes ago       Up 5 seconds                            mycentos0115

重启容器

[root@t-docker chenzx]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES0ecd4b9f8895        centos              "/bin/bash"         10 minutes ago      Up 2 minutes                            mycentos0115[root@t-docker chenzx]# docker restart 0ecd4b9f88950ecd4b9f8895

停止容器

[root@t-docker chenzx]#  docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES0ecd4b9f8895        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 psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES0ecd4b9f8895        centos              "/bin/bash"         13 minutes ago      Up 2 seconds                            mycentos0115[root@t-docker chenzx]# [root@t-docker chenzx]# docker kill 0ecd4b9f88950ecd4b9f8895

删除已经停止的容器

docker rm:删除容器

docker rmi: 删除镜像

[root@t-docker chenzx]#  docker ps -n 2CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES0ecd4b9f8895        centos              "/bin/bash"         15 minutes ago      Exited (137) About a minute ago                       mycentos01157da6063256a0        centos              "/bin/bash"         31 minutes ago      Exited (130) 11 minutes ago                           practical_ardinghelli[root@t-docker chenzx]# docker rm 0ecd4b9f8895  删除已经关闭的容器0ecd4b9f8895[root@t-docker chenzx]# docker rm  -f 0ecd4b9f8895  强制删除正在运行中的容器0ecd4b9f8895

一次性删除多个容器:

docker rm -rf $(docker ps -a -q)

docker ps -a -q |xargs docker rm

以守护式方式启动容器

    命令格式:docker run -d 容器名

    参数说明:

         -d:以守护式方式启动容器:

         -it:以交互式方式启动容器;

[root@t-docker chenzx]# docker run -d centosfa80295c878acdf30531ecbf58be87b00427e4f941d10edf93b5d066ba40d000[root@t-docker chenzx]# docker ps 没有输出,奇怪吗CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    问题:上面我们看到通过docker run -d ceonts方式(即守护式启动容器)启动容器后,再通过docker ps -a进行查看,会发现容器已经退出。很重要的说明一点:Docker容器后台运行,就必须有一个前台进程。

    容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

    这个是docker机制的问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动相应的service即可。例如service nginx start。但是,这样做,nginx为后台模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事情可做了。所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。

[root@t-docker chenzx]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEtomcat              latest              690cb3b9c7d1        7 days ago          463MBcentos              latest              5182e96772bf        3 weeks ago         200MB[root@t-docker chenzx]# [root@t-docker chenzx]# docker run -it centos[root@50fffecec77f /]# exitexit[root@t-docker chenzx]# docker run -it centos /bin/bash ##这个表示使用镜像centos:latest以交互式模式启动一个容器,并在容器内执行/bin/bash命令[root@4eeeb44eef56 /]# exitexit[root@t-docker chenzx]# docker run -it centos /bin/bash

    上面例子是用-it以交互式启动的容器。

    那么你可能要问了,用-d以守护式启动容器有什么用呢。

查看容器日志

    命令格式:docker logs -f -t --tail 容器id

    参数说明:

        -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 psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMESb118747a68bb        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状态,说明我们虽然以后台的方式启动了,但是这次容器并没有退出。

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 b118747a68bb2018-08-30T01:47:55.198597337Z hello zzyy2018-08-30T01:47:57.199661966Z hello zzyy2018-08-30T01:47:59.200811444Z hello zzyy2018-08-30T01:48:01.202114367Z hello zzyy2018-08-30T01:48:03.203363568Z hello zzyy

查看容器内的进程

    命令格式:docker top 容器id

[root@t-docker chenzx]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMESb118747a68bb        centos              "/bin/sh -c 'while t…"   8 minutes ago       Up 8 minutes                            elegant_euclid[root@t-docker chenzx]# docker top b118747a68bbUID                 PID                 PPID                C                   STIME               TTY                 TIME                CMDroot                2952                2934                0                   09:43               ?                   00:00:00            /bin/sh -c while true;do echo hello zzyy;sleep 2;doneroot                3410                2952                0                   09:52               ?                   00:00:00            sleep 2

查看容器内的细节

    命令格式:docker inspect 容器id

    该命令会以json形式返回。

[root@t-docker chenzx]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMESb118747a68bb        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"   .....

进入正在运行的容器并以命令行交互

    重新进入容器的两个命令:

        docker exec -it 容器id bash shell

        docker attach 容器id

    上面两个命令的区别:

        attach:直接进入容器启动命令的终端,不会启动新的进程;

        exec:是在容器中打开新的终端,并且可以启动新的进程。

[root@t-docker chenzx]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES[root@t-docker chenzx]# docker run -it centos[root@3d6cf42834fa /]# 启动一个容器实例并进入容器里面[root@3d6cf42834fa /]# pwd/[root@3d6cf42834fa /]# exitexit[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。

    继续我们的实验:

[root@t-docker chenzx]# docker run -it centos[root@04b568f7ee84 /]# ctrl+P+Q:容器不停止退出[root@t-docker chenzx]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES04b568f7ee84        centos              "/bin/bash"         29 seconds ago      Up 28 seconds              [root@t-docker chenzx]# docker attach 04b568f7ee84[root@04b568f7ee84 /]# ls /tmpks-script-Lu6hIQ  yum.log[root@t-docker chenzx]# docker exec -it f188fac12d4f ls /tmpks-script-Lu6hIQ  yum.log说明: -t表示--tty

    上面我们的实验,可以看到以attch方式进入运行中的容器,是需要在容器里面的命令行里面执行ls /tmp操作;而exec方式进入运行中的容器,是直接在exec命令后面写ls /tmp的操作,并把结果返回到宿主机的界面上。不好意思,表达的可能有点绕,看上面例子就会明白。

    不过,exec也有进入容器执行命令的功能(和attach功能一样),如下:

[root@t-docker chenzx]# docker exec -it f188fac12d4f /bin/bash[root@f188fac12d4f /]# ls /tmpks-script-Lu6hIQ  yum.log

    所以,exec的功能比attach功能强大,建议只学exec的方式进入容器。

从容器内拷贝文件到宿主机上

    应用场景:当我们以前台交互式方式运行容器后,如果在容器里面执行exit操作,容器就会停止,此时容器中运行的数据也就没有了。这时我们就需要把运行中的容器数据拷贝到宿主机上来保留。

    命令格式:docker cp 容器id或容器名:容器内路径 目的宿主机路径

[root@t-docker tmp]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESf188fac12d4f        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]# lsyum.log

从宿主机上拷贝文件到容器内

    命令格式:docker cp 宿主机路径  容器id或容器名:容器内路径 

容器的导入和导出

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

# 将镜像导出到文件

1

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

# 创建一个新镜像从导出的文件导入

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中容器命令有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯