美文网首页
Docker的使用

Docker的使用

作者: 卖西瓜的西瓜皮 | 来源:发表于2018-03-16 23:46 被阅读0次

进入组后需要使用到docker,作为一个对docker一无所知的人,将陆续使用到一些docker的一些功能,先将之前使用到的一些东西写在这里,后续遇到再陆续更新。

docker中文社区:http://www.docker.org.cn

这个中文社区有一些入门的东西,但是我刚开始使用的时候并没有怎么看懂😂,原谅我的智商,因为我最开始只是纠结怎么装docker,后来装好之后随着开始使用,才可以在中文社区找到对应的东西,进入到半懂状态。下面先从安装开始介绍。

Docker 的安装及使用

docker 是一个类似虚拟机却又不同于虚拟机的东西,它比虚拟机来说占用系统资源要少得多,此外我们在配一些软件环境的时候,如果不想影响到主系统,或者配环境遇到问题可以使用docker,docker可以创建容器,容器内可以理解为一个小的实例系统,当然这个只是为了能够对docker又一个初步概念而简单的描述。。docker功能更多,描述的可能不太对,只是给一个初步的印象。

Docker 的安装

  • 首先确认系统内核信息,docker需要系统内核版本在3.10以上使用如下命令
$ uname -a
  • 然后操作系统默认有docker的源,安装docker。这个需要sudo权限,服务器上没有权限求助于管理员进行安装
$ sudo apt-get install -y docker.io
  • 将docker加入到开机启动项中,并启动docker服务
$ chkconfig docker on  # 加入开机启动
$ service docker start # 启动docker服务
  • 确认安装docker版本信息
$ docker version
  • 查看是否安装成功,运行hello-world,运行此命令后docker会从本地找hello-world镜像,如果找不到就会从远程pull,下载镜像
docker run hello-world

Docker的使用

  • docker 查找镜像,docker的方便之处在配一个环境之后可以生成一个镜像文件,docker可以通过镜像构建多个实例容器,每个容器互不干涉,且容器都具有相应环境配置,例如
$ docker search ubuntu

我们就可找到许多ubuntu镜像的列表

  • docker下载镜像,需要哪个下那个
$ docker pull [name]
  • docker 新建容器,这里需要注意选取的参数
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
$ docker run -i -t ubuntu /bin/bash #示例
  • docker 查看容器
$ docker ps # 列出当前所有正在运行的container
$ docker ps -l # 列出最近一次启动的container
$ docker ps -a # 列出所有的container(包含历史,即运行过的container)
$ docker ps -q # 列出最近一次运行的container ID
  • 启动容器
$ docker ps -a # 查看容器列表
$ docker start [NAME] # 启动容器
$ docker attach [NAME] # 进入容器
  • 文件挂载
$ docker -v # 查看容器列表

高级

如何在docker容器中启动GUI程序,通过docker的前期使用我们知道docker一般在新建一个可交互容器后返回的是一个可以用的shell,但是容器往往没有图形化界面,尤其是当我们需要跑一些有GUI操作程序的时候,比如Autoware这个可视化操作平台,这就需要我们进行一些必要的配置。

之前我提到过如何使用xing+putty 或者ssh -X命令访问远程Linux服务器的那篇文章,其实基本思想一样,目前Unix/Linux比较主流的图形界面服务是X11,而X11服务的图形显示方式实际上是一种Client/Server模式,在服务端和客户端之间,X11通过『DISPLAY』环境变量来指定将图形显示到何处。如下面的流程所示,请注意服务端与客户端的位置,服务端是用于提供显示信息的。
对于docker来说,本机就是服务端,容器是客户端,本机提供显示服务。下面是具体步骤

Linux本机 + docker

因为我是登陆的远程服务器,如果采用ssh登陆的话,要想访问远程服务器的docker容器的GUI界面,因为数据走向不同,配置也不同,当前的配置是我用远程桌面的方式登陆的Linux服务器。因此,配置和本机加docker是一样的,具体步骤如下所示:

  • docker的强大在与他可以创建容器,在使用docker run新建容器命令的时候,不同的参数可以指定容器的网络服务,容器的X11服务等和主机的映射关系
$ docker run -i -t \

  -v /etc/localtime:/etc/localtime:ro \。# 既然涉及时间,感觉不能删除,没试验过

  -v /tmp/.X11-unix:/tmp/.X11-unix \。# 不能删除

  -e DISPLAY=unix$DISPLAY \

  -v $HOME/slides:/root/slides \   # -v挂载文件夹用,可以根据需要删除修改

  -e GDK_SCALE \

  -e GDK_DPI_SCALE \

  --name test \

  mirror

如上命令我们建立了一个可交互式的名字为test,使用镜像为mirror的容器,这个容器指定了DISPLAY为主机的执行X11服务的端口前面加上unix,这个组成了容器的监听X11服务的端口(命令可以不分行)

  • 之后开放X11服务给所有用户,在主机上执行命令
$ sudo apt-get install x11-xserver-utils
$ xhost+
  • 之后是我遇到的坑
    执行过xhost + 命令之后会报错,显示无法打开DISPLAY的端口,其实很简单,因为我们的DISPLAY环境变量并不是我们真正做过映射的执行x11服务的端口,打开一个没有进行服务的空的端口,就会导致报错

  • 解决方法如下:

    • 容器内部:
       $ echo $DISPLAY
    
    • 显示如下
    $ unix:13.0
    
    • 主机修改DISPLAY环境变量为:13.0,数值随容器里的变化,并开放x11服务给所有用户
    $ export DISPLAY=":13.0"
    $ xhost +
    

之后容器内的GUI应用完美运行。。。

关于docker显示GUI的几点补充

因为有其他事情,有一段时间没有去管docker的autoware容器,时隔接近一个月打开原来的容器,发现GUI界面无法显示,非常坑爹,我按照我上面的教程新建容器,发现了几个坑,首先上述新建容器的一大串命令,容器的DISPLAY和主机一样就好

docker run -v

这个命令是用来做挂载文件用的,后面的路径我自己计算机并不存在,所以我给删掉了,大家可以根据自己需要去设置自己的,就像虚拟机的共享文件夹一样,更加详细的教程参见

我重新新建容器,按原来写的教程没有弹出GUI界面,但是命令行也没有报错,我不太清楚是步骤有误还是我本机的某些服务有问题,毕竟在公共服务器,虽然是私人账号,会不会有的东西影响到也不好说

调了很多东西,包括重启了很多服务,最后还删了这一行“挂载文件夹”没有意义的参数,然后就成功了,我感觉应该还在DISPLAY和其涉及的服务身上,实在不行多试几次,大体步骤无误。

其他的具体细节比如远程ssh连接运行服务器的docker容器的GUI程序
将在后续补充……

相关文章

网友评论

      本文标题:Docker的使用

      本文链接:https://www.haomeiwen.com/subject/obvrqftx.html