使用 Docker/LXC 迅速启动一个桌面系统

2023-05-16

原文出处: vpsee

Docker是 dotCloud 的一个开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。

Docker 使用 Go 语言编写,用 cgroup 实现资源隔离,容器技术采用 LXC. LXC 已经足够成熟,被多个主流 PaaS 服务商采用(比如 dotCloud),国内的一些互联网公司也在用(比如腾讯)。虽然都是企图解决自动化部署方面的问题,Docker 的解决方式有别于我们常提到的 Puppet/Chef,他们虽然走的是不同的路,但也可以拿来一起用。

上面说了 Docker 有很多玩法,下面介绍的玩法是:在服务器上用 docker 创建桌面系统,然后在客户端上通过 ssh 远程连接桌面,可以看作是平民化的 VDI 解决方案。

安装 Docker/LXC

如果 Linux kernel 是 3.8 以前的内核,或者内核缺少 aufs 模块需要安装额外的扩展模块:

1
$ sudo apt - get install linux - image - extra - ` uname - r `

安装 lxc-docker:

1
2
3
4
$ sudo apt - get install software - properties - common
$ sudo add - apt - repository ppa : dotcloud / lxc - docker
$ sudo apt - get update
$ sudo apt - get install lxc - docker

运行一个简单系统

运行 docker 就会自动下载一个 ubuntu 镜像(第一次运行才需要下载),并在一个 container(容器)里运行一个 ubuntu 系统(类似虚拟机)和 shell:

1
$ docker run - i - t ubuntu / bin / bash

在 host 上 ps 一下发现 docker 使用 lxc-start 工具和 /var/lib/docker/containers/…/config.lxc 里的参数启动1个 lxc 容器并运行 /bin/bash 程序:

1
2
$ ps aux | grep docker
root      28103    0.0    0.0    21164    1116 ?          S      10 : 52    0 : 00 lxc - start - n a581df505cb9ea07e93de28d76fc9b4e1ee48b981ce994740efdaa65d0d307a3 - f / var / lib / docker / containers / a581df505cb9ea07e93de28d76fc9b4e1ee48b981ce994740efdaa65d0d307a3 / config . lxc -- / sbin / init - g 172.16.42.1 - e HOME = / - e PATH = / usr / local / sbin : / usr / local / bin : / usr / sbin : / usr / bin : / sbin : / bin - e DEBIAN_FRONTEND = noninteractive -- / bin / bash / src / startup . sh

运行一个 Hello world

启动一个 ubuntu 系统然后打印 hello world,囧,一个 ubuntu 系统的存在就是为了打印一个 hello world,世界变了,反了,操作系统和应用程序的地位颠倒了~

1
2
$ docker run - i - t ubuntu echo hello world
hello world

运行一个 “桌面” 系统

来看看如何启动一个 “桌面” 系统,按照 docker-desktop 项目给的方法和这里的 Dockerfile开始 build 一个简单的 “桌面系统”:

1
2
3
4
5
$ docker build - t vpsee / docker - desktop git : //github.com/rogaha/docker-desktop.git
Step 1 : FROM ubuntu : 12.10
-- - & gt ; b750fe79269d
. . .
Successfully built 7774f89504e5

build 完后就可以用 docker images 命令看到:

1
2
3
4
5
6
7
8
9
10
11
12
$ docker images
REPOSITORY             TAG                 ID                   CREATED             SIZE
ubuntu                  12.04                8dbd9e392a96          3 months ago          131.5 MB ( virtual 131.5 MB )
ubuntu                  12.10                b750fe79269d          3 months ago          24.65 kB ( virtual 180.1 MB )
ubuntu                 latest                8dbd9e392a96          3 months ago          131.5 MB ( virtual 131.5 MB )
ubuntu                 precise              8dbd9e392a96          3 months ago          131.5 MB ( virtual 131.5 MB )
ubuntu                 quantal             b750fe79269d          3 months ago          24.65 kB ( virtual 180.1 MB )
base                   latest               b750fe79269d          3 months ago          24.65 kB ( virtual 180.1 MB )
base                   ubuntu - 12.10          b750fe79269d          3 months ago          24.65 kB ( virtual 180.1 MB )
base                   ubuntu - quantal       b750fe79269d          3 months ago          24.65 kB ( virtual 180.1 MB )
base                   ubuntu - quantl       b750fe79269d          3 months ago          24.65 kB ( virtual 180.1 MB )
vpsee / docker - desktop   latest                7774f89504e5          18 minutes ago        12.29 kB ( virtual 1.576 GB )

