Docker-04-容器启停

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker-04-容器启停

接上节内容,为什么 hello-world 容器在启动之后的状态变成了 Exited 呢?在这里,我们介绍两种启动容器的方式。


交互式


我们知道启动容器使用 docker run 命令,但是 Docker 允许我们在启动容器的时候打开一个伪终端(参数:-t),此时需要让容器的标准输入保持打开,以达到交互的目的(参数:-i)。


启动 ubuntu 容器:


root@phyger-VirtualBox:~# docker run -i -t ubuntu /bin/bash
root@0acc66615217:/# hostname
0acc66615217
root@0acc66615217:/#
复制代码


退出 ubuntu 容器:


root@0acc66615217:/# exit
exit
root@phyger-VirtualBox:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0acc66615217        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 5 seconds ago                       tender_archimedes
c3d23ead2fc6        hello-world         "/hello"            23 hours ago        Exited (0) 23 hours ago                        sharp_sinoussi
root@phyger-VirtualBox:~#
复制代码


退出后,容器状态为 Exited,为什么呢?


因为容器的存活依赖守护进程,即 1 号进程,如果没有 1 号进程,容器在执行完用户指定的指令后就会退出,如果有 1 号守护进程一直存在,则容器会保持 UP


对于交互式启动的容器,我们可以使用 Ctrl+Q+P 的组合进行退出,这样容器会将/bin/bash 作为 1 号进程保留,使容器保持 UP 态。


root@phyger-VirtualBox:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0acc66615217        ubuntu              "/bin/bash"         11 minutes ago      Up 5 minutes                            tender_archimedes
复制代码


查看容器内进程:


root@phyger-VirtualBox:~# docker attach 0acc
root@0acc66615217:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:39 pts/0    00:00:00 /bin/bash
root         8     1  0 13:41 pts/0    00:00:00 ps -ef
root@0acc66615217:/#
复制代码


守护式


如果我们希望容器在启动后可以自动后台运行,我们就需要使用参数:-d


启动 ubuntu 容器:


root@phyger-VirtualBox:~# docker run -d ubuntu /bin/bash -c "while true;do echo hello docker;sleep 1;done"
742eece654dbb6c2797a65e77b012d830c67185a327faa78295fd280967af3ff
root@phyger-VirtualBox:~#
复制代码


以守护式模式启动完容器后,会回到 host 的终端界面。


后面的 sh 命令是为了构造守护进程,写了一个死循环,这样守护进程一直不会退出,容器可以保持 UP 态。


查看 ubuntu 容器:


root@phyger-VirtualBox:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
742eece654db        ubuntu              "/bin/bash -c 'while…"   2 minutes ago       Up About a minute                       nice_khorana
0acc66615217        ubuntu              "/bin/bash"              22 minutes ago      Up 9 minutes                            tender_archimedes
root@phyger-VirtualBox:~#
复制代码


进入 ubuntu 容器:


root@phyger-VirtualBox:~# docker exec -it 742 /bin/bash
root@742eece654db:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:47 ?        00:00:00 /bin/bash -c while true;do echo hello docker;sleep 1;done
root       258     0 23 13:51 pts/0    00:00:00 /bin/bash
root       267     1  0 13:51 ?        00:00:00 sleep 1
root       268   258  0 13:51 pts/0    00:00:00 ps -ef
root@742eece654db:/#
复制代码


退出 ubuntu 容器:


root@742eece654db:/# exit
exit
root@phyger-VirtualBox:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
742eece654db        ubuntu              "/bin/bash -c 'while…"   5 minutes ago       Up 5 minutes                            nice_khorana
0acc66615217        ubuntu              "/bin/bash"              25 minutes ago      Up 13 minutes                           tender_archimedes
root@phyger-VirtualBox:~#
复制代码


停止启动容器


停止:docker stop

启动:docker start


网络异常,图片无法展示
|


删除容器


命令:docker rm [-f]

对于正在运行的容器是不允许直接删除的,需要先 stop,然后才可以删除。如果想强制删除正在运行的容器则可以添加参数 -f 实现。


网络异常,图片无法展示
|


关于 attach 和 exec


我们使用 docker execdocker attach 都可以进入容器,那么他两有什么区别呢?


attach 是将终端的标准输入附加到容器的终端中去,容器中的标准输出会同时打印到终端,如果退出当前终端,容器也会退出。

exec 是在一个运行态的容器中执行命令,退出当前终端,容器不会退出,所以我们推荐使用 exec


网络异常,图片无法展示
|

相关文章
|
11天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
141 77
|
19天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
12天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
53 3
|
19天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
54 7
|
19天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
29 5
|
19天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
46 4
|
19天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
47 3
|
19天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
25 2
|
19天前
|
存储 安全 数据中心
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具。本文探讨了 Docker 如何通过 Namespace 和 Cgroups 实现 CPU、内存、网络和存储资源的隔离,提高系统安全性和资源利用率,以及面临的挑战和应对策略。
35 1
|
24天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
54 5