1. ubuntukylin-docker打包桌面
? 1.1 需要安裝優(yōu)麒麟的完整操作系統(tǒng) 通過tar執(zhí)行打包因為proc sys dev run boot 是依賴于內(nèi)核 啟動時會自己生成
? ? ? ? 命令:? tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
? 1.2 把tar包 導(dǎo)成docker-images
? ? ? ? 命令: cat /tmp/system.tar | docker import - ubuntukylin:v1
? 1.3? 導(dǎo)入完成以后把 系統(tǒng)啟動起來看是否有錯誤 如果有錯誤請重新打包
? ? ? ? 命令: docker -itd --name ubuntukylin1 -p 5900:5900 <鏡像>
? ? ? ? 查看容器是否啟動成功: docker ps -a
? ? ? ? 啟動成功進(jìn)入容器內(nèi)部: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服務(wù)
? ? ? ? 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是一個遠(yuǎn)程桌面的工具
? 1.8? 然后我們就可以查看一下 5900端口是否啟動成功 或者查看x11vnc是否啟動成功 有 PORT=5900 就是ok的
? ? ? ? 命令: ss -tlunp | grep 5900
? 1.9? 現(xiàn)在我們需要通過vnc遠(yuǎn)程我們的桌面
? ? ? ? 下載一個vnc vnc的端口和ip遠(yuǎn)程 輸入你設(shè)置的密碼即可
? 1.10? 能夠看到桌面就是ok的 如果有 鼠標(biāo)是X 或者是時間不對 你需要在ubuntukylin主機(jī)系統(tǒng)里面找到資源打進(jìn)來
2. 把運行成功并且可以遠(yuǎn)程的vnc桌面容器打包成<images>
? ? ? 命令: docker commit -m "xxxxx" -a "xxxxx" -p <這個是打包的時候停止容器> <容器名稱> <需要打包成的images名稱和版本>
3. 編寫dockerfile? 與腳本
? ? 3.1 因為ubuntukylin里面我們是通過 在容器里面配置好在打的容器images所以它不會自啟動我們需要通過腳本或者其他的方式讓images里面的
? ? ? ? x11vnc xvfb 還有桌面開機(jī)就啟動
? ? 3.2 編寫vnc xvfb 桌面啟動 腳本
? ? ? ? ? 在/opt/下面創(chuàng)建一個Docker命令 進(jìn)去里面 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 #執(zhí)行函數(shù)
? ? ? ? supervisor #保持容器不退出 他也是一個 進(jìn)程管理因為 容器沒有前臺進(jìn)程是會退出的 還有一種投機(jī)取巧的方法就是 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 <images名稱:版本> .
? ? 3.5 打包完成以后 通過 docker images 查看啟動即可
? ? <如果需要打包其他系統(tǒng) 只要是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 &