文章目录
一、Docker 初了解
1.1、什么是Docker?
- docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
- docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux或Windows机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低。
- Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker
想了解更深入的docker知识,可以看官方文档,网址:docs.docker.com
1.1.1、容器 vs 虚拟机
从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。
Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。
由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。
但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
1.2、了解docker三个重要概念
1、image镜像
- docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下周一个已经做好的镜像来直接使用
2、container容器
- docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序
3、repostory仓库
-
仓库是集中存储镜像文件的沧桑,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
-
仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。
1.3、Docker的优势
1、更快速的交付和部署
- 开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
- 运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。
- 企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。
2、更高效的虚拟化
- Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
- Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
- 使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
二、Docker架构
2.1、docker组件
在这个架构图中,可以看到docker的重要组件。
- Docker Client:客户端
- Docker Daemon:守护进程
- Docker Images:镜像
- Docker Container:容器
- Docker Registry:镜像仓库
2.2、docker的架构解读
1、用户使用Docker Client客户端与Docker Daemon守护进程建立通信,并发送自己的一些请求给后者。
2、Docker Daemon 首先提供Server的功能接受Docker Client 的请求,docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
3、在Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动 graphdriver 将下载镜像以Graph的形式存储。当需要为Docker创建网络环境时,通过网络管理驱动 networkdriver 创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver来完成。
而libcontainer是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立并且安全的运行环境等。
三、docker部署及优化
3.1、docker安装
1、关闭防火墙,设置开机不启动
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置阿里云docker镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装Docker-CE,开启docker服务并设置开机自启
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
3.2、镜像优化
直接下载镜像,速度很慢,而一般镜像有比较大,所以我们进行镜像加速,使用阿里云的源,即开启阿里云的镜像加速
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6fr2rj44.mirror.aliyuncs.com"]
}
EOF
//加载daemon进程,重启服务
systemctl daemon-reload
systemctl restart docker
3.3、网络优化
开启路由转发
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker
到这里,我们的docker安装优化已经完成!
下一篇博客将继续docker的学习。