使用桌面环境和VNC在Docker中运行Ubuntu Linux
本文介绍如何使用桌面环境和VNC在Docker中运行Ubuntu Linux。当前使用Docker映像,您可以在LXDE和LXQt桌面环境下运行Ubuntu,并通过HTML5 VNC接口访问它,前提条件是所用的系统得安装有Docker,即为了能够运行Ubuntu Docker映像,您需要在系统上安装Docker引擎。
在系统上安装Docker后请做以下操作
启动并启用Docker在系统启动时自动运行:
sudo systemctl start docker && sudo systemctl enable docker
将您的系统用户添加到Docker组,以便能够在没有sudo的情况下执行Docker命令:
sudo usermod -aG docker $USER
newgrp docker
验证已安装的Docker版本:
$ docker version
Pull Ubuntu Docker镜像
Ubuntu有几个图像可以被提取。这些图像在Docker页面上可用,地址在https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/tags/,可以使用Docker进行提取:
##对于Ubuntu 20.04(最新)
docker pull dorowu/ubuntu-desktop-lxde-vnc:latest
##对于带LXDE的Focal
docker pull dorowu/ubuntu-desktop-lxde-vnc:focal
##对于带LXQt的Focal
docker pull dorowu/ubuntu-desktop-lxde-vnc:focal-lxqt
##对于带有LXDE的衍生
docker pull dorowu/ubuntu-desktop-lxde-vnc:bionic
##用于衍生LXQt
docker pull dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt
##对于Trusty
docker pull dorowu/ubuntu-desktop-lxde-vnc:trusty
##对于Xenial
docker pull dorowu/ubuntu-desktop-lxde-vnc:xenial
提取所需的Ubuntu映像后,检查本地注册表中是否有该映像:
$ docker images
使用桌面环境运行Ubuntu容器
在这里,我们将介绍几种配置方法,了解如何运行Ubuntu容器,从而为您提供直观的体验。
1、快速入门
您可以简单地运行容器并使用下面的命令通过端口6080访问它:
docker run -d \
--name ubuntu_desktop \
-v /dev/shm:/dev/shm \
-p 6080:80 \
dorowu/ubuntu-desktop-lxde-vnc
在上面的命令中,我们将容器名称设置为ubuntu_desktop,并将一个持久卷设置为/dev/shm。请记住,将ubuntu桌面lxde vnc替换为相应的映像。
检查容器是否在端口暴露的情况下运行:
$ docker ps
从输出中可以看出,我们暴露了端口6080。允许它通过防火墙,然后使用URL访问Ubuntu桌面http://IP_Address:6080/。
2、设置HTTP基本身份验证
您还可以通过向上面的命令添加HTTP_password变量来设置访问端口6080上的HTTP页面时使用的密码:
docker run -d \
--name ubuntu_desktop \
-e HTTP_PASSWORD=Passw0rd \
-v /dev/shm:/dev/shm \
-p 6080:80 \
dorowu/ubuntu-desktop-lxde-vnc
现在访问该页面,您需要提供密码。
3、启用VNC查看器
VNC查看器是通过单独的端口5900访问的,需要暴露该端口才能访问它。VNC Viewer端口可以显示如下:
docker run -d \
--name ubuntu_desktop \
-v /dev/shm:/dev/shm \
-p 6080:80 \
-p 5900:5900 \
dorowu/ubuntu-desktop-lxde-vnc
这里,VNC查看器应该在端口5900上可用。
您还可以通过向上述命令中添加VNC_password变量来设置查看器的密码:
docker run -d \
--name ubuntu_desktop \
-e VNC_PASSWORD=StrongPassword \
-v /dev/shm:/dev/shm \
-p 6080:80 \
-p 5900:5900 \
dorowu/ubuntu-desktop-lxde-vnc
访问VNC查看器时,您需要提供访问VNC的设置密码:
4、使用SSL加密
您可以为加密生成SSL证书。在本指南中,我们将生成如下所示的自签名证书。
继续之前,请确保系统上已安装OpenSSL:
mkdir -p ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl/nginx.key -out ssl/nginx.crt
现在,在运行容器时,需要指定SSL_PORT和生成的证书的路径,如下所示:
docker run -d \
--name ubuntu_desktop \
-v /dev/shm:/dev/shm \
-p 6081:443 \
-e SSL_PORT=443 \
-v ${PWD}/ssl:/etc/nginx/ssl \
dorowu/ubuntu-desktop-lxde-vnc
在这里,您可以使用URL访问Ubuntu桌面https://IP_address:6081,如下图:
5、设置默认桌面用户
运行容器时,默认用户是root用户。但是,您可以使用user和PASSWORD变量添加另一个用户,如下所示:
docker run -d \
--name ubuntu_desktop \
-e USER=thor \
-e PASSWORD=Passw0rd \
-v /dev/shm:/dev/shm \
-p 6080:80 \
dorowu/ubuntu-desktop-lxde-vnc
现在,我们将有另一个密码为Passw0rd的用户:
6、部署到子目录
容器可以部署到子目录中,并在访问页面时用作前缀。例如,这里我们将URL子目录指定为new。
现在使用RELATIVE_URL_ROOT环境变量指定子目录:
docker run -d \
--name ubuntu_desktop \
-e RELATIVE_URL_ROOT=new \
-p 6080:80 \
dorowu/ubuntu-desktop-lxde-vnc
请记住,目录不应有任何前导和尾随斜杠(/)。现在您可以使用URL访问Ubuntu桌面http://IP_address:6080/new/,如下图:
7、设置屏幕分辨率
通常,当连接到服务器时,虚拟桌面将自动调整到浏览器窗口大小。但您可以使用变量resolution设置固定分辨率,如下所示:
docker run -d \
--name ubuntu_desktop \
-v /dev/shm:/dev/shm \
-p 6080:80 \
-e RESOLUTION=1360x768 \
dorowu/ubuntu-desktop-lxde-vnc
您将拥有1360×768(16:9)分辨率的虚拟桌面。
8、启用声音
首先在Linux系统上插入下面的内核模块:
sudo modprobe snd-aloop index=2
现在运行启用声音的容器,如下所示:
docker run -d \
--name ubuntu_desktop \
-v /dev/shm:/dev/shm \
-p 6080:80 \
--device /dev/snd \
-e ALSADEV=hw:2,0 \
dorowu/ubuntu-desktop-lxde-vnc
在上面的命令中,–device /dev/snd -e ALSADEV=hw:2,0向容器授予声音,并将基本ASLA设备配置设置为使用卡2。现在,您的容器将启用声音。通过播放声音/视频进行测试。
管理容器
您可以使用以下命令轻松停止和启动Ubuntu容器:
##To stop
docker stop ubuntu_desktop
##To start
docker start ubuntu_desktop
##To delete
docker rm ubuntu_desktop
此外,通过创建下面的服务文件,可以将容器作为系统服务进行管理:
sudo vim /etc/systemd/system/ubuntu-container.service
在文件中,添加以下行:
[Unit]
Description=Ubuntu container
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a ubuntu_desktop
ExecStop=/usr/bin/docker stop -t 2 ubuntu_desktop
[Install]
WantedBy=local.target
现在重新加载系统守护程序:
sudo systemctl daemon-reload
启动并使容器在启动时自动运行:
sudo systemctl start ubuntu-container
sudo systemctl enable ubuntu-container
检查服务状态应该是在正在运行,说明使用桌面环境和VNC在Docker中运行Ubuntu Linux成功了。