zoukankan      html  css  js  c++  java
  • 在Ubuntu16.04上部署LXC容器管理系统的相关步骤

    打算安装一个LXC linux容器管理的软件来分配使用资源并配置不同的编程环境,这样就方便大家的使用,步骤如下(宿主机的环境都搭建好了,对应显卡的驱动等):

    参考网站:

    简单入门和相关指令总结:https://www.ibm.com/developerworks/cn/linux/1312_caojh_linuxlxc/index.html

    Linux 容器的资源管理方法:https://www.ibm.com/developerworks/cn/linux/1404_caojh_lxc/

    其他部署的方法可以参看这个:https://zhuanlan.zhihu.com/p/25710517

    一、简单的使用流程:

    1、安装LXC软件:

    sudo apt-get install lxc

    我的已经安装好了,提示不用安装了。

    2、检查一下当前的linux内核版本是否支持lxc:

    sudo lxc-checkconfig

     如果每个状态都是enable,则表示当前环境支持LXC

    3、开始创建一个容器,容器的类型选择如下所示:

    # tree /usr/lib/lxc/templates/
    /usr/lib/lxc/templates/
    ├── lxc-busybox
    ├── lxc-debian
    ├── lxc-fedora
    ├── lxc-opensuse
    ├── lxc-sshd
    ├── lxc-ubuntu
    └── lxc-ubuntu-cloud

    这些模板我们都可以使用,举例使用lxc-ubuntu类型的系统来构建一个新的container:

    sudo lxc-create -n Centos -t ubuntu

    运行过程如下:需要注意的是最后会告诉你对应系统的初始用户名和密码:

    注意密码在这里哦!!!!

    接下来我们用指令来查看创建好的container:

    sudo lxc-ls -f

    Centos那个主机是我们刚刚创建好的,Debian和Ubuntu是我之前创建的。我们也能通过lxc-ls -f这条指令来查看所有container当前的状态。

    我们能在/var/lib/lxc的目录中查看到创建好的容器的相关配置文件,我们就是通过修改相关的配置文件(config文件)来控制对应容器container的参数的。

      

    4、开启容器中的机器:

    sudo lxc-start -n Ubuntu

    5、打开对应机器的控制台:

    sudo lxc-console -n Ubuntu

    输入对应的用户名和密码就可以啦~用户名:ubuntu  密码:ubuntu

    6、使用ssh连接对应的主机:

    找到对应的内网IP地址之后,我们就可以通过ssh来连接对应的container主机了:

    sudo ssh ubuntu@10.0.3.155

    这样就可以连接到我梦需要使用的container上面了,如下图所示:(注意@符号前面的名称ubuntu不是container的名称而是主机的用户名)

    7、关闭对应的容器:

    sudo lxc-stop -n Ubuntu

    你可以直接使用exit来直接推出当前的容器,但是容器并没有被关闭掉,此时容器的机器还是会占有一定的硬件资源:

      此时只是退出了当前的容器。

    所以需要用到指令:lxc-stop -n Ubuntu 来关闭叫做Ubuntu的容器:

    如图所示,Ubuntu容器的状态是STOPPED,同时内网IP也丢失了。

    二、详细具体的相关指令:

    lxc-version 用于显示系统LXC的版本号(可以通过此命令判断系统是否安装了lxc)

    lxc-checkconfig 用于判断linux内核是否支持LXC

    lxc-create用于创建一个容器

    用法:lxc-create -n name [-f config_file]

             -n 后面跟要创建的容器名字 例如:-n foo

             -f 后面跟容器配置文件的路径

    lxc-execute 用于在一个容器执行应用程序

    lxc-start 用于在容器中执行给定命令

    用法:lxc-start  -n name [-f config_file] [-c console_file] [-d] [-s KEY=VAL]
              [command]

              -d 将容器当做守护进程执行

              -f  后面跟配置文件

              -c 指定一个文件作为容器console的输出,如果不指定,将输出到终端

              -s 指定配置

    例如:lxc-start -n foo -f foo.conf -d /bin/bash

    lxc-kill 发送信号给容器中的第一个用户进程(容器内部进程号为2的进程)

    用法:lxc-kil -n name SIGNUM

              -n 后面跟容器名

              SIGNUM  信号 (此参数可选,默认SIGKILL)

    例如:lxc-kill -n foo

    lxc-stop 用于停止容器中所有的进程

    用法:lxc-stop -n name

              -n后面跟要停止的容器名

    lxc-destroy 用于销毁容器

    用法:lxc-destroy -n name

              -n后面跟要停止的容器名

    lxc-cgroup 用于获取或调整与cgroup相关的参数

    用法:lxc-cgroup -n name subsystem value

            -n 后面跟要调整的容器名

    例如: lxc-cgroup -n foo devices.list

               lxc-cgroup -n foo cpuset.cpus "0,3"

    lxc-info 用户获取一个容器的状态

    用法:lxc-info -n name

           -n后面跟操作的容器名

    例如: lxc-info --n foo

    lxc-ls 列出当前系统所有的容器

    用法:lxc-ls

    例如:lxc-ls

    三、ssh登录时的用户界面脚本编写:

    为了方便的使用进入到对应的container当中,编写了ssh登录到宿主机时的登录界面(ssh登录时都会自动运行脚本~/.bashrc,因此我们只需要将需要登录之后运行的脚本写入到~/.bashrc文件当中就可以了)如下所示:

    将这些代码添加到~/.bashrc文件的最后面,每次ssh登录时就会运行此脚本。

    代码如下:

    echo "The Status Of the Machine:"
    INFO=$(sudo lxc-ls -f)
    echo "$INFO"
    echo "The Table For Choosing Sys-Container:"
    echo "1 --------- Ubuntu16.04+TensorFlow1.0"
    echo "2 --------- Debian10.42+Caffe1.2"
    echo "3 --------- Centos17.22+TensorFlow1.2"
    echo "Please Choose The Lable Of The System:"
    read input
    if [ "$input" -eq 1 ]; then
            echo "Ubuntu is Starting,Please waitting..."
            sudo lxc-start -n Ubuntu
            echo "Have a Good Day!"
            sudo ssh ubuntu@10.0.3.155
    elif [ "$input" -eq 2 ]; then
            echo "Debian is Starting,Please waitting..."
            sudo lxc-start -n Debian
            echo "Have a Good Day!"
            sudo ssh Debian@10.0.3.239
    elif [ "$input" -eq 3 ]; then
            echo "Centos is Starting,Please waitting..."
            sudo lxc-start -n Centos
            echo "Have a Good Day!"
            sudo ssh Centos@10.2.0.134
    else
            echo "Thanks For Choosing the Host Machine,Enjoying~"
    fi

    实际的效果如下所示:

    输入容器Ubuntu机器的密码就可以进入这个版本的容器当中,这样操作也是非常方便的,其他的相关操作和需要后面在不断的优化吧。

    2017.9.8 更新方法:

    四、使用端口映射的转发的方法

    借鉴一下知乎大神的方法,实现端口的映射和转发功能也能很好很方便的解决容器使用的问题:

    直接使用端口映射的功能(确保启动了需要使用的容器lxc-start -n Ubuntu):

    sudo iptables -t nat -A PREROUTING -d 192.168.1.117 -p tcp --dport 10001 -j DNAT --to-destination 10.0.3.155:22

    将主机的10001端口映射到主机内网容器的22端口上面,实现端口数据的转发功能,实验结果如下:

     

    由上可以看出,端口映射的转发功能没有问题。(相关参考:http://blog.csdn.net/xin_yu_xin/article/details/46416101

                                                                                                     完~

  • 相关阅读:
    JavaWeb学习笔记(二十二)—— 过滤器filter
    【转】IDEA中xml文件头报错:URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)
    JavaWeb学习笔记(二十一)—— 监听器Listener
    【转】JavaWeb之Session的序列化和反序列化 && Session的活化和钝化
    JavaWeb学习笔记(二十)—— Ajax
    JavaWeb学习笔记(十九)—— 分页
    JavaWeb学习笔记(十八)—— DBUtils的使用
    JavaWeb学习笔记(十七)—— 数据库连接池
    JavaWeb学习笔记(十六)—— 事务
    Laravel框架中Echo的使用过程
  • 原文地址:https://www.cnblogs.com/uestc-mm/p/7487377.html
Copyright © 2011-2022 走看看