启动这个刚 build 好的 “桌面系统” 吧,注意 a581df505cb9 是这个容器的 ID:

1
2
$ docker run - d vpsee / docker - desktop
a581df505cb9

这个系统有自己的内部 IP 地址,外界不能直接访问,所以要想从外界 ssh 登陆的话,需要把它的 ssh 服务端口(22)和 host 上某个端口通过 docker port 命令做个映射,这样访问 host 上的 49153 端口就是访问某个 container 里面的 22 端口了:

1
2
$ docker port a581df505cb9 22
49153

查看一下当前运行的容器:

1
2
3
$ docker ps
ID                   IMAGE                         COMMAND                 CREATED             STATUS               PORTS
a581df505cb9         vpsee / docker - desktop : latest    / bin / bash / src / start    24 minutes ago       Up 24 minutes        49153 - & gt ; 22

然后我们可以在 Mac/Linux 客户端上通过 ssh 访问这个 “桌面” 了:

1
2
$ ssh - YC - c blowfish docker @ 192.168.2.45 - p 49153 . / docker - desktop
docker @ 192.168.2.45' s password :

注意上面的 password 是随机生成的(每次创建新系统密码都会变),那密码是什么呢?通过 docker logs 可以找到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ docker logs a581df505cb9
User : docker Password : ieFi2iu1Phie
Adding user ` docker ' to group `sudo' . . .
Adding user docker to group sudo
Done .
. bashrc
. config /
. config / rox . sourceforge . net /
. config / rox . sourceforge . net / ROX - Filer /
. config / rox . sourceforge . net / ROX - Filer / pb_Default
. config / rox . sourceforge . net / ROX - Filer / globicons
. config / rox . sourceforge . net / ROX - Filer / panels
. config / rox . sourceforge . net / ROX - Filer / menus2
. config / rox . sourceforge . net / ROX - Filer / Options
spring - desktop - wallpaper - 1920x1200 - 0911085.jpg
docker - desktop

从 Mac 上访问远端桌面的话需要有 X 环境(下载 XQuartz 安装即可);从 Linux 上可以直接访问。登陆后界面如下:

docker-desktop

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Docker/LXC 迅速启动一个桌面系统 的相关文章

