为了账号安全,请及时绑定邮箱和手机立即绑定

关于从Docker在Linux和Windows下的区别简单理解Docker的层次结构?

/ 猿问

关于从Docker在Linux和Windows下的区别简单理解Docker的层次结构?

翻过高山走不出你 2019-11-18 17:13:09

从Docker在Linux和Windows下的区别简单理解Docker的层次结构


查看完整描述

3 回答

?
HUH函数

 一:从运行一个简单的 Python Web 程序说起
  启动Docker客户端并登陆。在客户端中输入以下内容:
  $ sudo docker run -d -P training/webapp python app.py
  第一次输入上面命令时,Docker会先从云端镜像库中下载training/webapp镜像。
  1.运行截图
  下面我们来详细看看这条命令的具体内容,这一部分我们可以在官方文档中找到详细的英文解释,这里笔者将其翻译过来并加了些自己的理解。
  前面我们已经说过,Docker虚拟机系统实际也是基于Linux内核,所以这条语句实际上就是Linux的命令,我们可以输入以下内容查看docker命令的详解:
  $ sudo docker
 
  2.docker命令的子命令列表
  再回到第一条中,我们使用的子命令是run。
  在子命令列表中我们看到run子命令解释是:run Run a command in a new container,也就是在一个新的容器中运行一条命令。
  我们的run命令后面跟的可选项有-d和-P。
  查阅官方文档我们可以知道,-d表示Docker会把当前命令的容器放到后台执行并监控起来。-P则表示让Docker映射任何容器内部需要的端口到虚拟机上。这里需要对Docker一些概念有所了解,我们这里暂且简单地理解为Docker虚拟机下的每个Docker容器都是一台子虚拟机,每个子虚拟机都有一块虚拟网卡,当外部要访问容器时都必须通过Docker虚拟机,而-P就做了相关的端口映射。
  命令执行后返回的一长串字符串(也就是fc4028b21d84f5c075821ca2425d74d45dea87cd28c4eb92620ae39ddec22f46)则是Docker的容器ID,这是一个唯一的值,我们可以以它为标识对容器做相应的操作。
  当我们需要查看和管理当前后台运行的所有容器时,我们可以输入以下命令。
  $ sudo docker ps
  图3.容器详细信息
  这里我们可以看到容器的详细信息,包括容器ID(精简的ID),镜像,命令,创建时间,状态,端口,以及容器名字。
  接下来的training/webapp就是我们运行的容器的源了,Docker中称之为镜像,这个镜像是Docker官方之前就创建好的,里面包含了一个简单Python Flask web应用。
  最后,我们在容器中执行了python app.py,python app.py启动了我们的web应用。
  二:访问页面——从 Linux 和 Windows 的区别到对 Docker 层次的简单理解
  从上面我们查看运行容器的详细信息时我们看到了,在PORTS这一栏中,有这样的信息:
  0.0.0.0:49153->5000/tcp
  上文中提到Docker虚拟机对容器做了端口映射,这里我们可以更直观的看到了,Docker虚拟机中的49153端口映射到了容器的5000端口(这里我们运行的是web程序,所以是tcp协议,其他容器有需要可以指定成udp协议)。
  在官方文档中,这时我们访问localhost:49153,应该就能出现Hello world了,但是笔者在这个步骤根本访问不到这个页面。
  图4.此时访问,浏览器一直处于等待状态
  因此这里我们需要重新看看这个虚拟网络的结构,要看整个网络的结构,我们应该先了解Docker的层次结构。在Linux中,Docker的逻辑结构是这样的:
  硬件 < Linux系统(Docker Kernel) < Docker容器
  而我们在前文中提过,在Windows中要运行Docker,实际上是在虚拟机下运行的,所以在Windows中Docker的逻辑结构应该是:
  硬件 < Windows系统 < Docker虚拟机(Docker Kernel) < Docker容器。
  因此官方文档中用例应该是基于Linux下的,Linux此时访问localhost:49153是没有问题的,因为Docker Kernel此时把49153端口映射给了容器的5000端口,而Windows则不行,因为我们只是把Docker虚拟机的49153端口映射给了容器,我们在浏览器中输入localhost:49153明显是访问的Windows层级别。
  理解到这里问题就已经解决了,我们只需进入VirtualBox中,将Docker虚拟机的网络做个桥接,或者端口映射就行了。
  进入VirtualBox主界面,选中Docker虚拟机(boot2docker-vm),单击设置按钮,在设置中选择网络,这里我们发现Docker虚拟机默认选择了“网络地址转换(NAT)”。
  图5.Docker虚拟机的网络连接方式默认是NAT
  而且端口转发中还默认有两个端口映射。
  图6.Docker虚拟机和宿主机默认的端口映射
  不难猜测这里可能是Docker客户端和Docker虚拟机进行通信的端口,因此我们不能将Docker虚拟机的网络连接方式改成桥接了,否则Docker客户端无法和Docker虚拟机进行通信。
  因此我们这里选择添加一个端口映射,将Windows系统80端口映射到Docker虚拟机的的49153端口上去。端口映射的名称随便取,协议一定要是TCP(HTTP基于TCP)
  图7.添加映射端口
  此时我们可以在Windows下的浏览器直接访问localhost了(一般来说浏览器默认访问80端口80端口可以省略),因为我们直接映射了80端口到Docker虚拟机的49153端口上,而Docker虚拟机的49153端口又映射到了我们刚刚创建的Docker容器的5000端口上,我们的web程序正是运行在该容器的5000端口上。
  
  8.Hello world!
  总结:
  本文实际上只运行了一个简单的web程序,用例也是基于官方文档,而且如果读者是在Linux运行的话输入完第一条命令应该直接在浏览器中访问了。因此本文主要是对Docker的run命令做了简单的解释,并且通过Docker在Linux和Windows下的区别来简单理解Docker逻辑层次结构。


