1.Docker
2.为什么要用Docker
Namespace:在运行进程的时候我们可以指定它运行在哪个Namespace下,Namespace又分很多的子系统,包括网络Namesapce,PID Namespace,UTS Namespace,MNT Namespace。
假设我们启动一个进程,并且给这个进程分配了一个新的网络Namespace,这个时候意味着进程就可以有独立的网络设备,有独立的IP地址,独立的防火规则,独立的路由表。这个namespace和主机的namespace是相互独立的,隔离的。这个时候其实就是把一个进城赋予独立的网络标识了。整个的过程其实不涉及虚拟机的创建,一般我们创建虚拟机的时候需要分配多少CPU,多少内存等等。
但是一个主机上可以启动多个进程,这个时候就涉及如何管控这些进程资源分配,这个就是通过Cgroup去做的。Cgroup是Linux里面的Control Group。
通过Namespace和Cgroup就使得Linux主机上的进程可以有独立的一个运行空间,有独立的身份,然后通过Cgroup来控制它的资源
3.虚拟机和容器运行态的对比
3.1虚拟机最下面是服务器,它本身会有一个Host OS.在此基础之上要装一个Hypervisor,Hypervisor的作用就是启动各个虚拟机的,所以Hypervisor之上还有各个GuestOS也就是各种各样的VM,GuestOS里面本身就是一个完整的操作系统。
4.性能对比
5.安装Docker
6.容器操作
docker images 可以看看本地有哪些镜像。docker run就是告诉docker daemon希望去运行CentOS的这个镜像。如果没有这个镜像,就会去docker hub镜像仓库拉取。
可以通过docker run -d nginx的方式,在后台运行一个nginx的服务
如果想看容器的细节,可以通过docker inspect 【容器ID】进行查看
7.初识容器【重点】
任何容器镜像的构建都离不开docker file.
docker file第一行有一个FROM,表示是从哪个基础镜像构建出来的。
通过ENV加一些环境变量,通过add的操作把之前编译好的文件添加到这个容器镜像里面去(实际上是做了一个copy),接下来通过entrypoint来指定说这个容器镜像在运行的时候应该指定启动哪个程序。
docker build就可以去构建容器镜像,通过docker push把这个容器镜像推到镜像仓库,一旦推送到镜像仓库,别人就可以通过这样docker run的命令,从镜像仓库里面拉取这个容器镜像并且运行了。