打算安装一个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 ]; 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 ]; 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 ]; 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  -j DNAT --to-destination 10.0.3.155:

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

 

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

                     完~

在Ubuntu16.04上部署LXC容器管理系统的相关步骤的更多相关文章

  1. primecoin在ubuntu16.04上部署服务:

    primecoin在ubuntu16.04上部署服务: 一.下载Tomcat,Jdk,primecoin(公司内部文件) 注意Tomcat版本需要高于Jdk的,不然会报错. 二.把它们都解压到你要的安 ...

  2. 0、ubuntu16.04安装部署kvm

    ubuntu16.04安装部署kvm1.查看CPU是否支持KVM egrep "(svm|vmx)" /proc/cpuinfo 2.安装相关kvm包 sudo apt-get i ...

  3. 【MindSpore】Ubuntu16.04上成功安装GPU版MindSpore1.0.1

    本文是在宿主机Ubuntu16.04上拉取cuda10.1-cudnn7-ubuntu18.04的镜像,在容器中通过Miniconda3创建python3.7.5的环境并成功安装mindspore_g ...

  4. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  5. Ubuntu16.04上用源代码安装ICE

    ubuntu16.04上用源代码安装ICE

  6. Ubuntu16.04上安装neo4j数据库

    什么是neo4j数据库? neo4j数据库是图数据库的一种,属于nosql的一种,常见的nosql数据库还有redis.memcached.mongDB等,不同于传统的关系型数据库,nosql数据也有 ...

  7. 在ubuntu16.04上安装eclipse

     在ubuntu16.04上安装eclipse 一.下载     首先我们需要安装jdk1.8及其以上,然后从官网:https://www.eclipse.org/downloads/上下载,需要注意 ...

  8. 在ubuntu16.04上编译android源码【转】

    本文转载自:http://blog.csdn.net/fuchaosz/article/details/51487585 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...

  9. ubuntu16.04上在使用搜狗输入法时,按shift不能正常切换中英文

    问题描述: ubuntu16.04上在使用搜狗输入法时,不知道把什么组合键给错按了,导致了按shift不能正常切换中英文,这是一件很烦恼的事儿! 解决步骤: 1,终端输入打开: fcitx-confi ...

随机推荐

  1. 网关(Gatesvr) 设计(1)

    Gate解决的问题: 1.用户在服务端的实例可以在不同的进程中,也可以移动到同一个进程中.2.用户只需要与服务端建立有限条连接,即可以访问到任意服务进程.这个连接的数量不会随服务进程的数量增长而线性增 ...

  2. 前端数据存储方案集合(cookie localStorage等)以及详解 (二)

    前端数据存储方案集合(cookie localStorage等)以及详解 (二) 在之前的文章中已经介绍到了 前端存储方案中的 cookie . 但是 cookie 的存储上限是 4KB. 如果超过了 ...

  3. RedHat Enterprise Linu…

    RedHat Enterprise Linux 6.4 使用Centos 6 的yum 源问题 2015.04.09 一.问题描述 有时在使用RedHat 系统进行安装某些软件时,会出现如下提示: T ...

  4. 腾讯发布 Omix 1.0 - 用 JSX 或 hyperscript 创建用户界面

    腾讯发布 Omix 1.0 - 用 JSX 或 hyperscript 创建用户界面 今天,腾讯正式开源发布 Omix 1.0, 让开发者使用 JSX 或 hyperscript 创建用户界面. Gi ...

  5. [js高手之路]es6系列教程 - 解构详解

    解构通俗点说,就是通过一种特定格式,快捷的读取对象/数组中的数据的方法, es6之前,我们通过对象名称[键] 读取数据 var User = { 'name' : 'ghostwu', 'age' : ...

  6. ASP.NET程序运行出现WebDev.WebServer40.exe已停止工作解决方法(netsh winsock reset)

    问题描述:在开发系统时候运行程序突然报出"WebDev.WebServer40.exe已停止工作"的错误,程序调试运行,发现程序在打开数据库时候报错,也就是Connection.O ...

  7. 如何快速高效地完成一个Android项目?

    本文的内容有别于之前文章中纯技术的探讨,会从业务逻辑.技术.团队和方法论的角度探讨如何快速高效地完成一个Android项目.当然,快速高效是有前提的,第一,本文依然是从研发的角度来谈如何把控项目的,而 ...

  8. Java restful web service 开发入门

    可用的框架有不少,我用的是jersey. 直接上代码,其实,如果你会web service 这个restful的就很好理解了,自己跑一遍就OK了 用到的类 User.java package demo ...

  9. 6.linux下部署 web 项目

    安装java 1.下载 linux 环境的jdk 2.上传该压缩包到 linux 系统中并且解压 tar -zxvf 压缩包名 3.配置环境变量并且刷新配置 export JAVA_HOME=/ali ...

  10. HttpClient笔记与踩过的坑

    本来有个指纹采集功能做了个winFrom小程序 在本地测试都还能行,后来快上线的时候发现 客户用的阿里云数据库, 不对外公布 ,然后发现本地采集的数据没办法上传到数据库怎么办呢? 然后曲线救国,用we ...