经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
【Docker】第三篇 Docker容器管理 - 旅行者-Travel
来源:cnblogs  作者:旅行者-Travel  时间:2018/9/25 19:13:46  对本文有异议

一、Docker容器概述:

  • 简单理解容器是镜像的一个实例。
  • 镜像是静态的只读文件,而容器的运行需要可写文件层。

二、创建容器

  1. [root@web130 ~]# docker create -it ubuntu:latest #-i打开标准输入,-t是打开一个伪终端
  2. 17c54a92a4e83503e329c3c80e4d10bf298516edffa56b2cea8fa2aa73d4c00c
  3. [root@web130 ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 17c54a92a4e8 ubuntu:latest "/bin/bash" 8 seconds ago Created quizzical_bhabha

1、查看docker运行的进程:

  1. [root@web130 ~]# docker container ls #新命令等价与下边ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. [root@web130 ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. [root@web130 ~]#

2、启动容器:

#我们可以通过容器ID不同的前几位id号来代表指定在容器,也可以用全部ID号

  1. [root@web130 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 17c54a92a4e8 ubuntu:latest "/bin/bash" 6 minutes ago Created quizzical_bhabha
  4. [root@web130 ~]# docker start 17
  5. 17
  6. [root@web130 ~]# docker ps #可以看到容器已经开启
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. 17c54a92a4e8 ubuntu:latest "/bin/bash" 8 minutes ago Up About a minute quizzical_bhabha
  9. [root@web130 ~]#

3、新建并启动一个容器

**docker run在创建容器的时候,在后台运行的标准操作如下:

  1. 检查本地是否有指定镜像,如果没有直接从公有仓库下载;
  2. 利用镜像创建一个容器,并启动该容器;
  3. 分配一个文件系统,并在只读的镜像层外边挂载一层可读写层;
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
  5. 执行用户指定的应用程序;
  6. 执行完毕后容器制动终止。
  1. [root@web130 ~]# docker run ubuntu /bin/echo 'hello world'
  2. hello world
  3. [root@web130 ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 17c54a92a4e8 ubuntu:latest "/bin/bash" 13 minutes ago Up 6 minutes quizzical_bhabha
  6. [root@web130 ~]#
  7. #**启动一个bash终端,允许用户交互
  8. [root@web130 ~]# docker run -it ubuntu:14.04 /bin/bash
  9. root@041941f24d3d:/# ls
  10. bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  11. root@041941f24d3d:/# pwd
  12. /
  13. root@041941f24d3d:/# ps #可以看到容器只运行了一个bash应用,并没有运行其他无关进程
  14. PID TTY TIME CMD
  15. 1 pts/0 00:00:00 bash
  16. 15 pts/0 00:00:00 ps
  17. root@041941f24d3d:/# exit #退出容器,或者Ctrl+d
  18. exit
  19. [root@web130 ~]#
  20. #我们可以加上--rm选项,--name选项,容器退出时,自动删除容器
  21. [root@web130 ~]# docker run -it --rm ubuntu:14.04 /bin/bash
  22. [root@web130 ~]# docker run --name t1 -it --rm ubuntu:14.04 /bin/bash #指定容器名
  23. 某些情况下,docker run 容器执行错误,默认情况下常见错误码:
  24. #125:Docker daemon执行错误,例如指定不支持的Docker命令参数;
  25. #126:所指定命令无法执行,例如权限出错;
  26. #127:容器内命令无法找到。
  27. 命令执行错误会返回错误码

4、容器守护态(Daemonized)运行

  1. #一些时候让容器在后台运行,用参数-d 来实现
  2. [root@web130 ~]# docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
  3. da81dbb0e2dadde799ca4d40189c3d14911ea269f76ce7843f9d585d7efbcd6a
  4. [root@web130 ~]#
  5. [root@web130 ~]# docker ps #可以看到运行的容器,当然我们也可以上条命令中--name 指定容器名字,便于识别
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. da81dbb0e2da ubuntu "/bin/sh -c 'while t…" 14 seconds ago Up 12 seconds festive_mirzakhani
  8. 17c54a92a4e8 ubuntu:latest "/bin/bash" 42 minutes ago Up 34 minutes quizzical_bhabha
  9. [root@web130 ~]# docker logs da8
  10. hello world
  11. hello world
  12. hello world
  13. ....省略....

三、终止容器

  1. stopkill命令的区别:
  2. *stop是首先发送SIGTERM信号,等一段时间(默认10秒),在发送SIGKILL信号终止容器
  3. *kill直接发送SIGKILL终止容器,强制终止容器
  4. [root@web130 ~]# docker stop da8 #可以-t 指定等待时间,
  5. da8
  6. [root@web130 ~]# docker ps #查看启动的容器
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. 17c54a92a4e8 ubuntu:latest "/bin/bash" 45 minutes ago Up 38 minutes quizzical_bhabha
  9. [root@web130 ~]# docker ps -a #查看所有容器
  10. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  11. da81dbb0e2da ubuntu "/bin/sh -c 'while t…" 4 minutes ago Exited (137) 13 seconds ago festive_mirzakhani
  12. 041941f24d3d ubuntu:14.04 "/bin/bash" 19 minutes ago Exited (0) 19 minutes ago nervous_jepsen
  13. 439157f8ea55 ubuntu "/bin/echo 'hello wo…" 33 minutes ago Exited (0) 33 minutes ago vigorous_boyd
  14. [root@web130 ~]# docker ps -qa #查看所有容器ID
  15. da81dbb0e2da
  16. 041941f24d3d
  17. 439157f8ea55
  18. [root@web130 ~]# docker start da8 #启动指定容器
  19. [root@web130 ~]# docker restart da8 #将一个运行的容器先终止,然后在重启启动它

四、进入容器

#前文-d我们将容器放在后台运行,无法操作也无法看到容器中的信息,如何进入一个后台运行的容器,方法如下:

  1. 1attach命令
  2. [root@web130 ~]# docker run --name ylt -itd ubuntu #创建一个名字为ylt的容器
  3. 7058cf192514f4a6de3340d86d61d6f2dbea0503f85ae35634fb2511cc026f6d
  4. [root@web130 ~]# docker ps
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NMES
  6. 7058cf192514 ubuntu "/bin/bash" 6 seconds ago Up 6 seconds ylt
  7. [root@web130 ~]# docker attach ylt #进入后台运行的容器
  8. root@7058cf192514:/# ls
  9. bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  10. root@7058cf192514:/#
  11. 注:当多窗同时通过attach命令连到容器的时候,所有窗口会同步显示。当某个窗口阻塞的时候,其他窗口无法执行命令
  12. 当一个窗口exit容器的时候另个也会退出。
  13. 2exec命令,最推荐的一种方式
  14. #docker从1.3.0版本起提供了更加方便的exec命令,可以在容器内直接执行任意命令,同时如果多窗口执行,不会出现attach的问题:
  15. [root@web130 ~]# docker start ylt #启动容器
  16. ylt
  17. [root@web130 ~]# docker exec -it 7058cf192514 /bin/bash #进入容器,可以多窗口执行
  18. root@7058cf192514:/# ls
  19. bin dev home lib64 mnt proc run srv tmp var
  20. boot etc lib media opt root sbin sys usr
  21. root@7058cf192514:/# exit
  22. [root@web130 ~]#
  23. 3nsenter工具需要安装,此处不详细介绍

五、删除容器

#docker rm 删除一个终止的容器
#docker rm -f 可以强制删除一个正在运行容器

  1. [root@web130 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 7058cf192514 ubuntu "/bin/bash" 19 minutes ago Up 7 minutes ylt
  4. da81dbb0e2da ubuntu "/bin/sh -c 'while t…" 41 minutes ago Exited (137) 37 minutes ago festive_mirzakhani
  5. 041941f24d3d ubuntu:14.04 "/bin/bash" About an hour ago Exited (0) About an hour ago nervous_jepsen
  6. [root@web130 ~]# docker rm 041941f24d3d
  7. [root@web130 ~]# docker ps #我们可以看到刚才启动的容器
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 7058cf192514 ubuntu "/bin/bash" 22 minutes ago Up 10 minutes ylt
  10. 17c54a92a4e8 ubuntu:latest "/bin/bash" About an hour ago Up About an hour quizzical_bhabha
  11. [root@web130 ~]# docker rm ylt #运行中的容器无法删除
  12. Error response from daemon: You cannot remove a running container 7058cf192514f4a6de3340d86d61d6f2dbea0503f85ae35634fb2511cc026f6d. Stop the container before attempting removal or force remove
  13. [root@web130 ~]# docker rm -f ylt #可以强制删除运行中的容器,直接发送的是SIGKILL信号
  14. ylt
  15. [root@web130 ~]#
  16. [root@web130 ~]# docker ps
  17. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  18. 17c54a92a4e8 ubuntu:latest "/bin/bash" About an hour ago Up About an hour quizzical_bhabha
  19. [root@web130 ~]#

六、导入和导出容器

#其实就是一个容器迁移的过程,不用考虑容器是否为运行状态

  1. 1、导出容器可以使用-o,或者输出重定向“>
  2. [root@web130 ~]# docker ps -a
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. da81dbb0e2da ubuntu "/bin/sh -c 'while t…" About an hour ago Exited (137) 44 minutes ago festive_mirzakhani
  5. 041941f24d3d ubuntu:14.04 "/bin/bash" About an hour ago Exited (0) About an hour ago nervous_jepsen
  6. [root@web130 ~]# docker export -o test_docker_run.tar da8 #-o
  7. [root@web130 ~]# ls |grep test_docker*
  8. test_docker_run.tar
  9. [root@web130 ~]# docker export 041 >test_docker_stop.tar #输出重定向
  10. [root@web130 ~]# ls |grep test_docker
  11. test_docker_run.tar
  12. test_docker_stop.tar
  13. [root@web130 ~]#
  14. 2、导入容器
  15. #导出的文件可以使用docker import 命令导入变成镜像,该命令格式为:
  16. [root@web130 ~]# cat test_docker_run.tar |docker import - test/ubuntu:v1.0
  17. sha256:7528eea6db23ec008244e9f65205421fcaa164748054b25dbae1a00f84582b66
  18. [root@web130 ~]# docker images
  19. REPOSITORY TAG IMAGE ID CREATED SIZE
  20. test/ubuntu v1.0 7528eea6db23 13 seconds ago 69.8MB
  21. #通过指定 URL 或者某个目录来导入
  22. [root@web130 ~]#docker import http://example.com/exampleimage.tgz test/ubuntu:v1.0

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号