docker容器技术介绍

docker容器技术介绍

前言

img

​ 容器的集装箱概念是参照了航运中的集装箱概念,在航运中不关心你运输的是汽车还是棉花,它都通过集装箱将运输的流程规范成了标准化的操作,这里容器的使命也是一样,容器具备自包含的能力,将自身程序所依赖的程序全部包含在了容器中,通过Docker将底层环境打平,用户可以将一个容器镜像运行在任何操作系统的宿主机上,也就是“Build once, Run anywhere”。

img

容器发展历程

容器部署发展简史,互联网企业生产环境的应用部署所经历的过程,大致可分三个阶段

物理机部署 ---------->虚拟机部署---------->容器化部署

物理机

[外防盗链机存下来直接上传(img-JdTeFtGe-1692607149394)(C:\Users\35306\Downloads\截图.png)]

虚拟机

截图 (1)

容器

截图 (2)

容器它的优势有以下几点:

Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

  1. 不再依赖于独立的操作系统运行,相比较虚拟机它没有每个独立的操作系统,突破了宿主机的磁盘IO性能,减少了资源使用的浪费。

  2. 容器时应用程序层的抽象,对于运维和开发来说,容器只关心中间件之上的应用,中间件与宿主机的操作系统之间的问题都交给了Docker来处理。

  3. 它是自包含程序依赖,这也是它成为云原生应用基石的重要因素,有兴趣的同学可以查询云原生应用12要素进行学习。

由于容器的优势使得我们在底层资源使用上资源使用率近一步提高,通过过往资源使用率的统计,原有云主机部署服务底层资源使用率只有1020%,在容器技术加入以后,这一数值也提高到了4050%

Docker的核心概念

Docker作为容器化软件的一种,是社区使用率最高的容器引擎,但Docker并不等于容器,容器引擎有很多种,例如rkt和近期社区火热的kata。

Docker的核心概念有以下3点

1. 镜像(image)

2. 容器(Container)

3. 仓库(Registry)

Docker面向对象
容器对象
镜像

img

概念说明
imagesDocker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Container容器是独立运行的一个或一组应用,是镜像运行时的实体。
ClientDocker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Host一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker RegistryDocker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

典型的linux启动到运行需要2个FS,一个是rootfs,一个是bootfs。

bootfs是linux启动时进行加载的,会安装系统所使用的kernel内核,创建完成后bootfs会进行解绑。

rootfs是我们真正去使用linux是操作的系统文件系统,包含/dev /bin等目录,对于我们构建容器镜像来说,我们利用rootfs作为我们的基础镜像来使用,一个精简的os来说,它的rootfs可以很小,只需要包括基本的命令和工具即可,例如alpine只有不到10MB。

镜像构建基于一个基础镜像将我们需要进行安装的依赖和程序根据Dockerfile编写逐层叠加到镜像中,这里涉及到了一个容器镜像的概念就是,镜像分层,镜像的每一层都会有一个独立的id,Docker使用Union FS对Docker镜像进行分层和合层记录,当我们使用同一个基础镜像时,利用Docker镜像分层的功能可以帮助我们使用到已有的镜像层,拉取没有的镜像层,达到镜像的资源共享,减少重复镜像层拉取,达到资源使用最大化。

容器运行时会在容器镜像最上层生成一个Container层,这个层是copy这个完整的镜像加载到内存中运行,在这个层级中对于容器来说是可以进行修改的,但是由于运行于内存中,我们对Container层的任何修改都不会对底层镜像生效,当容器消亡时我们修改的数据也一并消亡,这就是容器的copy on write特性。

Dockerfile的编写

```
FROM uhub.service.ucloud.cn/hello/maven:3-jdk-8-alpine
WORKDIR /usr/src/app
COPY target /usr/src/app
COPY lib/jmx_prometheus_javaagent-0.12.0.jar /usr/src/app
COPY yaml/javaagent.yaml /usr/src/app
 
ENV PORT 8080
EXPOSE $PORT
ENV JMXPORT 9090
EXPOSE $JMXPORT
CMD [ "sh", "-c", "java -javaagent:jmx_prometheus_javaagent-0.12.0.jar=${JMXPORT}:javaagent.yaml -jar /usr/src/app/demo-0.0.1-SNAPSHOT.jar -Dserver.port=${PORT} --spring.config.location=/etc/appconfig/hello.properties" ]
```

在Dockerfile中我们常用的命令有以下几个

· FROM 我们基于什么镜像构建

· WORKDIR 容器的工作目录

· RUN 执行容器构建过程中的命令

· CMD & ENTRYPOINT 执行容器启动后的命令

· ADD & COPY 添加指定的文件到容器镜像中

· ENV 设置环境变量

· EXPOSE 设置容器暴露的端口

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值