Docker简介

1、Docker为什么会出现?

一款软件产品必须经过:开发 -> 上线

开发人员负责将应用程序开发制作出来。
运维人员负责上线,配置应用程序。

在这里存在一个问题:开发环境和上线环境不一致;可能会导致,开发人员在自己的电脑上可以正常运行代码,运维人员将服务程序上线到服务器后,由于环境不一致可能会导致运行失败,服务不可用。

如何解决上述问题?

  • 对上线的服务器系统进行环境配置,但环境配置十分麻烦特别是集群部署时,集群中的每一台机器都需要部署环境。
  • 将开发环境和程序代码一起打包到服务器中运行。

Docker就是将开发环境和程序代码一起打包到服务器中运行的技术。

java语言 --> apk程序 --> 发布到应用商店 --> 客户下载apk --> 安装使用(必须要有环境才能安装成功)

java语言 --> jar环境 --> 打包项目和环境(镜像) --> 上传到docker仓库(商店) --> 下载仓库中的镜像 --> 运行使用

2、Docker介绍

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker_logo.jpg

Docker的核心思想就是来自集装箱;集装箱的概念是隔离货物,所以docker的核心就是隔离机制。同时docker使用可移植镜像所以部署以及运维极其方便快捷。

2.1 Docker发展史

2010年,几个热爱IT的年轻人,在美国成立了一家公司叫做dotCloud,主要做一些Paas的云计算服务和LXC有关的容器技术赚钱盈利,他们将自己的容器技术命名为Docker!

Docker刚刚诞生的时候,并没有引起行业的注意!这个时候 dotCloud公司难以在行业中存活,所以这几个年轻人选择开放Docker源代码来引起注意!

2013年,Docker开源!越来越多的人发现docker的优点,在这一段时间docker每个月都会更新一个版本。

2014年4月9日,Docker1.0发布!

2.2 容器和虚拟机的区别

虚拟机:通过虚拟化技术模拟真实的硬件从而创建出来的一台拥有完整功能的逻辑计算机。

Docker容器:docker容器也是一种虚拟化技术,和传统虚拟化不一样的是docker只模拟一个程序最核心的运行环境,所以十分小巧,启动更快。

Docker虚拟化技术和传统虚拟化技术架构对比:
vm_vs_docker.png

对比特点
虚拟机
完整的系统功能,隔离性更好,占用空间大(通常以G为单位),运行占用资源较多,启动慢(分钟级启动)
容器只有程序运行的核心环境,不需要安装直接运行镜像即可,隔离性一般,十分小巧占用空间极小(一般以M为单位),启动快(秒级启动)

2.3 Docker引擎架构

Docker引擎组成:
docker_engine.png

Docker运行架构:
docker_framework.png

2.4 Docker底层技术

  1. 名称空间:Docker通过名称空间机制为容器提供隔离的工作空间。
  2. 控制组:Linux可以通过控制组设置进程使用CPU、内存和I/O资源的限额。Docker引擎正是依赖这种底层技术来限制容器使用的资源。
  3. 联合文件系统:可以将其他文件系统合并到一个联合挂载点。联合文件系统是实现Docker镜像的技术基础。Docker镜像可以通过分层来实现继承。
  4. 容器格式:Docker引擎将名称空间、控制组和联合文件系统打包到一起所使用的就是容器格式。默认的容器格式是Libcontainer。

2.5 Docker优势和用例

Docker优势:

  1. 应用程序快速、一致地交付
    1. 开发人员在本地编写应用程序代码,通过Docker与同事进行共享。
    2. 通过Docker将应用程序推送到测试环境中,执行自动测试和手动测试。
    3. 开发人员发现程序错误时,可以在开发环境中进行修复,然后重新部署到测试环境来进行测试和验证。
    4. 完成应用程序测试之后,向客户提供补丁程序非常简单,只需将更新后的镜像推送到生产环境中。
  2. 响应式部署和伸缩应用程序
  3. 更简单的系统运维
  4. 更高效的计算资源利用

Docker用例:

  1. 现代应用程序
  2. 微服务
  3. 持续集成和持续部署
  4. 大数据应用
  5. 边缘计算
  6. 云迁移
  7. 数字化转型
  8. 传统Windows服务器应用程序的现代化

3、Docker名词解释

镜像(image):docker镜像就好比是一个模板,可以通过这个模板来创建容器服务;一个镜像可以创建多个容器(应用运行在容器中)。

image_to_container.png

容器(container):docker容器可以独立运行一个或者一组应用程序;容器是由镜像创建出来的。

仓库(repository):docker仓库是存放镜像的地方;docker仓库分为公有仓库和私有仓库。docker默认仓库是Docker Hub。

4、Docker环境部署

//首先配置yum仓库,此处省略yum仓库配置

//卸载系统自带的podman容器
yum -y remove podman-manpages

//部署安装docker所需要的环境
yum install -y yum-utils device-mapper-persistent-data lvm2

//配置docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

//安装docker-ce以及docker组件
yum install -y docker-ce docker-ce-cli containerd.io

//如果安装docker-ce以及docker组件时报错,需要在安装时添加选项--allowerasing
yum install -y docker-ce docker-ce-cli containerd.io --allowerasing

//启动docker服务并设置开机自启
systemctl start docker.service
systemctl enable docker.service

//设置docker hub阿里云镜像加速
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://此处地址为自己阿里云镜像加速地址.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker