【Docker】【2.docker 安装 ubuntu 桌面版】

一、目标

使用 docker 安装不同版本的 ubuntu .

可以通过 vnc 或者 直接在主机上显示。

二、使用 vnc 访问的方式

Dockerfile

shell 复制代码
FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai

RUN apt-get update && \
    apt-get install -y tzdata sudo vim wget curl net-tools dbus-x11 x11-apps && \
    apt-get install -y xfce4 xfce4-terminal tightvncserver && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# 创建普通用户
RUN useradd -m -s /bin/bash dockeruser && \
    echo "dockeruser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

USER dockeruser
WORKDIR /home/dockeruser

# 设置 VNC 密码
RUN mkdir -p /home/dockeruser/.vnc && \
    echo "1234" | vncpasswd -f > /home/dockeruser/.vnc/passwd && \
    chmod 600 /home/dockeruser/.vnc/passwd

# 创建 xstartup 启动 XFCE
RUN echo '#!/bin/bash\n\
xrdb $HOME/.Xresources\n\
startxfce4 &' > /home/dockeruser/.vnc/xstartup && \
    chmod +x /home/dockeruser/.vnc/xstartup

# 修正启动脚本(含 USER 环境变量 + 等待日志文件)
RUN echo '#!/bin/bash\n\
export USER=dockeruser\n\
export HOME=/home/dockeruser\n\
export DISPLAY=:1\n\
mkdir -p $HOME/.vnc\n\
vncserver :1 -geometry 1280x800 -depth 24\n\
echo "VNC server started on :1 (port 5901)"\n\
echo "To connect: vncviewer localhost:5901"\n\
# 等待日志文件创建\n\
for i in {1..10}; do\n\
    log_file=$(ls -1 $HOME/.vnc/*.log 2>/dev/null | head -n 1)\n\
    if [ -n "$log_file" ]; then\n\
        echo "Tailing log file: $log_file"\n\
        tail -f "$log_file"\n\
        exit 0\n\
    fi\n\
    sleep 1\n\
done\n\
echo "Warning: no VNC log file found."\n\
exec bash' > /home/dockeruser/start_vnc.sh && \
    chmod +x /home/dockeruser/start_vnc.sh

CMD ["/home/dockeruser/start_vnc.sh"]
#CMD ["startxfce4"]

编译

shell 复制代码
docker stop ubuntu20-xfce-vnc 2>/dev/null || true
docker rm ubuntu20-xfce-vnc 2>/dev/null || true

docker build -t ubuntu20-xfce-vnc .

启动docker

shell 复制代码
# 允许 X11 显示(可选)

xhost +local:root

docker run -it --rm \
    --name ubuntu20.4-vnc \
    -p 5901:5901 \
    ubuntu20-xfce-vnc

使用vnc连接

shell 复制代码
$ vncviewer localhost:5901
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Password: 

密码: 1234

三、使用 startxfce4 直接显示在 host 中

Dockerfile

shell 复制代码
FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai

RUN apt-get update && \
    apt-get install -y tzdata sudo vim wget curl net-tools dbus-x11 x11-apps && \
    apt-get install -y xfce4 xfce4-terminal tightvncserver && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# 创建普通用户
RUN useradd -m -s /bin/bash dockeruser && \
    echo "dockeruser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

USER dockeruser
WORKDIR /home/dockeruser

# 设置 VNC 密码
RUN mkdir -p /home/dockeruser/.vnc && \
    echo "1234" | vncpasswd -f > /home/dockeruser/.vnc/passwd && \
    chmod 600 /home/dockeruser/.vnc/passwd

# 创建 xstartup 启动 XFCE
RUN echo '#!/bin/bash\n\
xrdb $HOME/.Xresources\n\
startxfce4 &' > /home/dockeruser/.vnc/xstartup && \
    chmod +x /home/dockeruser/.vnc/xstartup

# 修正启动脚本(含 USER 环境变量 + 等待日志文件)
RUN echo '#!/bin/bash\n\
export USER=dockeruser\n\
export HOME=/home/dockeruser\n\
export DISPLAY=:1\n\
mkdir -p $HOME/.vnc\n\
vncserver :1 -geometry 1280x800 -depth 24\n\
echo "VNC server started on :1 (port 5901)"\n\
echo "To connect: vncviewer localhost:5901"\n\
# 等待日志文件创建\n\
for i in {1..10}; do\n\
    log_file=$(ls -1 $HOME/.vnc/*.log 2>/dev/null | head -n 1)\n\
    if [ -n "$log_file" ]; then\n\
        echo "Tailing log file: $log_file"\n\
        tail -f "$log_file"\n\
        exit 0\n\
    fi\n\
    sleep 1\n\
done\n\
echo "Warning: no VNC log file found."\n\
exec bash' > /home/dockeruser/start_vnc.sh && \
    chmod +x /home/dockeruser/start_vnc.sh

#CMD ["/home/dockeruser/start_vnc.sh"]
CMD ["startxfce4"]

编译

shell 复制代码
docker stop ubuntu20-xfce-vnc 2>/dev/null || true
docker rm ubuntu20-xfce-vnc 2>/dev/null || true

docker build -t ubuntu20-xfce-vnc .

启动 docker

shell 复制代码
#!/bin/bash
docker stop ubuntu-xfce-vnc 2>/dev/null || true
docker rm ubuntu-xfce-vnc 2>/dev/null || true
set -e

# 允许 X11 显示(可选)
xhost +local:root

# 启动容器
docker run -it --rm \
    --name ubuntu-xfce-vnc \
    --network host \
    -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v $HOME:/home/dockeruser/host_home \
    ubuntu20-xfce-vnc startxfce4

此时在主机上会出现, 下面的内容,表示你已经 将 docker 的输出显示在自己的主机里面了。

强制杀死 startxfce4

shell 复制代码
pkill -f xfce; pkill xfce4-session; ps aux | grep xfce
相关推荐
CAFEBABE 3413 小时前
linux离线安装docker并启动
linux·docker·eureka
yuguo.im16 小时前
Docker 两大基石:Namespace 和 Cgroups
运维·docker·容器
会飞的土拨鼠呀16 小时前
docker部署 outline(栗子云笔记)
笔记·docker·容器
Jelly-小丑鱼17 小时前
Linux搭建syslog日志服务器
linux·服务器·docker·日志服务器·syslog服务器
没有bug.的程序员17 小时前
高频IO服务优化实战指南
java·jvm·spring·容器
starvapour18 小时前
Ubuntu硬盘的创建分区、格式化与挂载
linux·ubuntu
lisanmengmeng19 小时前
docker 方式安装部署禅道zentao(五)
运维·docker·容器
程序员老赵19 小时前
AdguardHome Docker 容器化部署指南
docker·dns
露临霜20 小时前
Docker安装nginx
nginx·docker·容器
CAFEBABE 341 天前
安装完docker之后怎么使用
运维·docker·容器