前言
1.1 从环境配置说起
环境配置是软件开发的一大难题。开发、测试及运维人员需要相同的代码运行环境,如此一来就需要多次搭建环境,想想就觉得麻烦,实际上,在不了解docker等容器技术以前,还真就是这么干的,手动滑稽。开发者常常会说:“它在我的机器可以跑了”(It works on my machine),言外之意就是,在其他机器上可能会有问题。
在容器技术出现以前,虚拟机技术是一种将程序连同操作系统打包的解决方案。可以先搭好一套虚拟机环境,然后给测试和运维clone出来使用,但是这种方案缺点也很明显:
(1)资源占用多:相较于一个单纯的程序,操作系统是一个很臃肿的程序。我们知道操作系统运行起来是需要占用很多资源的,大家对此肯定深有体会,刚装好的系统还什么都还没装,内存几个G没了,磁盘几十个G没了;
(2)启动慢:虚拟机启动一般要等几分钟,应用程序才能真正运行。
1.2 Linux 容器
由于虚拟机存在以上缺点,Linux发展出了另一种虚拟化技术,Linux container(linux容器,简称 LXC)。LXC是一种轻量级的容器虚拟化技术,最大效率的隔离了进程和资源。它通过cgroup 和 namespace等限制,隔离进程组所使用的物理资源,如CPU、内存等。 实际上LXC在7、8年前就已经加入到linux内核了。然而直到2013年docker出世的时候才火起来,换句话说,如果没有云计算,敏捷开发,高频度的弹性伸缩需求,没有IT行业这么多年长足的发展,可能也就没有docker了。
二、什么是Docker
Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。 GitHub地址:https://github.com/moby/moby
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
简单来说就是:docker解决了运行环境不一致所带来的问题。
三、Docker 的用途
- 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- 动态扩缩容。因为 Docker 容器的开关很方便
- 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Docker局限性:
Docker用于应用程序时是最有用的,但并不包含数据。一个容器的镜像通常都很小,不用和存储大量数据,存储可以通过外部挂载等方式使用,比如:NFS、ipsan、MFS等 ,或者docker命令 ,-v映射磁盘分区。这个我们后面的文章会详细讲解。
四、Docker安装
环境:CentOS Linux release 7.9.2009 (Core)
4.1 依赖安装
yum install -y yum-utils device-mapper-persistent-data lvm2
4.2 配置国内docker-ce的yum源(这里用的是阿里云)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
ls /etc/yum.repos.d/
配置完,执行 ls /etc/yum.repos.d/ 如果看到docker-ce.repo,说明配置成功。
4.3 安装
yum -y install docker-ce doker-ce-cli containerd.io
4.4 修改/etc/sysctl.conf 配置
vim /etc/sysctl.conf #插入以下内容
net.ipv4.ip_forward = 1
sysctl -p #生效
cat /proc/sys/net/ipv4/ip_forward #查看结果,为1开启成功。
4.5 启动服务并设置开机自启
systemctl start docker ## 启动docker
systemctl enable docker ## 开机自启
docker version # 查看docker 版本
这里我们很清晰的可以看到docker是一个C/S架构。客户端就是我们的命令行操作,服务端是一个守护进程,在后台运行。
docker info # 查看docker信息
可以看到docker版本,系统内核版本、操作系统、CPU核心数、运行内存、存放镜像位置、registry仓库地址等。