简单介绍 docker

简单介绍 docker

简介

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

一个完整的 Docker 有以下几个部分组成:

  1. Docker Client 客户端

  2. Docker Daemon 守护进程

  3. Docker Image 镜像

  4. Docker Container 容器

Docker 容器在运行时不需要额外的资源开销,因此可以大幅度提高资源利用率。它提供了标准的配置方法,使得开发者可以轻松地创建一个轻量级、可移植、自给自足的容器。容器技术使得开发者可以在笔记本上编译测试通过的容器,并批量地在生产环境中部署,包括虚拟机、裸金属服务器、OpenStack 集群等。

Docker 的三大理念是“Build,Ship,Run”,即构建、运输和运行应用。它通过 namespace 和 cgroup 来提供容器的资源隔离与安全保障,使得容器在运行时不需要类似虚拟机的额外资源开销。

Docker 与 Kubernetes 对比

Linux 容器早在 2008 2008 2008 年就已出现,但是直到 2013 2013 2013 年 Docker 容器问世,它才广为人知。随着 Docker 容器的到来,越来越多的人开始开发和部署容器化应用。然而,随着容器化应用数量的不断增长,容器操作变得越来越复杂。如何协调、扩展、管理和调度数以百计的容器?Kubernetes 可助一臂之力。Kubernetes 是一个开源编排系统,让您可以运行 Docker 容器和工作负载。当您需要扩展跨多台服务器部署的多个容器时,它可以为您降低操作复杂性。使用 Kubernetes 引擎,您可以自动化编排容器生命周期,将应用容器分布在整个托管式基础设施中。最后,Kubernetes 还可以快速按需扩展或收缩资源,持续供应、调度、删除和监视容器的运行状况。

Docker的6大优势

  1. 更高效的利用系统资源

docker 对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。

  1. 更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试,部署的时间。

  1. 一致的运行环境

开发过程中常见的一个问题是环境一致问题,由于开发环境,测试环境,生产环境不一致,导致有些 bug 并未在开发过程中发现。而 docker 的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题。

  1. 持续支付和部署

对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。而且使用 dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

  1. 更轻松的迁移

由于 docker 确保了执行环境的一致性,使得应用的迁移更加的容易。 docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

  1. 更轻松的维护和拓展

docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,docker 团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

构建容器映像

可以使用 Dockerfile 生成容器映像,或者依赖于 .NET SDK 来生成映像。

以下示例演示了如何通过几个快速步骤生成和运行容器映像。

$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
  Determining projects to restore...
  All projects are up-to-date for restore.
  webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
  webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
  Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
  Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID   IMAGE     COMMAND               CREATED              STATUS              PORTS                                       NAMES
7c7ad33409e5   webapp    "dotnet webapp.dll"   About a minute ago   Up About a minute   0.0.0.0:8000->8080/tcp, :::8000->8080/tcp   jovial_shtern
$ docker kill 7c7ad33409e5

参考

  • https://baike.baidu.com/item/Docker/13344470

  • https://answer.baidu.com/answer/land?params=mAxxFuIMKJW2jkmjHs51Wzh1Xf8RKISYU6g%2FKudxyRCS3V6ssVkg9swT3La3RjeoA6K2G646lD%2BJR9MBQixDSJxYRUfG4S9vfrB2C8wlpUIirKLU1RxwmTEWuBZOC5j8VXIzIsdtOQwvXtxOtiJpehe8DYm%2BAPGMj7pTWfO9rTk%3D&from=dqa&lid=ffe596ce00cbbbfd&word=docker%E6%98%AF%E4%BB%80%E4%B9%88

  • https://www.php.cn/faq/486869.html

  • https://www.oracle.com/cn/cloud/cloud-native/container-registry/what-is-docker/#who-uses-docker

  • https://learn.microsoft.com/zh-cn/dotnet/core/docker/introduction

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值