专栏首页Opensoure翻译如何通过SSH进入正在运行的容器【Containers】

如何通过SSH进入正在运行的容器【Containers】

容器已经改变了我们对虚拟化的思考方式。您可能还记得从虚拟化BIOS,操作系统和内核到每个虚拟化网络接口控制器(NIC)的虚拟机已满堆栈的日子(或者您可能还活着)。您就像自己的工作站一样,登录到虚拟机。这是一个非常直接和简单的类比。

随后,容器问世了。从LXC开始,最后达到开放容器计划(OCI),事情开始逐渐变得复杂。

幂等

在容器世界中,“虚拟机”仅是虚拟的。不需要虚拟化的所有内容都是从主机借用的。此外,容器本身通常是临时的和幂等的,因此它不存储持久性数据,并且其状态由主机上的配置文件定义。

如果您习惯于使用虚拟机的旧方法,那么您自然希望登录到虚拟机以进行交互。但是容器是临时性的,因此,如果需要重新启动或重新生成容器,则需要在设计中忘记了您在容器中所做的一切。

控制容器基础结构的命令(例如oc,crictl,lxc和docker)提供了一个界面,用于运行重要命令以重新启动服务,查看日志,确认重要文件的存在和权限模式等等。您应该使用容器基础结构提供的工具与应用程序进行交互,或者编辑配置文件并重新启动。这就是容器的设计目的。

例如,开源论坛软件Discourse正式作为容器映像分发。 Discourse软件是无状态的,因此其安装在/ var / discourse中是独立的。只要您有/ var / discourse的备份,就可以始终通过重新启动容器来恢复论坛。该容器不包含任何持久数据,其配置文件为/var/discourse/containers/app.yml。

如果您登录到容器并编辑其中包含的任何文件,如果必须重新启动容器,所有更改都将丢失。

从头开始构建的LXC容器更加灵活,在启动容器时会将配置文件(在您定义的位置)传递到该容器。

像Jenkins这样的构建系统通常具有一个默认配置文件,例如jenkins.yaml,它为仅用于在源代码上构建和运行测试而存在的基本容器映像提供了说明。构建完成后,容器消失。

既然您知道不需要SSH与您的容器进行交互,下面是可用工具的概述(以及一些使用SSH的注意事项,尽管有许多花哨的工具使其变得多余)。

OpenShift Web控制台

OpenShift 4提供了一个用于容器创建和维护的开源工具链,包括一个交互式Web控制台。

登录Web控制台时,导航至项目概述,然后单击“应用程序”选项卡以获取Pod列表。选择一个(运行中的)窗格以打开应用程序的“详细信息”面板。

单击“详细信息”面板顶部的“终端”选项卡,以在容器中打开一个交互式外壳。

如果您更喜欢基于浏览器的Kubernetes管理体验,则可以通过Learn.openshift.com上提供的交互式课程来了解更多信息。

OpenShift oc

如果您希望使用命令行界面,可以使用oc命令从终端与容器进行交互。

首先,获取正在运行的Pod的列表(或参阅Web控制台以获取活动Pod的列表)。 要获取该列表,请输入:

$ oc get pods

您可以查看资源(窗格,内部版本或容器)的日志。 默认情况下,oc日志从您指定的容器中的第一个容器返回日志。 要选择一个容器,请添加--container选项:

$ oc logs --follow=true example-1-e1337 --container app

您还可以使用以下方法查看来自窗格中所有容器的日志:

$ oc logs --follow=true example-1-e1337 --all-containers

执行命令

您可以使用以下命令远程执行命令:

$ oc exec example-1-e1337 --container app hostname
        example.local

这类似于非交互式运行SSH:您可以运行要运行的命令,而无需交互式shell接管您的环境。

Remote shell

您可以附加到正在运行的容器。 这仍然不会在容器中打开外壳,但是会直接运行命令。 例如:

$ oc attach example-1-e1337 --container app

如果在容器中需要真正的交互式外壳,则可以使用oc rsh命令打开远程外壳,只要容器包含外壳即可。 默认情况下,oc rsh启动/ bin / sh:

$ oc rsh example-1-e1337 --container app

Kubernetes

如果直接使用Kubernetes,则可以使用kubetcl exec命令在pod中运行Bash shell。

