两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)

我们经常需要进到容器里去做一些工作,比如查看日志、调试、启动其他进程等。有两种方法进入容器:attach 和 exec。

docker attach

通过 docker attach 可以 attach 到容器启动命令的终端,例如:

这次我们通过 “长ID” attach 到了容器的启动命令终端,之后看到的是echo 每隔一秒打印的信息。

注:可通过 Ctrl+p 然后 Ctrl+q 组合键退出 attach 终端。

docker exec

通过 docker exec 进入相同的容器:

说明如下:

① -it 以交互模式打开 pseudo-TTY,执行 bash,其结果就是打开了一个 bash 终端。

② 进入到容器中,容器的 hostname 就是其 “短ID”。

③ 可以像在普通 Linux 中一样执行命令。ps -elf 显示了容器启动进程while 以及当前的 bash 进程。

④ 执行 exit 退出容器,回到 docker host。

docker exec -it <container> bash|sh 是执行 exec 最常用的方式。

attach VS exec

attach 与 exec 主要区别如下:

  1. attach 直接进入容器 启动命令 的终端,不会启动新的进程。
  2. exec 则是在容器中打开新的终端,并且可以启动新的进程。
  3. 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。

当然,如果只是为了查看启动命令的输出,可以使用 docker logs 命令:

-f 的作用与 tail -f 类似,能够持续打印输出。

下一节聊聊运行容器的最佳实践。

时间: 2024-11-05 07:11:14

两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)的相关文章

容器常用操作 - 每天5分钟玩转 Docker 容器技术(25)

前面讨论了如何运行容器,本节学习容器的其他常用操作. stop/start/restart 容器 通过 docker stop 可以停止运行的容器. 容器在 docker host 中实际上是一个进程,docker stop 命令本质上是向该进程发送一个 SIGTERM 信号.如果想快速停止容器,可使用 docker kill 命令,其作用是向容器进程发送 SIGKILL 信号. 对于处于停止状态的容器,可以通过 docker start 重新启动. docker start 会保留容器的第一次

一张图搞懂容器所有操作 - 每天5分钟玩转 Docker 容器技术(26)

前面我们已经讨论了容器的各种操作,对容器的生命周期有了大致的理解,下面这张状态机很好地总结了容器各种状态之间是如何转换的. 如果掌握了前面的知识,要看懂这张图应该不难.不过有两点还是需要补充一下: 可以先创建容器,稍后再启动. ① docker create 创建的容器处于 Created 状态.② docker start 将以后台方式启动容器. docker run 命令实际上是 docker create 和 docker start 的组合. 只有当容器的启动进程 退出 时,--rest

如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)

除了 none, host, bridge 这三个自动创建的网络,用户也可以根据业务需要创建 user-defined 网络. Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan.overlay 和 macvlan 用于创建跨主机的网络,我们后面有章节单独讨论. 我们可通过 bridge 驱动创建类似前面默认的 bridge 网络,例如: 查看一下当前 host 的网络结构变化: 新增了一个网桥 br-eaed97dc9a77,这里 e

k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令: kubectl apply -f nginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML

什么是 stack?- 每天5分钟玩转 Docker 容器技术(111)

什么是 stack ?在回答这个问题之前我们先回忆一下前面部署 WordPress 应用的过程: 首先创建 secret. 然后创建 MySQL service,这是 WordPress 依赖的服务. 最后创建 WordPress service. 也就是说,这个应用包含了两个 service:MySQL 和 WordPress,它们之间有明确的依赖关系,必须先启动 MySQL. 为了保证这个依赖关系,我们控制了 docker secret 和 docker service 命令的执行顺序,只不

Readiness 探测 - 每天5分钟玩转 Docker 容器技术(144)

除了 Liveness 探测,Kubernetes Health Check 机制还包括 Readiness 探测. 用户通过 Liveness 探测可以告诉 Kubernetes 什么时候通过重启容器实现自愈:Readiness 探测则是告诉 Kubernetes 什么时候可以将容器加入到 Service 负载均衡池中,对外提供服务. Readiness 探测的配置语法与 Liveness 探测完全一样,下面是个例子: 这个配置文件只是将前面例子中的 liveness 替换为了 readine

再次实践 MySQL chart - 每天5分钟玩转 Docker 容器技术(166)

学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记录在 values.yaml 和 README.md 中.除了下载源文件查看,执行 helm inspect values 可能是更方便的方法. 输出的实际上是 values.yaml 的内容.阅读注释就可以知道 MySQL chart 支持哪些参数,安装之前需要做哪些准备.其中有一部分是关于存储的

部署 Prometheus Operator - 每天5分钟玩转 Docker 容器技术(179)

本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https://github.com/coreos/prometheus-operator.git cd prometheus-operator 为方便管理,创建一个单独的 Namespace monitoring,Prometheus Operator 相关的组件都会部署到这个 Namespace. kube

如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)

前面我们已经学习了如何部署 service,也验证了 swarm 的 failover 特性.不过截止到现在,有一个重要问题还没有涉及:如何访问 service?这就是本节要讨论的问题. 为了便于分析,我们重新部署 web_server. ① docker service rm 删除 web_server,service 的所有副本(容器)都会被删除. ② 重新创建 service,这次直接用 --replicas=2 创建两个副本. ③ 每个 worker node 上运行了一个副本. 好了,