目录
一. docker:
1. docker本质
是一个进程,是一个开源的应用容器引擎。
进程(Process)是计算机科学中一个重要的概念,指的是在操作系统中正在运行的程序的实例。每个进程都是一个独立的运行环境,它拥有自己的内存空间、运行栈以及系统资源。
2. docker的等价比喻(核心):
(1)构建dockerfile 文件(项目环境)------>等价于,我们打算如何盖房子,先画好图纸
(2)docker build -f ros_x86.dockerfile . ------>等价于盖房子过程
就是按照dockerfile的层数顺序来进行镜像的
上面指令执行完,生成docker 镜像 ----->等价于房子盖好了,这个房子就在那个放,你没docker run (没钥匙),你就使用不了。
镜像文件名是ros_protobuf:noetic
1469e... 就是镜像文件。
(3)docker run ------->启动容器----->等价于我们拿到房子钥匙了
6c9d244..就是容器的 id。
但由于docker run 的时候,不仅仅是run一个,还有很多配置环境,所以要写成一个shell 脚本。
如 ros_docker_run.sh 所示。
(4)docker exec ----->进入容器,进行操作-------->等价于我们进入房子里面,可以任意使用房间内的所有东西。
3. docker与虚拟机(重点)
(1)区别:
-
虚拟机:虚拟机是通过Hypervisor(虚拟机管理系统,常见的有VMWare workstation、VirtualBox),虚拟出网卡、cpu、内存等虚拟硬件,再在其上建立虚拟机,每个虚拟机是个独立的操作系统,拥有自己的系统内核。虚拟出一整个硬件系统。
-
容器:容器是利用namespace将文件系统、进程、网络、设备等资源进行隔离,利用cgroup对权限、cpu资源进行限制,最终让容器之间互不影响,容器无法影响宿主机。(重中之重:本质是Linux里面的一个程序(进程)
-
命名空间:namespace
A::a C++的重名
B::a
-
虚拟机---直接虚拟出一个linux机器(重量级)
容器-----本质是进程,运行在我们的机器上,通过namespace,cgroup来实现docker的功能(用Go语言做的)(轻量级)
-
如图,差了一个操作系统。
(2)docker优势:
-
运行在容器上的docker的程序,直接使用的都是宿主机的硬件资源,因此在cpu、内存、利用率上,Docker将会在效率上具有更大的优势
-
Docker直接利用宿主机的系统内核,避免了虚拟机启动时所需要的系统引导时间和操作系统运行的资源消耗,利用Docker能够在几秒钟之内启动大量的容器,是虚拟机无法办到的。快速启动低资源消耗的优点,使Docker在弹性云平台自动运维系统方面具有很好的应用场景。
-
容器的启动时间是秒级的,大量节约开发、测试、部署的时间。还有一个非常关键的点,就是Docker能够高效地部署和扩容,Docker容器几乎可以在任意平台上运行,包括虚拟机、物理机、公有云、私有云、个人电脑、服务器等,这种兼容性,可以让用户把一个应用程序从一个平台直接迁移到另外一个平台。
-
但是,虚拟机的安全性比容器好一些,docker与宿主机共享内核、文件系统等资源,更有可能对其他容器、宿主机造成影响。
4. docker基本组成
镜像 image :一个模板,通过这个模板来创建容器服务
容器 container :docker 利用容器,独立运行一个或一个组应用,通过镜像来创建的。可以理解为一个简单的 linux 系统。
仓库 repository :存放镜像的地方,比如 docker hub ,阿里云。
5. docker 运行流程:
6. docker的常用命令:
(1)帮助命令:
(2)镜像命令(常用):
什么是镜像文件?
把我们所需要的一些依赖一些环境,打包成一个镜像文件。