Docker 入门

概念

Docker 通过将运行环境打包进容器中,可以实现运行环境的迁移,在不同设备或终端中,保持运行环境的一致,可以避免因为环境配置导致的一些令人头疼的玄学问题。

镜像:只读的运行环境相关的文件,镜像就是我们跑的软件所需要的运行环境。

容器:基于镜像可以创建出容器,镜像是静态的,不可运行的,实际运行需要基于镜像创建出一个容器,在容器中才是真正可以运行程序的地方。

可以理解为镜像是安装包,容器是安装之后的程序,我们通过创建容器的操作(将镜像安装至容器中),然后再将自己的程序部署在容器中,就可以运行了。

数据卷:宿主机可以创建多个容器,而容器间是相互隔离的,互相无法影响对方,另外容器删除之后,容器内的数据也随之删除。

为了解决上述问题引入了数据卷,通过宿主机和容器共享文件目录(挂载),实现宿主机和容器之间文件操作的同步,来实现数据持久化,跨容器通信等功能。

端口映射:由于外部设备无法访问容器,需要通过宿主机,那么容器的端口和宿主机对外开放的端口的对应关系就叫做端口映射。换句话说,有个对应关系(宿主机端口——容器端口),外部设备访问宿主机端口,宿主机会访问对应的容器端口,然后将消息转发给容器,实现与外部的通信。

数据卷容器:创建容器时可以继承一个容器的数据卷,这个特定的容器就叫做容器数据卷,借此可以实现维护一个容器的数据卷,同步到其他的容器中,各个容器共享数据卷。

Dockerfile:用于制作 Docker 镜像,实际上就是一堆命令,指定父镜像是谁,创建完父镜像之后要执行什么命令(比如执行 Linux 命令安装某些程序 )构建本镜像,以及一些环境变量、参数等等。

镜像原理

镜像实际上是一个分层文件系统,他能做到快速启动和易于迁移的原因是复用。

例如 Centos 镜像,只需要小几百兆,而一个完整的操作系统需要几个 G,这里复用了宿主机的操作系统(底层一些相同的东西,不支持跨操作系统),而如果一个运行环境又基于 Centos,那么又可以制作一个镜像基于 Centos 镜像,这样就实现了层层嵌套、分层的效果。

例如一个 tomcat 镜像可能层次结构是 Centos -> jdk -> tomcat,而这每一层镜像都是可以复用的,另一个基于 jdk 的镜像就可以复用 Centos 和 jdk,也可以再制作一个镜像基于 tomcat,再添加一层

操作系统的镜像层次通常称作 rootfs,Docker 复用了宿主机的 bootfs,所以镜像会小很多,Linux 系统中,不同发行版本 bootfs 差别不大,所以可以通用

上一篇 下一篇

评论 | 0条评论