博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桌面版docker操作_让docker容器系统拥有图形化桌面
阅读量:4083 次
发布时间:2019-05-25

本文共 4301 字,大约阅读时间需要 14 分钟。

转载自:

桌面版docker操作_让docker容器系统拥有图形化桌面

林进之 2021-02-12 07:28:59 198 收藏 1
文章标签: 桌面版docker操作
版权

目前让docker 运行的系统拥有gui的大概有两个,一个是X11server 、一个是novnc,搭建成本来说vnc配置还是比低的。但是novnc是vnc的web客户端,虽然方便,但是个人感觉web性能可能会低一些,所以本教程去掉web这部分,直接用vnc客户端链接。开始吧。

一、docker拉取镜像,并创建容器

1.这里我选用官方的centos7镜像(注意镜像是不含desktop的)

# docker pull centos

2.启动镜像创建并创建容器(关于各启动参数的意思 --name 是给容器起名字,方便调用 -p 是映射内外端口,这里映射了5901端口,也就是等下要运行的vncserver所需要的端口)

# docker run --name centos-desktop-vnc --privileged -p 5901:5901 --ulimit memlock=-1 -td centos /usr/sbin/init

二、进入系统容器操作安装需要的组件

1.进入容器(由于我们给容器起了名字,所以我们可以直接定位进入容器,不需要再查看容器id)

# docker exec -it centos-desktop-vnc bash ### “centos-desktop-vnc” 是我们之前创建时给容器的名字

2.安装desktop

2.1先看一下有什么desktop可以装

# yum grouplist ##会出现一个列表,根据自己的需求选择带desktop的安装

这里我选择安装GNOME Desktop

# yum groupinstall GNOME Desktop

2.2配置默认启动图形界面

#断开默认启动方式

# unlink /etc/systemd/system/default.target

/#创建图形启动方式为默认启动方式

# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

3.安装 vnc server

yum -y install tigervnc-server tigervnc-server-module

三、配置软件

1.复制配置模板文件为vncserver@:1.service

cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service

2.修改配置文件

nano这个软件可能需要安装一下

yum install nano

开始编辑配置:

nano /lib/systemd/system/vncserver@:1.service

会看到如下配置内容:

[Unit]

Description=Remote desktop service (VNC)

After=syslog.target network.target

[Service]

Type=forking

ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

ExecStart=/usr/sbin/runuser -l -c "/usr/bin/vncserver %i"

PIDFile=/home//.vnc/%H%i.pid

ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]

WantedBy=multi-user.target

我们只要把< USER >替换成我们的用户名就可以了,由于docker是以root登入的,我们把< USER >改成root

改好如下:

[Unit]

Description=Remote desktop service (VNC)

After=syslog.target network.target

[Service]

Type=forking

ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"

PIDFile=/home/root/.vnc/%H%i.pid

ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]

WantedBy=multi-user.target

3.设置vnc链接密码

vncserver #输入两次密码,完成密码设置

如果有view-only选项的话选n

4.重启容器并且更新systemctl

4.1. exit # 退出容器

4.2. docker restart centos-desktop-vnc # 重启容器

4.3. docker exec -it centos-desktop-vnc bash #重新进入容器

4.4. systemctl daemon-reload #更新systemctl

如果 systemctl daemon-reload 和 systemctl start vncserver@:1.service 发生错误,可以尝试重启容器,并把

/lib/systemd/system/vncserver@:1.service 配置里的Type=forking改为Type=simple

5.启动vncserver@:1.service服务,并设置开机自启

systemctl start vncserver@:1.service && systemctl enable vncserver@:1.service

6.查看进程是否启动了

netstat -anp|grep 590 # 如果没有netstat这个命令,输入 yum install net-tools -y 进行安装

如果看到

tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 233/Xvnc

tcp 0 0 172.17.0.2:5901 172.17.0.1:55824 ESTABLISHED 233/Xvnc

tcp6 0 0 :::5901 :::* LISTEN 233/Xvnc

就说明vnc服务起来了

7.配置防火墙

CentOS7默认的防火墙不是iptables,而是firewalle,

所以 根据个人喜好选择以下两种方案

方案一(firewalle)

1.添加firewalle 端口规则

#添加5901端口

firewall-cmd --zone=public --add-port=5901/tcp

#重载 firewalle

firewall-cmd --reload

方案二(iptables)

1.先检查是否安装了iptables

#查看iptables服务状态

service iptables status

# 如果报错没有iptables服务 先安装

yum install -y iptables iptables-services

2.禁用/停止自带的firewalld服务

#停止firewalld服务

systemctl stop firewalld

#禁用firewalld服务

systemctl mask firewalld

3.启动iptables服务并设置自启动

#开启服务

systemctl start iptables.service

#注册iptables服务

systemctl enable iptables.service

4.添加vnc服务端口iptables规则

#编辑iptables

nano /etc/sysconfig/iptables

#在合适位置加上

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5900:5903 -j ACCEPT

内容大概如下:

please do not ask us to add additional ports/services to this default configuration

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

5.重启iptables服务,使新添加的规则生效

service iptables restart

6.完结:

现在你可以使用vncwiewer等工具来链接你的docker了

后续:建议保存你的容器为自定义镜像以供使用

————————————————
版权声明:本文为CSDN博主「林进之」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_32487647/article/details/114020343

你可能感兴趣的文章
基础算法
查看>>
前端面试
查看>>
React Hooks 异步操作踩坑记
查看>>
聊聊编码那些事,顺带实现base64
查看>>
TypeScript for React (Native) 进阶
查看>>
React 和 ReactNative 的渲染机制/ ReactNative 与原生之间的通信 / 如何自定义封装原生组件/RN中的多线程
查看>>
JavaScript实现DOM树的深度优先遍历和广度优先遍历
查看>>
webpack4 中的 React 全家桶配置指南,实战!
查看>>
react 设置代理(proxy) 实现跨域请求
查看>>
通过试题理解JavaScript
查看>>
webpack的面试题总结
查看>>
实践这一次,彻底搞懂浏览器缓存机制
查看>>
Koa2教程(常用中间件篇)
查看>>
React Hooks 完全指南
查看>>
React16常用api解析以及原理剖析
查看>>
教你发布你npm包
查看>>
nvm 和 nrm 的安装与使用
查看>>
React Hooks 一步到位
查看>>
React Redux常见问题总结
查看>>
前端 DSL 实践指南
查看>>