1、docker概述和docker安装1.1、docker概述1.1.1、docker为什么会出现1.1.2、Docker的核心思想1.1.3、对比虚拟机与Docker1.1.4、docker架构1.1.5、Docker 核心对象1.1.6、镜像、容器、仓库1.1.7、Docker运行机制1.2、docker安装
Docker官网:http://www.docker.com
Docker中文网站:https://www.docker-cn.com
Docker Hub(仓库)官网:https://hub.docker.com
操作环境及软硬件参考配置如下:
参考车型:ROSMASTER X3
机器人硬件配置:Arm系列主控,思岚A1激光雷达,AstraPro Plus深度相机
机器人系统:Ubuntu(版本无要求)+ docker(20.10.21及以上版本)
PC虚拟机:Ubuntu(20.04)+ ROS2(Foxy)
使用场景:在相对干净的2D平面上使用
docker是一个应用容器引擎项目,基于go语言开发,开源。
目前ros2的课程全部置于docker容器内,客户可以体验学习使用容器化的开发方法。
先提几个场景:
运维帮你开发的项目部署到服务器上,告诉你有问题启动不起来。你在本地跑了一下发现没问题...
要上线的项目因为一些软件的版本的更新,导致不可用了...
有项目涉及到的环境内容非常多,各种中间件,各种配置,还要部署好多台服务器...
这些问题其实总结起来就是跟环境有关。 要避开各种因环境不同导致的问题,那么最好是在部署项目的时候,连同项目所需要的各种环境一起部署了最好。 比如,项目中涉及到redis、mysql、jdk、es等环境,在部署jar包的时候把整个环境都带上。那么问题来了,怎么样能让项目带上环境一起呢?
Docker就是来解决这个问题的!
这个就是docker的logo,一条装满集装箱的鲸鱼,在鲸鱼背上,集装箱相互之间是隔离的,这也就是docker的核心思想了。 比如之前有多个应用在同一台服务器上运行,可能会有软件的端口占用冲突,现在隔离后就可以独自运行了。另外,docker可以最大化的利用服务器的能力。
docker守护进程可以直接与主操作系统进行通信,为各个docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,docker可以节省大量的磁盘空间以及其他系统资源。
虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而docker通常用于隔离不同的应用,例如前端,后端以及数据库。
docker容器比虚拟机更加节省资源,速度更加快(启动、关闭、新建、删除)
docker使用客户端-服务器(client-server)架构。docker客户端(client)与docker守护进程(daemon)通信,后者负责构建、运行和分发docker容器的重担。docker客户端和守护进程可以在同一系统上运行,也可以将docker客户端连接到远程docker守护进程。docker客户端和守护进程通过UNIX套接字或网络接口使用REST API进行通信。另一个docker客户端是docker compose,它让你可以处理由一组容器组成的应用程序。
docker client是安装完 docker 之后,直接使用的 docker命令。
docker host是我们的docker宿主机(就是安装了docker的操作系统)
docker daemon是docker的后台守护进程,侦听并处理docker客户端命令,管理docker对象,例如镜像,容器,网络和卷。
registry 是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在images(本地镜像仓库)中.
images 是docker本地的镜像仓库,可以通过docker images查看镜像文件。
镜像(image):
docker镜像(Image)就是一个只读的模板。镜像可以用来创建docker容器,一个镜像可以创建很多容器。 就好似Java中的类和对象,类就是镜像,容器就是对象。
容器(container):
xxxxxxxxxx
docker利用容器(container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。可以把容器看做是一个简易版的 linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
仓库(repository):
xxxxxxxxxx
仓库(repository)是集中存放镜像文件的场所。仓库分为公开仓库(public)和私有仓库(private)两种形式。
最大的公开仓库是docker hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等。
需要正确的理解仓储/镜像/容器这几个概念 :
docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 docker 容器。image 文件可以看作是容器的模板。docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来就可以了。
docker pull 执行过程:
客户端将指令发送给docker daemon
docker daemon 先检查本地images中有没有相关的镜像
如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地
docker run 执行过程:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系(简版linux系统),并在只读的镜像层外面挂载一层可读写层
从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
1、官网安装参考手册:https://docs.docker.com/engine/install/ubuntu/
2、可以使用下面命令一键安装:
xxxxxxxxxx
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
3、查看docker版本
xxxxxxxxxx
sudo docker version
4、测试命令
sudo docker run hello-world
输出如下内容则表示Docker安装成功