随机推荐

  • PuTTY报错:Network error:Connection timed out

    PuTTY报错 xff1a Network error xff1a Connection timed out 为什么会出现 连接超时 错误 xff1f 当 SSH 协议在 2 台设备之间建立连接时 xff0c 客户端向服务器发送一条消息 x
  • rosserial简介

    rosserial是用于非ROS设备与ROS设备进行通信的一种协议 它为非ROS设备的应用程序提供了ROS节点和服务的发布 订阅功能 xff0c 使在非ROS环境中运行的应用能够通过串口或网络能够轻松地与ROS应用进行数据交互 rosser
  • ARM汇编编程基础(五) -- 其它常见寻址模式与常见指令

    本系列文章节选自本人所著 深入浅出嵌入式底层软件开发 现在我们已经掌握了所有知识 xff0c 可以编写简单的ARM汇编程序 xff0c 但如果要编写较为复杂的ARM程序 xff0c 就必须掌握更多的寻址模式和指令 xff0c 这就是本节的重
  • 为什么 Docker 和 Kubernetes 是用 Go 写的而不是 C# ?

    这是 Reddit 平台上面这几天一篇比较热门的帖子 非常有意思 xff0c 本文我列出了几个高赞的回答 x1f466 HahahahahaSoFunny 为什么 Docker 和 Kubernetes 工具是用 Go 写的而不是 C xf
  • BeanPropertyRowMapper使用注意事项

    query过程都可以进行数据类型自动转换 xff0c 而且不仅仅按标准命名 xff0c 还可以支持下划线分隔后拼接成驼峰式字符 完全轻量级 BeanPropertyRowMapper ParameterizedBeanPropertyRow
  • Hello Kubernetes快速交互实验手册

    K8S在线实验室提供了一个交互实验环境 xff0c 现将这部分文章精简并翻译为中文 xff0c 希望对那些不了解K8S的童鞋有帮助 xff0c 能够快速玩起来有个感性认识 原文 xff1a https kubernetes io docs
  • 嵌入式程序员的几年的小心得

    作为嵌入式研发工程师工作也几年了 xff0c 其实在大学时期11年那会儿在做的 xff0c 现在依然在是做 xff0c 现在接触的单片机 Arm Linux 安卓程序这三类 xff0c 其实和大学时候的时期做的东西并无区别 只不过当时除了学
  • 2.17.3-Python爬虫(requests登录)

    文章目录 1 环境与配置1 1 创建一个pure python项目1 2 集成configparser1 3 集成selenium1 3 1 pycharm安装selenium包1 3 2 下载自己chrome浏览器版本对应的驱动1 3 3
  • C++实现麻将基本听牌胡牌的算法

    include lt iostream gt include lt vector gt include lt algorithm gt include lt chrono gt enum MajiangType emMJType Wan 6
  • H3C交换机查看相关的命令

    1 dis cpu 查看CPU 2 dis memory 查看内存 3 dis device 查看硬件 4 dis power 查看电源 5 dis fan 查看风扇 6 dis env 查看温度 7 dis version 查看版本 8
  • 我的学习之路—5月1号开始,每周至少写5篇文章

    xfeff xfeff 爱拼才会赢 xff0c 这不仅仅是一句宣言 xff0c 而是一种态度 一种乐观向上的态度 一种端正的态度 请相信 xff0c 有什么样的态度 xff0c 就有什么样的结果 有什么样的态度 xff0c 就有什么样的人生
  • Serverlet生命周期

    xfeff xfeff Serverlet简介 xff1a Servlet Server Applet xff0c 全称Java Servlet xff0c 未有中文译文 是用Java编写的服务器端程序 其主要功能在于交互式地浏览和修改数据
  • CentOS下yum安装wine

    Linux下安装wine可以从源码编译安装 xff0c 但一般都觉得麻烦 xff0c 所以尽量利用yum进行安装 xff0c 解决很多包的依赖关系 首先安装一个epel rpm ivh http dl Fedoraproject org p
  • Maven使用教程

    一 Maven介绍 我们在开发项目的过程中 xff0c 会使用一些开源框架 第三方的工具等等 xff0c 这些都是以jar包的方式被项目所引用 xff0c 并且有些jar包还会依赖其他的jar包 xff0c 我们同样需要添加到项目中 xff
  • Linux下 文件类型不同颜色的含义

    linux 文件颜色的含义 蓝色 代表目录 绿色 代表可执行文件 红色 表示压缩文件 浅蓝色 表示链接文件 灰色 表示其他文件 红色闪烁 表示链接的文件有问题了 黄色 表示设备文件 蓝色文件 目录 白色文件 一般性文件 xff0c 如文本文
  • Jenkins在windows上详细安装(service的msi包安装)与构建部署使用教程

    注意 xff1a 这种安装方式 xff0c Jenkins将做为service在windows上安装 xff0c GUI测试build时将看不到浏览器 如需要GUI测试build 可新建一个windows slave来build Jenki
  • vim常用命令总结

    vim 选择文本 xff0c 删除 xff0c 复制 xff0c 粘贴 文本的选择 xff0c 对于编辑器来说 xff0c 是很基本的东西 xff0c 也经常被用到 xff0c 总结如下 xff1a v 从光标当前位置开始 xff0c 光标
  • Spring boot WebMvcConfigurerAdapte方法已经过时解决方法

    在spring boot 2 0以后 WebMvcConfigurerAdapter 这个方法已经过时 xff0c 通过百度网上的资料之后发现很多人说是改成继承WebMvcConfigurationSupport这个类 xff0c 这种方式
  • RTOS流和消息缓冲器

    RTOS流和消息缓冲器 任务间通信和同步 可从FreeRTOS V10 0 0获得 介绍 流缓冲区是 RTOS任务 的RTOS任务 xff0c 并且是任务通信原语的中断 与大多数其他FreeRTOS通信原语不同的是 xff0c 它们针对单读
  • 使用 Docker/LXC 迅速启动一个桌面系统

    原文出处 xff1a vpsee Docker是 dotCloud 的一个开源引擎 xff0c 旨在提供一种应用程序的自动化部署解决方案 xff0c 简单的说就是 xff0c 在 Linux 系统上迅速创建一个容器 xff08 类似虚拟机