docker 核心命令
docker 保存一个自己的镜像
docker commit 03c5388ee8ac jetson-inference-jupyterlab
docker 提交到仓库
docker tag jetson-inference-jupyterlab lijianyu110/jetson
or
docker tag jetson-inference-jupyterlab lijianyu110/jetson:jetson-inference-jupyterlab-v1
docker push 到远程仓库
docker push lijianyu110/jetson:v1
docker 启动一个容器,从一个镜像
docker run -it --rm --runtime nvidia --network host -v ~/:/location/ nvcr.io/nvidia/l4t-ml:r32.7.1-py3
进入一个已经运行的容器
docker exec -it container_centos7.3 /bin/bash
重启一个已经退出的容器
docker start -i dcc3302b54f7
启动带图形化界面的容器
Step1.在本地宿主机上安装x11界面服务
命令:
$ sudo apt-get install x11-xserver-utils
$ xhost +
Step2. 在启动docker容器时,添加选项如下:
-v /tmp/.x11-unix:/tmp/.x11-unix \ #共享本地unix端口
-e DISPLAY=unix$DISPLAY \ #修改环境变量DISPLAY
-e GDK_SCALE \ #这两个是与显示效果相关的环境变量
-e GDK_DPI_SCALE
完整命令:
docker run -it --rm --runtime nvidia -v /tmp/.x11-unix:/tmp/.x11-unix -v ~/:/location/ -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --net=host nvcr.io/nvidia/l4t-ml:r32.7.1-py3
不同类型的摄像头 参数不同
CSI 摄像头:使用 “-v /tmp/argus_socket:/tmp/argus_socket” 方式进行映射;
USB 摄像头:使用 “–device /dev/video” 方式进行映射,如果有多个 USB 摄像头则可以使用 “–device /dev/video --device /dev/video …” 方式添加到容器内
【备注】:xhost + 每次重新开机,在当前机器里面,不能远程 putty或ssh上去执行这个
xhost +
然后在启动docker, 我的都是jetson nano的,必须加入 --runtime nvidia 这样cv2 这些才能正常访问。
docker run -it --rm --runtime nvidia -v /tmp/.x11-unix:/tmp/.x11-unix -v ~/:/location/ -v /tmp/argus_socket:/tmp/argus_socket -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --net=host nvcr.io/nvidia/l4t-ml:r32.7.1-py3
最后在给两个验证程序,第一个在docker里面能看图片
import cv2
frame = cv2.imread("boluo.jpg")
cv2.imshow("capture",frame)
cv2.waitKey(0)
cap.release()
cv2.destroyAllWindows()
docker里面运行 摄像头 显示图片的程序
csiCamera.py 文件内容如下:
import cv2
gstreamer_pipeline = 'nvarguscamerasrc sensor-id=0 ! video/x-raw(memory:NVMM), width=1280, height=720, format=(string)NV12, framerate=(fraction)20/1 ! nvvidconv ! video/x-raw, width=(int)640, height=(int)360, format=(string)BGRx ! videoconvert ! appsink'
cap = cv2.VideoCapture(gstreamer_pipeline, cv2.CAP_GSTREAMER)
while(1):
ret,frame = cap.read()
cv2.imshow("capture",frame)
if (cv2.waitKey(1) & 0xFF) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()