什么是docker容器技术

什么是docker容器技术,第1张

docker容器技术指Docker是一个由GO语言写的程序运行的“容器”(Linuxcontainers,LXCs)

Docker则实现了一种应用程序级别的隔离,它改变我们基本的开发、 *** 作单元,由直接 *** 作虚拟主机(VM),转换到 *** 作程序运行的“容器”上来。

Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:

DockerEngine:一个便携式、轻量级的运行环境和包管理器。(注单OSvs单线程)

DockerHub:为创建自动化工作流和分享应用创建的云服务组成。(注云端镜像/包管理vsnpm包管理,是不是跟npm特别像?)

从2013年3月20日,第一个版本的Docker正式发布到2014年6月Docker10正式发布,经历了15个月。虽然发展历程很短,但Docker正在有越来越流行的趋势。

其实Container技术并非Docker的创新,HeroKu,NodeJitsu等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。

# yum -y install  docker  docker-ce-cli   containerdio

# rpm -qa | grep container

# rpm -qa | grep docker

# rpm -ql docker-ce-cli | grep bin

# rpm -ql docker-ce | grep bin

# rpm -ql containerdio | grep bin 

# systemctl status docker

# systemctl status containerd

/var/run/dockersock

/run/containerd/containerdsock

/usr/bin/docker 和 /usr/bin/dockerd 就是命令行客户端和daemon

dcocker的架构是 C/S 模式

docker-containerd

docker-containerd-ctr

docker-containerd-shim

 docker-init

 docker-proxy

 docker-runc 

其实最简单的方式,就是加个命令行参数 --help 看看他们的简介。

可以看出来,docker-init, docker-containerd-shim 和 docker-proxy 没有在帮助里告诉我们是干什么的,其他的都有:

docker-containerd: 高性能容器运行时

docker-containerd-ctr: docker-containerd 的命令行客户端

docker-runc: 运行容器的命令行工具

如果去搜索一番,就会发现:docker-containerd 就是  containerd ,而 docker-runc 就是  runc 。

containerd是真正管控容器的daemon,执行容器的时候用的是runc。

为什么 要分的七零八散呢?

我估计其中主要的原因是防止docker垄断,因此把容器标准独立出来,就有了  runtime-spec ,然后有了 runc ,然后有了 containerd (此处发展历史没有考究,并不关心)。

可以看出来,docker本身其实已经被剥离干净了,只剩下docker自身的一些特色功能了,真正容器的管控都在containerd里实现。 

所以接下来介绍的顺序是 runc, containerd, shim, docker-init, docker-proxy。

runc是标准化的产物,为了防止一家商业公司主导容器化标准,因此又了open containers组织,因此,创建容器,其实最终通过runc就可以了。

dockerd 有个子进程,是 containerd,然后 containerd 有子进程。

从  官方仓库  的描述可以看出来,其实 containerd 就包含了我们常用的 docker 的命令:

增删查改容器

增删查改镜像

也就是说,如果我们要对容器进行 *** 控,直接使用 containerd 其实就够了。

说明: 如果没有单独起一个containerd,而是使用了 docker-containerd,通过 ps aux | grep docker 发现它使用了 /var/run/docker/containerd/containerdtoml 这个配置文件,而监听路径就写在里面。

shim的翻译是垫片,就是修自行车的时候,用来夹在螺丝和螺母之间的小铁片。

关于shim本身,网上介绍的文章很少,但是作者在 Google Groups 里有解释到shim的作用:

>

1什么是Docker

借用下网上传统虚拟机与Docker的对比。

传统虚拟化应用程序中,不仅包含应用程序和必要的二进制文件库,还包含一个完整的 *** 作系统。

而Docker容器仅包含应用程序和相关依赖项,在主机的 *** 作系统用户空间中作为一个独立进程运行,与其他容器共享内核,从而实现了虚拟机的资源隔离和分配,具有更高的可移植性和效率提高。

2为什么使用Docker

1更快速的交付和部署

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接 使用这个容器来部署代码。

2高效部署和扩容

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。

3更高的资源利用率

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

4更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

3Docker的工作原理和概念

自己制作镜像然后上传仓库或使用仓库已有的镜像文件拉取到容器中部署。

为了方便Docker的说明,本次例子使用虚拟机安装CentOS 7来演示。CentOS 7的安装请等查看下篇文章或自行百度。

1安装之前的准备工作

按照顺序,执行如下 *** 作

1、安装必要的一些系统工具

2、添加软件源信息

3、更新并安装Docker-CE

安装准备工作

2开启Docker服务

运行docker version 如果出现以下情况,说明当前用户没有 root相关 *** 作权限

无root权限

解决思路

先查看有多少镜像

运行docker run hello-world 测试命令,如果出现下方红框内消息,证明安装成功

3查看docker基本信息和版本

1构建Nginx基础镜像

查询nginx镜像

镜像拉取

查看对外的访问路径

怎么才能访问刚才启用的nginx

nginx页面内容

我们可以进入容器,看下这个容器是什么样子

查看nginx在哪个位置

