1. Docker 是什么?
官网的介绍是“Docker is the world’s leading software container platform.
” 官方给Docker的定位是一个应用容器平台;
Docker 是一个容器平台的领导者 Docker 容器平台 Docker 应用容器平台。
2. Docker 的优势
a)合作开发的时候,在本机可以跑,别人的电脑跑不起来;
这里我们拿 JavaWeb 应用程序举例,我们一个JavaWeb 应用程序设计很多东西,比如: jdk、tomcat、spring 等等。当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情况。Docker 则将程序直接打包成镜像,直接运行在容器中即可。
b)服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了;
这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现为问题。Docker 就很好解决了环境隔离的问题,别人程序不会影响到自己的程序。
c)公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器;
在没有 Docker 的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用 Docker 的话,我只需要将程序打包到镜像,你要多少台服务,我就给跑多少容器,极大的提高了部署效率。
3. Docker 和虚拟机的区别
比较上面两张图,我们发现虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker 是不携带操作系统的,所以 Docker 的应用就非常轻巧。另外在调用宿主机的CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用 Hypervisor 去虚拟化内存,整个调用过程是虚拟内存 -> 虚拟物理内存 -> 真正物理内存,但是 Docker 是利用 Docker Engine 去调用宿主的资源,这时候是虚拟内存 -> 真正物理内存。
4. Docker 的核心
a)镜像:一个镜像代表一个应用环境,他是一个只读的文件,如:mysql 镜像、tomcat 镜像、nginx 镜像等等;
Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起,底层是一个 debian 操作系统镜像,上面比如叠加一个 mysql 层,就完成了一个 mysql 镜像的构建;
层级概念就不难理解,每一层都可以添加、删除文件,成为一个新的 image,不同的 image 可以共享相同的 layer ;当然镜像是不包含操作系统 Linux 内核的。
b)容器:镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写;
容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。
依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿主机隔离的“容器”。容器和宿主机之间可以进行 port、volumes、network 等的通信。
c)仓库:用来存放镜像的位置,类似于 maven 仓库,也就是镜像下载和上传的位置;
常用的 Docker hub 有 https://hub.docker.com、 https://cr.console.aliyun.com、 https://c.163yun.com/dashboard 等。
d)DockerFile:Docker 生成镜像配置文件,用来书写自定义镜像的一些配置;
f)Tag:一个队镜像打包的文件,日后可以还原成镜像。
5. 安装
centos7 在线安装 Docker
yum install -y docker
测试:
docker run hello-world
结果:
Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/