惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
AI
AI
美团技术团队
人人都是产品经理
人人都是产品经理
S
Secure Thoughts
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
宝玉的分享
宝玉的分享
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
大猫的无限游戏
大猫的无限游戏
Google Online Security Blog
Google Online Security Blog
L
LINUX DO - 最新话题
罗磊的独立博客
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
博客园 - 【当耐特】
K
Kaspersky official blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
F
Full Disclosure
Google DeepMind News
Google DeepMind News
V
V2EX
博客园 - 聂微东
量子位
云风的 BLOG
云风的 BLOG
C
Check Point Blog
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
Engineering at Meta
Engineering at Meta
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
The GitHub Blog
The GitHub Blog

泠泫凝的异次元空间

通过串口安装Linux | 泠泫凝的异次元空间 curl自编译 | 泠泫凝的异次元空间 Minecraft 认证服务器代理 | 泠泫凝的异次元空间 飞塔分流配置实战 | 泠泫凝的异次元空间 Windows 安全启动证书检查 | 泠泫凝的异次元空间 Lxn-OneDriveCLI | 泠泫凝的异次元空间 华三交换机配置 ERPS 环网 | 泠泫凝的异次元空间 PVE 配置 VLAN 感知 | 泠泫凝的异次元空间 MT7922 无线网卡安装 | 泠泫凝的异次元空间 无显示输出 Linux 主机配置桌面显示 | 泠泫凝的异次元空间 Wireguard 部署 SOP 手册(自用) | 泠泫凝的异次元空间 Zabbix 7.4 通过钉钉发送告警提醒 | 泠泫凝的异次元空间 Debian with xfce 通过 VNC 共享屏幕 华三S6860 IRF堆叠 | 泠泫凝的异次元空间 iPad 应用侧载 | 泠泫凝的异次元空间 Smart DNS 分区解析 | 泠泫凝的异次元空间 建立 NFS 服务器并挂载到客户端 | 泠泫凝的异次元空间 将 Android 以 MTP 方式连接至 Debian PVE 虚拟机迁移至 vCenter | 泠泫凝的异次元空间 vCenter 虚拟机迁移至 PVE | 泠泫凝的异次元空间 PVE迁移时提示密钥验证失败 | 泠泫凝的异次元空间 修改Windows设备设置区域 | 泠泫凝的异次元空间 恢复 SecureCRT 7.x 保存的密码 | 泠泫凝的异次元空间 PVE 超融合下电与上电流程 | 泠泫凝的异次元空间 记一次Zabbix异常处理 | 泠泫凝的异次元空间 苹果设备保存SHSH2 | 泠泫凝的异次元空间 PVE超融合部署 | 泠泫凝的异次元空间 树莓派启用zram | 泠泫凝的异次元空间 在 Hyper-V 上安装 EVE-NG | 泠泫凝的异次元空间 Zabbix 部署与 Windows 硬件信息收集 | 泠泫凝的异次元空间 在WSL2中安装CUDA支持 | 泠泫凝的异次元空间 MinIO 集群部署 | 泠泫凝的异次元空间 vmware 虚拟化平台备份工具 Veeam 12 安装及配置 ubuntu 24.04 安装 nVidia 驱动后网卡消失 XMRig 自编译 | 泠泫凝的异次元空间 云桌面通过组策略统一体验配置 | 泠泫凝的异次元空间 Fortigate SSLVPN 无法连接内网 VNC 服务器 CentOS 7 使用镜像作为本地源并将自身作为YUM源服务器 | 泠泫凝的异次元空间 CentOS 7 离线更新 OpenSSH 服务 使用KubeKey离线部署Kubernetes | 泠泫凝的异次元空间 使用PGP对消息进行签名 | 泠泫凝的异次元空间 禁止MinIO展示桶内文件列表 | 泠泫凝的异次元空间 华为 Fusion Access 云桌面部署 | 泠泫凝的异次元空间 vmware Horizon 模板机部署 | 泠泫凝的异次元空间 vmware Horizon 云桌面与云应用部署 | 泠泫凝的异次元空间 Citrix XenApp 云应用交付 | 泠泫凝的异次元空间 Citrix XenDesktop 云桌面部署 | 泠泫凝的异次元空间 PVE LVM 扩容 | 泠泫凝的异次元空间 Linux 网络聚合(bond方式) | 泠泫凝的异次元空间 Citrix XenServer 7.2 部署教程 | 泠泫凝的异次元空间 在 Windows Server 2019 上安装 AMD 显卡驱动 openEuler 安装并使用 EPEL 源 | 泠泫凝的异次元空间 下载联想原厂镜像及解密 | 泠泫凝的异次元空间 在基于 arm 架构的服务器上安装 PVE | 泠泫凝的异次元空间 自制 EVE-NG 镜像 | 泠泫凝的异次元空间 不使用 Snap 在 ubuntu 上安装 Chromium 浏览器 Fortigate 6.2 固件从 PPPoE 获得 IPv6 地址 Fortigate 手记 | 泠泫凝的异次元空间 Fortigate 通过命令行自定义 NTP 服务器 | 泠泫凝的异次元空间 arm 架构 CentOS 7 安装 MySQL 5.7 版本 ubuntu 20 安装计算卡驱动和 CUDA Toolkit 锐捷诺客云添加设备后一直显示“等待同步” | 泠泫凝的异次元空间 Windows 10 自动登录 | 泠泫凝的异次元空间 OpenWRT IPv6 防火墙设置 | 泠泫凝的异次元空间 k8s 部署踩坑合集 | 泠泫凝的异次元空间 改变 Ubuntu TTY 终端字体 | 泠泫凝的异次元空间 Parted 无损扩容磁盘分区 | 泠泫凝的异次元空间 NTP服务器测试 | 泠泫凝的异次元空间 【相亲相爱】2024祝大家!新年快乐!!! ESXi中重新挂载数据盘 | 泠泫凝的异次元空间 使用 MediaMTX + RTSP 搭建低延迟直播服务器 Firewalld 手记 | 泠泫凝的异次元空间 Ubuntu 上不使用 snapd 安装 Firefox 在 armbian 上安装 xfce 和 VNC 做远程桌面 在 ubuntu 20 上使用 TigerVNC 做远程桌面 在 openEuler 上部署安装 openGauss | 泠泫凝的异次元空间 Wireguard 组网笔记 | 泠泫凝的异次元空间 让特定IP(段)走VPN连接 | 泠泫凝的异次元空间 在Wireguard中排除部分IP(段) | 泠泫凝的异次元空间 CentOS 7 上升级 OpenSSL | 泠泫凝的异次元空间 将黑群晖部署到ESXi(笔记) | 泠泫凝的异次元空间 apk 代码反编译笔记 | 泠泫凝的异次元空间 Windows 搭建 iSCSI 服务器全攻略 | 泠泫凝的异次元空间 CentOS 7 编译安装 Python 3 开源语音识别工具 Whisper | 泠泫凝的异次元空间 Ubuntu 下 Python 编译安装及关联问题解决 | 泠泫凝的异次元空间 Ansible Tower 安装 | 泠泫凝的异次元空间 提高 PowerPoint 导出到图片时的分辨率 | 泠泫凝的异次元空间 利用亚马逊云服务器和VPC 构建安全可靠的虚拟网络 | 泠泫凝的异次元空间 Windows Server 多网卡链路聚合 | 泠泫凝的异次元空间 MT3000路由+移远EC20模块体验 | 泠泫凝的异次元空间 Python安装依赖时出现ctype问题 | 泠泫凝的异次元空间 GL-MT3000日用设置 | 泠泫凝的异次元空间 解除 vCenter 的最低内存限制 | 泠泫凝的异次元空间 跳过Windows 11的强制联网和账户登录 | 泠泫凝的异次元空间 Cloudflare Trace API 信息详解 | 泠泫凝的异次元空间 在CentOS中搭建由nginx反代和Apache2作为后端的Wordpress | 泠泫凝的异次元空间 通过nginx进行文件共享 | 泠泫凝的异次元空间 禁用 sudo 时密码认证 | 泠泫凝的异次元空间 在docker中一键搭建IPSec/IKEv2 VPN | 泠泫凝的异次元空间
从已有Linux系统创建带桌面环境的Docker镜像 | 泠泫凝的异次元空间
Lxn's Area · 2024-09-29 · via 泠泫凝的异次元空间