我们发现尽管启动了nginx,但是在外部还是不能访问,这是因为docker具有隔离机制,要不然怎么叫做容器化部署呢

Docker内nginx端口

对Nginx进行外网端口映射;

2构建Tomcat基础镜像

打开容器后,默认安装目录在 /usr/local/

3创建自己的专属镜像

用Dockerfile来制作镜像

创建一个新的镜像,并起名字为nywlw

查看新的镜像

运行自己创建的容器

4删除容器实例

5删除镜像

每天发布更多新鲜有含量的技术文章、总有一款适合你。

设想,为了推出一个网站,您不必从裸机安装一个完整的服务器。 而不是安装 *** 作系统,然后安装服务器软件,然后部署精心设计的应用程序或站点,您可以简单地在一个独立的包中开发所有内容,并使用单个命令将其推出。

这是使用容器的众多好处之一。它们使开发和部署周期变得异常高效。但是你如何部署这些容器?我想在这里指导你完成这个过程。我们将专注于在Ubuntu Server 1804上部署基本的NGINX Web服务器作为容器。所有这一切都将在Docker的帮助下完成。

为了成功将NGINX部署为容器,您需要具备以下条件:

- 一个安装了Docker的Ubuntu Server 1804的运行实例。

- 一个docker 用户组的成员用户

是的,有了这两部分,你就准备好了。

您部署的每个容器都将基于从DockerHub中提取的镜像。 您可以下拉单个镜像并根据需要随时使用。 DockerHub上还有许多镜像用于单个应用程序或平台。 以NGINX为例。 如果你在DockerHub上搜索NGINX,你会得到大约56,172个条目。 这并不意味着每个条目都是您可以使用的可用图像。

图像命名如下:

例如,对于NGINX,您可能会找到一个名字为的镜像:

或许你可能找到:

您也看到了,有几乎所有需要的镜像。

在使用图像之前,必须将其保存在本地驱动器上。 有两种方法可以做到这一点:

- 直接使用pull命令

- 间接地,在容器部署过程中。

要从DockerHub中拉取图像,您将打开一个终端窗口并发出命令:

如果你想拉取Ingress图像,该命令是:

当你拉取你需要的图像之后,你可以使用命令确认是否存在:

上面的命令将列出你拉取的所有镜像(图A)。

拉取随意图像时要谨慎。 为什么? 因为你永远不知道创造它们的原因。 容器可能包含恶意代码,可能会对您的网络或数据造成严重破坏。 因此,最好只使用官方图像(例如NGINX图像)。

现在该部署容器了, 如果您尚未拉取镜像,则在部署阶段将下拉所需要的镜像。 由于我们拉取官方NGINX图像,我们将使用它。

要部署容器,请使用docker命令,如下所示:

备注:

- NAME等于您要为容器提供的名称(这可以是任何内容,例如nginx-webserver)。

- PORTS您要使用的端口(以NETWORK PORT:CONTAINER PORT形式)。

- IMAGE用于容器的图像(例如nginx)。

因此,部署NGINX容器的基本命令是:

容器将要部署,NGINX Web服务器将在端口80上可用于本地网络。但是,如果已在服务器上使用端口80来部署容器,该怎么办? 您可以将其部署在网络端口8080上,如下所示:

此时,您可能会看到下一个问题。 运行上述命令之一后,不返回bash提示符(图B)。

你如何运行一个容器,并获得你的bash提示? 为此,您必须以分离模式运行容器。 在此之前,您必须使用键盘组合[Ctrl] +终止当前容器。 该组合将返回提示并杀死容器。

要确定容器是否运行,使用命令:

将列出所有容器及其状态(图C)。

如果容器仍在运行,我们必须在同一端口部署另一个容器之前将其终止(否则端口会发生冲突,从而阻止容器部署)。 要杀死正在运行的容器,首先需要Container ID(随机字符串)。 发出docker ps -a命令时会显示此字符串。 要终止正在运行的容器,使用命令:

其中CONTAINER_ID是相关容器的ID。

然后,您可以使用以下命令删除容器:

其中CONTAINER_ID是相关容器的ID。

请注意,您不必输入完整的Container ID,字符串的前四个字符就足够了。

现在,要以分离模式部署容器,命令是:

这次你不仅会得到你的提示,而且Docker会为你显示容器ID(图D)。

如果你想在正在运行的容器上工作怎么办? 假设您想对NGINX进行更改甚至开始开发它将显示的网站? 因此,您必须访问容器。 因此,您需要Container ID。 使用ID,发出命令:

其中CONTAINER_ID是容器的ID。

您现在应该处于运行容器提示符(图E)中,您可以在其中开始处理NGINX服务器。

要退出容器,只需键入命令exit。

七、比你想象的容易

希望到现在为止,您看到容器部署并不像您想象的那样具有挑战性。 在Docker的帮助下,您可以在几分钟内推出专业版的应用和服务。

原文链接:

Docker显示GUI界面的解决方式有三种

三种介绍:

>

以上就是关于什么是docker容器技术全部的内容,包括:什么是docker容器技术、【docker】docker的容器创建与管理过程、入门、快速搭建Docker分布式项目环境等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10079591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存