zoukankan      html  css  js  c++  java
  • docker登录运行中的容器的4方案

    目前容器云非常的成熟,也有很多的使用案例,可以说不是什么高大上的东西了,可以说整个云计算也不是什么奢侈品,而是基础设施。但是如何使用,就成了必须的技术。

    今天记录下,基于docker的容器登录技术。

    通常情况下,我们想看看运行中的docker容器的状态,尤其是想看看容器内部的应用配置,比如tomcat的配置信息,该怎么操作呢?当然了,你会说,直接docker inspect containerId,找到workdir,或者配置文件路径,然后docker cp从容器中拷贝到宿主机上。这些都是处理静态问题的办法,但是能否直接登录到容器上呢?

    答案是有的,比较docker容器如此优秀出色。

    准备工作,先启动一个docker容器,在后台运行,方便讲解后面的操作方法。

    1.查看当前有些什么镜像。

    2. 然后启动一个

    以后台的方式启动tomcat:9.0.2,容器主机名login,将宿主机的9999端口映射到容器的8080上,容器的名称logindocker。

    [root@tkwms-web wmsuser]# docker run -it --name logindocker -h login -p 9999:8080 tomcat:9.0.2 /bin/bash

    3.查看启动后的容器信息

    有好几种办法,可以直接连接上运行中的docker容器。下面就说常用的4种吧:

    1. docker attach <ContainerID>

    A. 登录后,就直接看到类似登录主机的感觉。然后,做什么操作,都可以进行了。另外,这里有一个问题需要注意,那就是如何退出docker attach连上的容器呢?是不是个问题?直接ctrl+c,肯定是不行的,因为有可能会导致容器挂掉, exit呢?也是会导致容器死掉的。有办法吗?答案是有的。直接在登录上的容器命令行下输入ctrl+p+q,就可以安全退出了。


    B. 存在的问题:多人同时attach到同一个容器的时候,大家看到的是相同的内容,其中一个人卡顿,其他人都卡住,也就是相当于是一个人操作(有一个好处哟,就是不同地方的工作协调时,一个人操作,另外一个人可以看到对方在操作啥,就和看直播似的),此模式用于测试环境可以,生产环境不建议使用。

    2. docker exec 

    该命令的帮助文档:

    [root@tkwms-web wmsuser]# docker exec --help
    
    Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    Run a command in a running container
    
    Options:
      -d, --detach               Detached mode: run command in the background
          --detach-keys string   Override the key sequence for detaching a container
      -e, --env list             Set environment variables
      -i, --interactive          Keep STDIN open even if not attached
          --privileged           Give extended privileges to the command
      -t, --tty                  Allocate a pseudo-TTY
      -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
      -w, --workdir string       Working directory inside the container

    下面看一个案例:

    [root@tkwms-web wmsuser]# docker exec -it 8c9dc1aaccad /bin/bash

    A. 退出指令可以是exit,也可以是ctrl+p+q
    B. 效果和docker attach类似。但是不存在docker attach的安全问题。

    3. ssh方式

    这里需要说明的是,运行的容器里面要有sshd服务,只有这样,才可以在远程的ssh客户端能够登陆上去。和普通的ssh使用方式一样。

    4. nsenter命令方式

    A. 这个nsenter是第三方的应用,需要自己下载安装。 wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz。 如何安装,就不说了,解压后自己一看就知道。

    B. 获取要登陆的容器的主进程PID   docker inspect -f {{.State.PID}} containerID

    [root@tkwms-web util-linux-2.24]# docker inspect -f {{.State.Pid}} 886f31e4d385
        11625

    C. 然后按照下面的指令进行登陆运行的容器

    nsenter --target 11625 --mount --uts --ipc --net --pid

    案例如下: 

    [root@tkwms-web ~]# nsenter --target 11625 --mount --uts --ipc --net --pid
    mesg: ttyname failed: No such file or directory
    root@login:/# ls
    bin  boot  dev  docker-java-home  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@login:/#

    综上所述,建议使用docker exec指令,最简单。

  • 相关阅读:
    概率密度函数 通俗理解
    宋浩《概率论与数理统计》笔记---2.2.2、连续型随机变量及其概率密度函数
    宋浩《概率论与数理统计》笔记---2.2.1、离散型随机变量及其概率分布
    宋浩《概率论与数理统计》笔记---2.1、随机变量的概念
    宋浩《概率论与数理统计》笔记---1.5.2、伯努利模型
    宋浩《概率论与数理统计》笔记---1.5.1、事件的独立性
    贝叶斯公式-汽车实例
    贝叶斯公式的理解
    宋浩《概率论与数理统计》笔记---1.4.2、贝叶斯公式
    nodemon通过配置文件监视
  • 原文地址:https://www.cnblogs.com/shihuc/p/9967267.html
Copyright © 2011-2022 走看看