暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker: GUI 应用,Ubuntu 上如何运行呢?

GoCoding 2020-05-29
848
  • 操作系统: Ubuntu 18.04

  • 运行镜像: continuumio/anaconda3, based on debian

内容目录

Step 1) 安装 DockerStep 2) 准备镜像Step 3) xhost 添加 localStep 4) OpenCV 预览图片Step 5) OpenCV 预览相机结语

Step 1) 安装 Docker

 1# update the apt package index
2sudo apt-get update
3# install packages to allow apt to use a repository over HTTPS
4sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
5
6# add Docker’s official GPG key
7curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
8
9# set up the stable repository
10sudo add-apt-repository \
11  "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
12  $(lsb_release -cs) \
13  stable"

14
15# update the apt package index
16sudo apt-get update
17# install the latest version of Docker Engine and containerd
18sudo apt-get install docker-ce docker-ce-cli containerd.io

允许当前非 root 用户管理 Docker:

1sudo groupadd docker
2sudo usermod -aG docker $USER

参考:

  • Install Docker Engine on Ubuntu:
    https://docs.docker.com/engine/install/ubuntu/

  • Docker CE 清华源:
    https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/

  • Post-installation steps for Linux:
    https://docs.docker.com/engine/install/linux-postinstall/

Step 2) 准备镜像

拉取 OpenCV 镜像,用其显示 GUI:

1docker pull joinaero/anaconda3-opencv3:1.0.0

Step 3) xhost 添加 local

1$ xhost +local:docker
2non-network local connections being added to access control list

Step 4) OpenCV 预览图片

 1# 运行镜像,指明 DISPLAY
2docker run -it --rm \
3  --name myenv \
4  -e DISPLAY \
5  -e QT_X11_NO_MITSHM=1 \
6  -v /tmp/.X11-unix:/tmp/.X11-unix \
7  -v $HOME/.Xauthority:/root/.Xauthority \
8  joinaero/anaconda3-opencv3:1.0.0
9
10# 激活 myenv 环境
11conda activate myenv
12
13# 预览 GoCoding.png
14python - <<EOF
15import cv2
16while True:
17  im = cv2.imread("/tmp/GoCoding.png")
18  im = cv2.resize(im, (256, 256))
19  cv2.imshow("GoCoding", im)
20  key = cv2.waitKey(10) & 0xFF
21  if key == 27 or key == ord('q'):
22    break
23EOF

Step 5) OpenCV 预览相机

 1# docker --device 指明 video 设备
2docker run -it --rm \
3  --name myenv \
4  -e DISPLAY \
5  -e QT_X11_NO_MITSHM=1 \
6  -v /tmp/.X11-unix:/tmp/.X11-unix \
7  -v $HOME/.Xauthority:/root/.Xauthority \
8  --device /dev/video0 \
9  --device /dev/video1 \
10  joinaero/anaconda3-opencv3:1.0.0
11
12# 激活 myenv 环境
13conda activate myenv
14
15# 预览相机图像
16python - <<EOF
17import sys
18import cv2
19cap = cv2.VideoCapture(0)
20while True:
21  ret, frame = cap.read()
22  if not ret:
23    sys.exit("Read the next frame failed")
24  cv2.imshow("GoCoding", frame)
25  key = cv2.waitKey(10) & 0xFF
26  if key == 27 or key == ord('q'):
27    break
28cap.release()
29EOF

结语

Go coding!

文章转载自GoCoding,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论