文章目录
一:什么是Docker?
1.1:Docker
Docker是Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。
总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
容器和虚拟机的区别
我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件。
- 每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。
- 每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。
- 而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。
- 容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。
- 容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。
- 容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。
- 容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 占用小 | 占用大 |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般是几十个 |
安全 | 不安全(需要添加组件) | 安全 |
1.2:Docker 的三个基本概念
从上图我们可以看到,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镜像源
sudo yum update
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum update
sudo yum install docker-ce -y
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y
4、安装Docker-CE,开启docker服务并设置开机自启
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
3.2、镜像优化
直接下载镜像,速度很慢,而一般镜像有比较大,所以我们进行镜像加速,使用阿里云的源,即开启阿里云的镜像加速
必须要注册一个阿里云账号
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://s8vlfga6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.3、网络优化
开启路由转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
service network restart
systemctl restart docker
至此docker安装优化已完成!