查看完整回答
反对 回复 2019-11-24
?
梵蒂冈之花

下面是安装 Docker 客户端并在上面运行容器的简单步骤。1. 下载 Boot2Docker

在我们开始安装之前,我们需要 Boot2Docker 的可执行文件。可以从 它的 Github 下载最新版本的 Boot2Docker。在这篇指南中,我们从网站中下载版本 v1.6.1。我们从那网页中用我们喜欢的浏览器或者下载管理器下载了名为 docker-install.exe 的文件。

2. 安装 Boot2Docker

现在我们运行安装文件,它会安装 Window Docker 客户端、用于 Windows 的 Git(MSYS-git)、VirtualBox、Boot2Docker Linux ISO 以及 Boot2Docker 管理工具,这些对于开箱即用地运行全功能的 Docker 引擎都至关重要。

3. 运行 Boot2Docker

安装完成必要的组件之后,我们从桌面上的“Boot2Docker Start”快捷方式启动 Boot2Docker。它会要求你输入以后用于验证的 SSH 密钥。然后会启动一个配置好的用于管理在虚拟机中运行的 Docker 的 unix shell。

为了检查是否正确配置,运行下面的 docker version 命令。

docker version

查看完整回答
反对 回复 2019-11-24
?
至尊宝的传说

在开发环境使用docker已经有一段时间,虽然也遇到一些问题,但是总体来说对非常值得使用,大大简化了开发环境的建立和复制, 最近发现Docker发布了针对windows10和Mac的官方封装版本普大喜奔,终于不用boot2docker了,你要知道boot2docker是基于virtualbox的,virtualbox自己在我机器上崩溃了好多回,每次都得像大爷一样伺候着,祈祷它老人家长命百岁.............
这次发布的官方版Docker for windows 10 是基于稳定的Hyper V 运行的一个linux vm 再来运行docker的,对外也提供了docker 命令的封装,用到了一个多月下来感觉是很稳定的,这里介绍两个在Docker for windows10上必须知道的操作。
如何设置国内Repository mirror
右键windows右下角的docker图标-> 选择setting -> docker daemon
添加如下配置:
http://xxxx.m.daocloud.io 是我从Daocloud.com 申请的docker加速器地址,需要换成你自己,请自行百度。
{
"registry-mirrors": [
"http://xxxx.m.daocloud.io"
],
"insecure-registries": [],
"debug": false
}

如何使用docker run -v mount宿主机的目录
这是一个让我当时很困惑的问题,我安装好docker想也没想就新建一个mysql container,启动后但是却发现挂载的mysql目录却没有一个文件, 我以为是docker for windows8 beta的bug,结果去官方论坛一查,原来需要进行如下设置(原因是windows 10的权限要求高,不能容许软件自行共享文件夹)
选择你要挂载目录所在的盘符进行共享,就想使用Virtualbox里面的共享目录一样,登录给Hyper V里面的linux共享目录了,然后在运行 docker run -v f:/user:/data alpine ls /data

解决了这两个问题就能愉快地使用docker for windows10 ,你要问我为什么没有 windows7 甚至windowsxp 呵呵, 只有windows 10 内置了Hyper V 虚拟环境啊, 而且这是趋势你就别守着过时的系统了


查看完整回答
反对 回复 2019-11-24

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信