首先,确认您的Pod正在运行:

$ kubectl get pods

只要列出了包含您的应用程序的Pod,就可以使用exec命令在容器中启动shell。 使用名称example-pod作为吊舱名称,输入:

$ kubectl exec --stdin=false --tty=false
  example-pod -- /bin/bash
root@example.local:/# ls
bin   core etc   lib    root  srv
boot  dev  home  lib64  sbin  tmp  var

Docker

Docker命令类似于kubectl。 在dockerd守护程序运行的情况下,获取正在运行的容器的名称(如果您不在适当的组中,则可能必须使用sudo来提升特权):

$ docker ps
CONTAINER ID    IMAGE       COMMAND      NAME
678ac5cca78e    centos     "/bin/bash"   example-centos

使用容器名称,可以在容器中运行命令:

$ docker exec example/centos cat /etc/os-release
CentOS Linux release 7.6
NAME="CentOS Linux"
VERSION="7"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
[...]

或者,您可以启动Bash Shell进行交互式会话:

$ docker exec -it example-centos /bin/bash

容器和应用

与云打交道时要记住的重要一点是,容器本质上是运行时,而不是虚拟机。 尽管它们与Linux系统有很多共性(因为它们是Linux系统!),但是它们很少直接转换为您可能在Linux工作站上开发的命令和工作流程。 但是,就像设备一样,容器具有帮助您开发,维护和监视它们的界面,因此请熟悉前端命令和服务,直到您与它们愉快地交互时就像与虚拟(或裸机)交互一样轻松 。 很快,您会好奇为什么一切都不会仅仅停留在短期发展。

原文链接:https://opensource.com/article/19/6/how-ssh-running-container

原文作者:Seth Kenlon

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何浏览Kubernetes学习曲线【Containers】

    在“Kubernetes是一辆自卸车”中,我谈到了一种工具,它可以很好地解决其设计要解决的问题,一旦您学会了如何使用它。在本系列的第2部分中,我将更深入地了解K...

    王欣壳
  • 如何揭开Linux中的命名空间和容器的神秘面纱

    集装箱已经席卷全球了。听到这个术语时,无论您想到Kubernetes,Docker,CoreOS,Silverblue还是Flatpak,很明显,现代应用程序都...

    王欣壳
  • 如何揭开Linux中的命名空间和容器的神秘面纱【Containers】

    容器已经席卷全球了。听到这个术语时,无论您想到Kubernetes,Docker,CoreOS,Silverblue还是Flatpak,很明显,现代应用程序都在...

    王欣壳
  • 关于容器和容器运行时的那些事

    容器,容器编排,微服务,云原生,这些无疑都是当下软件开发领域里面最热门的术语。容器技术的出现并迅速的广泛应用于软件开发的各个领域里,主要的原因是容器技术革命性的...

    yuanyi928
  • 复制文件到正在运行的Docker容器中

    通过之前的章节,你已经可以灵活控制容器了,那么在接下来的几篇文章中,我们来练习通过修改容器来创建一个个性化的镜像,然后发布到Dockerhub、阿里云、Azur...

    角落的白板报
  • docker--docker介绍

    在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中...

    eadela
  • 美团容器平台架构及容器技术实践

    大家好,我是本公众号的主持人,美团技术团队的程序员鼓励师美美。本文根据美团基础架构部/容器研发中心技术总监欧阳坚在2018 QCon(全球软件开发大会)上的演讲...

    美团技术团队
  • 关于容器、微服务、docker的十大问题

    容器的运行无法简单参考虚拟机的实践经验。例如,几乎任何工作负载都可以立即虚拟化,但是有些工作负载适合容器化部署,有的则不适合。

    FB客服
  • 技术洞见:公有云容器市场发展及安全问题

    因为操作的简单性和可扩展性,云容器服务得到越来越多企业的重视。通过容器技术可显著提高开发人员和运营人员的效率。

    CloudBest
  • 容器采用时最常见的N个挑战该如何克服?

    虽然容器技术势头不减,但仍然没有在企业中被广泛采用。虽然许多DevOps团队正在尝试使用容器并将此技术慢慢引入生产环境中来,但大多数组织机构仍然不知道从哪里开始...

    静一

扫码关注云+社区

领取腾讯云代金券