主要参考文献
1 安装Xfce和TigerVNC
前提要求:
1、安装docker
2、拉取
pytorch/pytorch
镜像
常用的桌面环境
- xface4: 轻量级桌面环境,适合远程桌面
- gnome-session-flashback: Gnome2的经典桌面环境(Metacity),但用了GTK+3。有人提到安装gnome-session-fallback,这个已经被flashback替代了,不用fallback了。
- ubuntu-gnome-desktop: 当前最新版本的Gnome桌面环境
这里,我们安装Xfce4.
1.1 Xfce和TigerVNC安装流程
# 启动新容器
docker run -it --runtime=nvidia --shm-size 32G --name pytorch8205 -p 8205:5901 -v /media/wen/ST_4T/Pytorch_Volume:/DateVolume pytorch/pytorch
# 更新系统关键软件包
apt update
# 安装Xfce DE
apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
# 安装TigerVNC服务器及其依赖项
apt install tigervnc-standalone-server tigervnc-common
# 创建启动脚本
touch $HOME/.vnc/xstartup
# 执行此命令之前在容器内安装了vim
vim $HOME/.vnc/xstartup
## 添加以下脚本(如果有乱码,删除脚本中的中文配置)
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 & #启动xface4
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey #设置背景色
# 保存并关闭文件。无论何时启动或者重启TigerVNC服务器,都将会自动执行上述命令
# 使用chmod
chmod +x ~/.vnc/xstartup
1.2 新建vncserver
# 启动vnc
vncserver :1 -localhost no
# -localhost no是为了让其他计算机可以访问,而不仅仅是本地。没有这个option的话就只能本地VNC连接。从下面vnc监听状态可以看出,监听地址是0.0.0.0,而不是默认的127.0.0.1。
# vncserver -localhost no
# 不添加:1也可以,默认是1
# 容器安装net-tools 以使用 netstat命令
apt install net-tools
# 查询状态
root@1d5c98abd011:/workspace# netstat -ntupl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 9233/Xtigervnc
tcp6 0 0 :::5901 :::* LISTEN 9233/Xtigervnc
# tigervnc已经在监听5901端口
1.3 容器保存为镜像
到这里,vncserver已经可以使用,接下来将此容器提交为新镜像
# 还是上文的容器,删除所有的vncserver
vncserver -kill :*
# 删除之后可能残留有日志文件,需要检查一下,按照提示删除
# 提交新镜像
docker commit -m="delete .X1-lock" bab8deed58d3 xfce/pytorch:1.1
# 查看本地的镜像
wen@wen-Sys:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xfce/pytorch 1.1 a1f6386b894b 2 hours ago 8.01GB
xfce/pytorch 1.0 734a57546843 3 hours ago 8.01GB
pytorch/pytorch latest 5ffed6c83695 2 months ago 7.25GB
接下来就可以根据镜像xfce/pytorch:1.1
,开启新的容器
2 启动新容器
启动时要设置端口映射,vncserver默认的端口为5900,开启的第一个vncserver的端口为5901,所以,端口映射为宿主机端口:5901
。这里也可以设置文件挂载。
# 启动新容器pytorch8206
docker run -it --runtime=nvidia --shm-size 32G --name pytorch8206 -p 8206:5901 xfce/pytorch:1.1
# 启动vncserver
root@baafffafdbfa:/workspace# vncserver -localhost no
New 'baafffafdbfa:1 (root)' desktop at :1 on machine baafffafdbfa
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/baafffafdbfa:1.log
Use xtigervncviewer -SecurityTypes VncAuth,TLSVnc -passwd /root/.vnc/passwd baafffafdbfa:1 to connect to the VNC server.
# 重设密码
# 系统将提示输入并确定密码,以及是否将其设置为仅查看密码。如果输入 y ,则用户将无法使用鼠标和键盘与VNC实例进行交互
-localhost no
是为了让其他计算机可以访问,而不仅仅是本地。没有这个option的话就只能本地VNC连接
# 启动vncserver
root@baafffafdbfa:/workspace# vncserver -localhost no
New 'baafffafdbfa:1 (root)' desktop at :1 on machine baafffafdbfa
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/baafffafdbfa:1.log
Use xtigervncviewer -SecurityTypes VncAuth,TLSVnc -passwd /root/.vnc/passwd baafffafdbfa:1 to connect to the VNC server.
注意,上面输出中主机名之后的:1。这表示运行vnc服务器的显示端口号。在我们的例子中,服务器在TCP端口5901(5900+1)上运行。如果创建第二个实例,vncserver它将在下一个空闲端口上运行,即2,这意味着服务器会在端口5902(5900+2)上运行。
重设密码。系统将提示输入并确定密码,以及是否将其设置为仅查看密码。如果输入 y ,则用户将无法使用鼠标和键盘与VNC实例进行交互
root@baafffafdbfa:/workspace# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
到此为止,容器中已经安装Xfce和TigerVNC,并且启动运行。之后就可以在Ubuntu中使用vncViewer;在Windows中使用Putty和vncViewer。远程访问容器中的图形化Ubuntu。
3 Ubuntu开放端口
主要参考博文:Ubuntu系统中防火墙的使用和开放端口
在关闭宿主机防火墙的情况下,这一部分不需要进行。
端口开放均在宿主机上操作,容器中的系统我没有进行端口的操作。
# 开启宿主机防火墙
sudo ufw enable
# 开放22端口
sudo ufw enable 22
# 开启后效果
wen@wen-Sys:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
# 查看哪些端口是开放的,分别是什么进程在监听
wen@wen-Sys:~$ sudo netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1064/systemd-resolv
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1213/cupsd
tcp6 0 0 :::5901 :::* LISTEN 30334/docker-proxy
tcp6 0 0 ::1:631 :::* LISTEN 1213/cupsd