一、为什么出现
多环境配置,导致上线很麻烦。运维、开发考验都很大,经常本地可以上线无法使用。
环境配置十分麻烦,每一个机器都要部署环境、集群都很浪费时间,还容易部署错误,费时费力。Docker的出现就是从根本解决这个问题,带着第三方组件一起发布项目,也就是带上环境一起安装。
之前在服务器配置相关环境很费时间、配置很麻烦,环境可能也不是跨平台的,可能导致开发的时候可用,但是线上因为环境不同没办法使用。所以现在开发-发布一起完成。
开发者把项目+运行环境一起打包成镜像,下载直接使用就行了。很棒!Docker思想来源于集装箱,像集装箱一样项目、容器、组件都是隔离的。也会让linux系统的性能利用到极致。
二、Docker的历史
2010年,几个搞IT的年轻人,就成了一家公司dotCloud,做一些云计算服务,linux有关的虚拟技术,就将容器化技术统一的简化命名,这个就是一开始的Docker,也是Docker的诞生,也没引起行业的注意。2013年后把Docker开源了,越来越多的人发现了Docker的优点,几乎每个月都会更新一个版本,到了2014年4月Docker1.0发布了。
相对传统的虚拟机技术,容器技术十分的轻巧,而传统的虚拟机技术显得十分笨重。容器注重应用的运行,所以只会关联需要的,所以十分小巧。所以开发人员一定要会,否则就是人肉运营。
Docker是GO语言开发的,提供的文档十分详细(Docker),并且Docker也有镜像商店(Docker Hub),有常用的组件镜像,也可以自己发布镜像等。
三、Docker能做什么
基于虚拟机的缺点如资源多、冗余多、启动慢。容器化技术并不是一个完整的系统,只关心需要的,可以充分的利用操作系统的资源和性能。
- 传统虚拟机是模拟出一个完整的系统
- 容器技术是运行在宿主机上,使用宿主机的内核,容器相互隔离、存在自己的文件系统
DevOps(开发、运维)
- 快速的交付、部署,几乎就是一件运行、打包镜像、发布测试
- 更便捷的升级、扩\缩容,可以像搭积木一样
- 更简单的运维,开发、测试、生产高度一致
- 更高效的计算资源利用,内核级别的虚拟化,一个物理机运行更多的容器实例
四、Docker的一些名词
1、基本组成:客户端、服务器、仓库
镜像(image):相当于一个模版,通过这个模版来创建很多容器,最终的服务运行就是在容器中的
容器(container):独立运行一个或者一组应用,通过镜像创建的,可以启动、停止、删除登记本命令,可以理解为一个微型的linux系统
仓库(repository):存放镜像的地方,开发者可以自己创建自己的仓库,也可以使用共有的,配置镜像加速
五、安装Docker
官网地址:Install Docker Engine on CentOS | Docker Documentation
1、卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、需要的安装包
sudo yum install -y yum-utils
3、设置镜像,使用国内的速度会快点
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
4、更新yum索引
yum makecache fast
5、安装docker内容,ce 社区办(推荐)
sudo yum install docker-ce docker-ce-cli containerd.io
6、启动Docker
sudo systemctl start docker
7、查看版本号
docker version
8、测试hello world
sudo docker run hello-world
9、查看hello world 镜像
docker images
10、卸载,可以看到docker 默认工作路径是 /var/lib
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/container
11、配置阿里云镜像加速
六、Docker的运行原理
Docker 是一个CS架构的系统,Docker运行在宿主机上,通过Socker从客户端访问。Docker-Server执行客户端发送过来的命令。
Docker比虚拟机快原因,比虚拟机更少的抽象层,使用的是宿主机的内核,新建一个容器的时候,不需要虚拟机一样Guest OS,省略了复杂的过程。