需求如下:需要在docker容器中起一套桌面环境,连接方式为VNC。本文将从头开始创建一个满足上述需求的原生docker镜像。

版本对照表

注意:目前本文中安装tigervnc的方法仅适用于ubuntu 20.04,18和22都存在问题,仅供参考。

ubuntu虚拟机(docker镜像母盘)

项目版本备注
大版本Ubuntu 20.04.6 LTS Server下载地址
内核版本5.4.0-196-generic
xfce4.14

docker客户端

项目版本备注
系统分支openEuler 20.03 (LTS-SP3)下载地址
内核版本4.19.90-2401.1.0.0233.oe1.x86_64
docker27.3.1, build ce12230

母盘准备

这一节主要是创建docker镜像的母盘,核心思想是创建一个体积较小的带桌面的操作系统。因为这一步较为简单因此大部分步骤都会被略过。

准备操作系统

  1. 新建虚拟机,在虚拟机中挂载ubuntu 20的iso,然后正常安装Server版本即可
  2. 进入系统后首先执行sudo apt upgrade -y确保所有软件包都是最新版本,然后安装tasksel以安装桌面环境
    1
    sudo apt install dialog tasksel -y
  3. 在tasksel中选择“Xubuntu minimal installation”,确定后等待安装完成,随后重启。
  4. 安装tigervnc:
    1
    sudo apt install tigervnc-standalone-server -y
    随后在非root账户下执行vncpasswd设置VNC连接密码
  5. 建立~/.vnc/xstartup配置文件:
    1
    2
    3
    4
    #!/bin/sh
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    exec startxfce4
    加执行权限:
    1
    chmod +x ~/.vnc/xstartup
  6. 测试VNC是否安装正确:
    1
    vncserver -localhost no -geometry 1280x720 -depth 24
    此时可以在其他客户端上连接本机5901端口查看是否能够连接以及图像是否正常。
    测试正常后执行如下命令干掉测试用的实例:
    1
    vncserver -kill :1
  7. 这一步正常是创建VNC Server的systemd服务,但是由于docker中并不使用systemd管理服务,因此创建了也没用,所以此步跳过,之后可能会写额外的文章专门介绍这一部分。
  8. 清理系统缩小镜像大小,逐条执行即可:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    apt purge snapd --auto-remove -y
    apt autoremove -y
    apt autoclean
    sync; echo 3 > /proc/sys/vm/drop_caches
    rm -rf /var/lib/apt/lists/*
    rm -rf /tmp/*
    rm -rf /var/tmp/*
    rm -rf /var/cache/*
    find /var/log -type f -delete
    rm -rf /var/log/*
    dpkg --list | awk '$1=="ii" {print $2}' | grep linux-image | grep -v $(uname -r) | xargs sudo apt-get remove --purge -y
  9. 禁用swap:
    1
    swapoff -a
    随后删除/etc/fstab中的swap挂载行即可。

打包系统

这一节就一条命令:

1
2
3
tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys \
--exclude=dev --exclude=run --exclude=boot --exclude=.history \
--exclude=Templates --exclude=.bash_history --exclude=/var/log/journal/* .

等待执行完成即可,最终打包好的文件在/tmp/system.tar

这一节主要是最终生成镜像并运行测试。

  1. 导入系统包:
    1
    cat system.tar | docker import - ubuntu-vnc-20.04:1.2
    其中最后一部分是镜像名和标签名,可以自行更改。
  2. 创建dockerfile用的文件夹,然后创建dockerfile
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    FROM ubuntu-vnc-20.04:1.2


    ARG DEBIAN_FRONTEND=noninteractive
    ENV TZ=Asia/Shanghai


    ADD run.sh /run.sh
    RUN chmod 755 /run.sh


    EXPOSE 22 5901
    CMD ["/run.sh"]
  3. 创建执行脚本run.sh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash


    rm -f /tmp/.X1-lock
    su lxnchan -c "/usr/bin/vncserver -localhost no -depth 24 -geometry 1920x1080 :1"


    mkdir -p /run/sshd
    /usr/sbin/sshd -D
  4. 此时你应该具备如下的文件和镜像:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@localhost ubuntu-desktop-vnc]# ls -la
    total 16
    drwxr-xr-x 2 root root 4096 Sep 29 21:20 .
    dr-xr-x---. 5 root root 4096 Sep 29 20:44 ..
    -rw-r--r-- 1 root root 298 Sep 29 21:25 dockerfile
    -rw-r--r-- 1 root root 154 Sep 29 21:27 run.sh
    [root@localhost ubuntu-desktop-vnc]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    ubuntu-vnc-20.04 1.2 33df6c7db864 2 hours ago 2.74GB
  5. 创建最终镜像:
    1
    docker build -t ubuntu-desktop-vnc-20.04:1.4 .
    执行结果应该是:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@localhost ubuntu-desktop-vnc]# docker build -t ubuntu-desktop-vnc-20.04:1.4 .
    [+] Building 0.2s (8/8) FINISHED docker:default
    => [internal] load build definition from dockerfile 0.0s
    => => transferring dockerfile: 337B 0.0s
    => [internal] load metadata for docker.io/library/ubuntu-vnc-20.04:1.2 0.0s
    => [internal] load .dockerignore 0.0s
    => => transferring context: 2B 0.0s
    => [internal] load build context 0.0s
    => => transferring context: 189B 0.0s
    => CACHED [1/3] FROM docker.io/library/ubuntu-vnc-20.04:1.2 0.0s
    => [2/3] ADD run.sh /run.sh 0.0s
    => [3/3] RUN chmod 755 /run.sh 0.1s
    => exporting to image 0.0s
    => => exporting layers 0.0s
    => => writing image sha256:7ec1df01655a2664891838d39d8528ba69e2b193aa8715182b47a274eabb2c2d 0.0s
    => => naming to docker.io/library/ubuntu-desktop-vnc-20.04:1.4 0.0s
  6. 最后运行查看效果:
    1
    docker run -d -p 17222:22 -p 5901:5901 ubuntu-desktop-vnc-20.04:1.4
    可以通过docker logs -f [container]查看日志:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@localhost ubuntu-desktop-vnc]# docker run -d -p 17222:22 -p 5901:5901 ubuntu-desktop-vnc-20.04:1.4
    b0be8b6efab02b9545065c15d51ef9aa6ec115d8a4abd22313b898c4f0679fa5
    [root@localhost ubuntu-desktop-vnc]# docker logs -f b0

    New 'b0be8b6efab0:1 (lxnchan)' desktop at :1 on machine b0be8b6efab0

    Starting applications specified in /home/lxnchan/.vnc/xstartup
    Log file is /home/lxnchan/.vnc/b0be8b6efab0:1.log

    Use xtigervncviewer -SecurityTypes VncAuth,TLSVnc -passwd /home/lxnchan/.vnc/passwd b0be8b6efab0:1 to connect to the VNC server.

    ^Ccontext canceled
    并且最后使用VNC Viewer查看即可得到头图效果。

 上一篇

Linux openEuler