docker入门(安装,常用功能使用整理)

由于不同的project需要不同版本的环境,比如一个要opencv3, 一个opencv4, 都安装在主机上会很混乱,所以用docker来创建不同的环境。

现在想用的docker功能:
安装
创建一个ubuntu环境
在ubuntu环境中如何安装软件
怎么把安装好软件的环境保存下来,并上传到docker hub, 方便在其他机器上使用,或者系统崩了之后复原
如何一个容器开启多个终端
如何借用主机的显示屏显示docker中的图形化界面

现在一项一项来:
安装
参照官网:https://docs.docker.com/engine/install/ubuntu/
这篇文章讲得比较详细:https://kalacloud.com/blog/how-to-install-and-use-docker-on-ubuntu/
为了方便设置,再装一个docker-desktop:
https://docs.docker.com/desktop/linux/install/
这个直接下载deb文件,双击文件夹安装即可(用dpkg -i我这里会报缺少依赖错误)

docker安装好后,每次使用docker命令前面都要加上sudo, 很是麻烦,
这时可添加自己的用户名进去,比如我的用户名是new_usr
那么sudo usermod -aG docker new_usr
再用一个su - new_usr,下次就不需要sudo了

创建一个ubuntu环境
我们可以拿来主义,直接用别人已经搭好的ubuntu环境
先看看都有什么ubuntu环境
我这里想用一个带opencv3版本的,
所以搜索opencv3

$ docker search opencv3
NAME                                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
harshjv/opencv3                               Dockerized OpenCV3 with Python support, Open…   4                    [OK]
wlads/opencv3-contrib-python                  OpenCV 3.1.0 with Contrib and Python support…   2                    
tanmaniac/opencv3-cudagl                      Docker container with CUDA 9, OpenGL, and Op…   2                    [OK]
varunagrawal/opencv3                          Ubuntu 16.04 + OpenCV3 + Python3                2                    
stevenli1119/opencv3.4.12_cuda11.0_cudnn8.0   opencv3.4.12_cuda11.0_cudnn8.0                  1                    
evoup/opencv3.3.0                             opencv3.3.0 with python2.7 over ubuntu16.04     1                    [OK]
lalala/opencv3                                                                                1                    [OK]

带[OK]的是官方的,我这里选evoup/opencv3.3.0
所以把它拉到本地

docker pull evoup/opencv3.3.0

通过$ docker images可以看到这个image已经被拉下来了。

注意拉下来的是image(镜像),而我们run一个这样的镜像就是container(容器),一个镜像可以run多个容器。

在ubuntu环境中如何安装软件
和正常ubuntu系统里安装软件一样。
换源方法:

sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
apt-get clean
apt-get update

保存安装好的环境,上传到docker hub, 方便系统崩了以后复原

参考:https://kalacloud.com/blog/how-to-install-and-use-docker-on-ubuntu/

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

commit之后可以看到新生成的image, 假设ubuntu-ros是新的镜像

要推送镜像,请首先登录 Docker Hub。没有用户名的要先注册一个。

docker login -u docker-registry-username

输入账号对应的密码后,即可登录成功。

Login Succeeded
注意:如果你在 Docker 注册用户名与用于创建镜像的本地用户名不同,要在备注中记录 Docker 用户名:

docker tag kalacloud/ubuntu-nodejs kalacloud/ubuntu-nodejs

然后,我们就可以推送镜像到 Docker hub 上了,命令如下:

docker push docker-registry-username/docker-image-name

如果我们要把ubuntu-nodejs镜像推送到kalacloud的版本库,命令如下:

docker push kalacloud/ubuntu-nodejs

可以打开docker-desktop看到上传的image

如何一个容器打开多个终端
像ros这种,在一个终端输入了roscore之后,要再打开其他终端才能运行node, 或者想开多个终端进行调试。
如果用docker run, 就会打开一个新的容器,涉及到容器间的通信问题,
如果想进同一个容器,要用docker exec

可通过docker ps查看当前容器的id, 假设这里container id是7896ef8f403f

docker exec -it 7896ef8f403f /bin/bash

如何借用主机的显示屏显示docker中的图形化界面
docker相当于一个没有显示屏的电脑,那么如何共享主机的画面来显示docker中的图形化界面呢,
比如显示ros中的小海龟。
参考:https://blog.csdn.net/qq_29935433/article/details/106194487?utm_source=app&app_version=5.5.0
只是需要注意一点,血泪的教训,
在主机上做了下面这一步之后,

#允许所有用户,包括docker,访问X11 的显示接口
sudo apt-get install x11-xserver-utils
xhost +
#输出为:access control disabled, clients can connect from any host

一定要新开一个终端打开docker,如果用之前已经打开的终端,环境的配置反映不过去,会出现could not connect to display :0的错误。

docker run -it --net=host -v /tmp/.X11-unix:/tmp/.X11-unix   -e DISPLAY=$DISPLAY --env="QT_X11_NO_MITSHM=1" 

如果报无法打开/tmp/.X11-unix,需要配置file shared的错误,
打开docker-desktop, 点右上角的setting符号,选Resource->File sharing, 然后把/tmp文件夹加进去。

再打开docker,运行rqt, rviz等,就能显示了。

共享USB
比如我要用一个usb摄像头,连到docker里面的程序,
程序启动时会提示报错,找不到/dev/video这个设备,
这时需要在docker run命令后面加一个选项

--device="/dev/video0"

同时还要加上--privileged,不然会没有访问摄像头的权限

docker与宿主机间的文件拷贝

宿主机的文件copy到docker:

docker cp <本地文件名> <container id>:<docker中的路径/文件名>

docker中的文件copy到宿主机:

docker cp <container id>:<docker中的路径/文件名> <本地文件名>

你可能感兴趣的:(环境,docker,ubuntu,容器)