简单介绍 docker
简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的 Docker 有以下几个部分组成:
-
Docker Client 客户端
-
Docker Daemon 守护进程
-
Docker Image 镜像
-
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大优势
- 更高效的利用系统资源
docker 对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。
- 更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而 docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试,部署的时间。
- 一致的运行环境
开发过程中常见的一个问题是环境一致问题,由于开发环境,测试环境,生产环境不一致,导致有些 bug 并未在开发过程中发现。而 docker 的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题。
- 持续支付和部署
对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。而且使用 dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
- 更轻松的迁移
由于 docker 确保了执行环境的一致性,使得应用的迁移更加的容易。 docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
- 更轻松的维护和拓展
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