使用 docker 构建ubuntukylin-桌面版本 通过vnc远程实现云桌面

1. ubuntukylin-docker打包桌面

  1.1 需要安装优麒麟的完整操作系统 通过tar执行打包因为proc sys dev run boot 是依赖于内核 启动时会自己生成

        命令:  tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .

  1.2 把tar包 导成docker-images

        命令: cat /tmp/system.tar | docker import - ubuntukylin:v1

  1.3  导入完成以后把 系统启动起来看是否有错误 如果有错误请重新打包

        命令: docker -itd --name ubuntukylin1 -p 5900:5900 <镜像>

        查看容器是否启动成功: docker ps -a

        启动成功进入容器内部:docker exec -it <容器名称> bash

  1.4  我们这个时候就需要安装 x11vnc xvfb 注:{打包的时候记得添加阿里云源 官方的特别慢}

        命令: apt update  更新一下

              apt install x11vnc -y

              apt install xvfb -y

              apt install supervisor -y

  1.5 安装完成以后 我们配置vnc密码

        配置密码

        x11vnc -storepasswd

        启动vnc服务

        x11vnc -display :5 -once -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared  -scale 1920x1080 &

  1.6 启动Xvfb

        Xvfb :5 -screen 0 1920x1080x24

        这里说一下 xvfb是一个虚拟卡的工具 x11vnc是一个远程桌面的工具

  1.8  然后我们就可以查看一下 5900端口是否启动成功 或者查看x11vnc是否启动成功 有 PORT=5900 就是ok的

        命令: ss -tlunp | grep 5900

  1.9  现在我们需要通过vnc远程我们的桌面

        下载一个vnc vnc的端口和ip远程 输入你设置的密码即可

  1.10  能够看到桌面就是ok的 如果有 鼠标是X 或者是时间不对 你需要在ubuntukylin主机系统里面找到资源打进来

2. 把运行成功并且可以远程的vnc桌面容器打包成

      命令: docker commit -m "xxxxx" -a "xxxxx" -p <这个是打包的时候停止容器> <容器名称> <需要打包成的images名称和版本>


3. 编写dockerfile  与脚本

    3.1 因为ubuntukylin里面我们是通过 在容器里面配置好在打的容器images所以它不会自启动我们需要通过脚本或者其他的方式让images里面的

        x11vnc xvfb 还有桌面开机就启动

    3.2 编写vnc xvfb 桌面启动 脚本

          在/opt/下面创建一个Docker命令 进去里面 mkdir Docker && cd Docker

          然后我们开始写启动的shell脚本


          #!/bin/bash

          start_x11vnc=x11vnc -display :5 -once -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared  -scale 1920x1080 &

          start_xvfb=Xvfb :5 -screen 0 1920x1080x24 &

          start_ukui=DISPLAY=:1 ukui-session

          rm /tmp/.X* -rf

        def ()  { 

          funname_x11vnc () {

          pgrep ukui >> /dev/null

            #通过命令判断 ukui是否是启动成功的 在linux里 成功就是0 失败就是 1

            if [ $? -eq 0 ];then

            echo "x11vnc start ok..."

            else

                echo $start_x11vnc

            fi

          }

          funname_xvfb () {

            pgrep xvfb >> /dev/null

            if [ $? -eq 0 ];then

            echo "xvfb START ok..."

            else

              echo $start_xvfb

            fi

          }



          funname_ukui () {

            pgrep ukui >> /dev/null

              if [ $? -eq 0 ];then

              echo "ukui START ok..."

              else

                echo $start_ukui

              fi

          }

        }

        def #执行函数

        supervisor #保持容器不退出 他也是一个 进程管理因为 容器没有前台进程是会退出的 还有一种投机取巧的方法就是 ping 8.8.8.8 或者 tail -f 日志

    3.3 编写dockerfile 

        FROM ubuntukylin:v2

        COPY start.sh /start.sh

        COPY startgui.sh /home/dev/startgui.sh

        RUN chown dev:dev -R /home/dev/startgui.sh

        COPY vnc.conf /etc/supervisor/conf.d/vnc.conf

        RUN chmod 777 /start.sh

        RUN mkdir /var/run

        ADD config.tar /home/dev/

        RUN chown dev:dev -R /home/dev/.config/

        ENTRYPOINT ["/start.sh"]

    3.4 docker build -t .

    3.5 打包完成以后 通过 docker images 查看启动即可

    <如果需要打包其他系统 只要是linux 都可以使用这个方法 但是 有一些启动的桌面 不一样 我这个是ukui的桌面 >


Xvfb :5 -screen 0 1920x1080x24

ukui-session --display :5

x11vnc -display :5 -once -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared  -scale 1920x1080 &

你可能感兴趣的:(使用 docker 构建ubuntukylin-桌面版本 通过vnc远程实现云桌面)