Docker知识3:Docker的体系简介

摘要:

本文是关于docker的专题讨论,作者用一组文档尽可能保证完整地阐述Docker到底是啥?如何使用?docker的使用范围等。相关的其它文章是:

Docker知识1:Docker-hub简介

Docker知识2:安装docker-desktop

Docker知识3:Docker的体系简介

Docker知识4:如何在win10下安装 / 使用ubuntu ?应用WSL2

docker知识5:在WSL2的ubuntu20.04环境安装使用docker_gongdiwudu的专栏-CSDN博客

1 Docker的C-S构成

         学习docker,就要知道它的组织架构。这几个关联的概念需要切记:

             1   属于官方管理的码头HUB

                  码头(docker hub):

                  码头是个大杂烩,任何人可以注册,生成镜像放上去,别人可以下载镜像,使用镜像

                 仓库(Repositories)

                  仓库是个私人建的,可以存放镜像的场所。

                  镜像(images):

                  就是任何人可以上载或下载的成品。

             2   属于本地需要镜像管理、容器管理

                  客户端(docker engine,注意:windows的docker-desktop内涵docker engine)

                  有两个功能:1)与hub通信,数据交换。 2)管理本地的image和container

                  镜像(images)

                  本地生成的镜像数据包,从hub下载的镜像数据包。

                  容器(container)

                   通过镜像生成的实例对象。

        DockerHub是一个大型互联网服务器,好比一个码头,个人可以注册后,在码头可以Create一个仓库,以便日后上载自己的镜像并存储。同时,该处有学习的资料、可以下载的软件,免费的公共镜像,都可以在码头上找到。入口(Docker Hub)。

       docker-desktop就是win10版本的客户端,它既是你与Docker-Hub交互的基础平台,也是你本地加工自已的镜像的一个工厂。需要按照你在Docker-Hub的注册远程登入Docker-Hub。(注意:登入官方Docker-Hub有两个途径。浏览器登入,或客户端登入docker-desktop。)

      ubuntu的客户端是无图形界面的,通过启动docker-engine进程后,远程登录Docker-HUB然后上传或下载。

下图描述了Docker的C-S结构。      

 docker是由Docker-HUB,Docker-Desktop构成的Client-Server网络结构。其分工是:

 服务器端:

  • Docker-HUB是服务器,内部存放大量映像供客户下载
  • 自己注册后,也可以将自己的镜像上载到HUB上,供别人下载使用。

客户端:

  • 可以登录服务器,
  • 可以将本地镜像上载到HUB
  • 可以从服务器下载镜像
  • 可以制作本地镜像和容器。

 2 客户端desktop的特征

( 以下客户端主要指的是win10下的版本,至于Ubuntu或其他linux则有Docker-engin对应指令完成)

  • VPN直通

当连接到VPN时,Docker桌面网络可以工作。为此,Docker Desktop拦截来自容器的流量,并将其注入Windows,就好像它源于Docker应用程序一样。

  • 端口映射

运行带有-p参数的容器时,例如:

$docker run -p 80:80-d nginx

Docker Desktop使容器(在本例中为nginx)中的端口80上运行的任何东西在localhost的端口80上可用。在本例中,主机端口和容器端口是相同的。如果需要指定不同的主机端口怎么办?例如,如果您的主机的端口80上已经运行了某些内容,则可以将容器连接到其他端口:

$docker run -p 8000:80-d nginx

现在,到localhost:8000的连接被发送到容器中的端口80。-p的语法是    HOST_ PORT : CLIENT_PORT。

  • 代理

Docker Desktop允许您配置HTTP/HTTPS代理设置,并自动将这些设置传播到Docker。例如,如果将代理设置设置设置为http://proxy.example.com,Docker在拉动容器时使用此代理。

但是,代理设置不会传播到您开始的容器中。如果您希望为容器设置代理设置,则需要为它们定义环境变量,就像在Linux上所做的那样,例如:

> docker run -e HTTP_PROXY=https://proxy.example.com:3128 alpine env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=b7edf988b2b5
TERM=xterm
HOME=/root
HTTP_PROXY=http://proxy.example.com:3128

 详细环境配置见 Set environment variables.

3 个人用法体验

本人安装了两个体系,win10的Docker-Desktop和win10的WSL2体系;

Docker-Desktop体系本质上也是linux内核,但用cmd做终端,效果始终赶不上ubuntu系统。对初学者也帮助不大。

而WSL2装Ubuntu-20就不一样了,除了没有Ubuntu图形界面,其他的基本和独立的Ubuntu系统没有两样。

所以建议用Win10的同学,安装一个docker-desktop学习一下就弃用吧,改用WSL2为好,干正事还是它好用。有关WSL2的技术的资料有参照博文1 和 参考博文2

4 相关网络特性

4.1已知的限制、用例和解决方法🔗

以下是Docker Desktop for Windows网络堆栈当前限制的摘要,以及一些解决方法的想法。

  • Windows上没有docker0桥🔗

由于在Docker Desktop for Windows中实现网络的方式,您无法在主机上看到docker0接口。这个接口实际上在虚拟机中。

  • 我不能ping我的容器 

Docker Desktop for Windows无法将流量路由到基于Linux的容器。但是,您可以ping 基于的Windows容器。

  • 无法给每个容器提供一个IP地址

无法从Windows主机访问docker(基于Linux)网桥网络。但是,可以访问基于Windows的容器。

4.2 从容器连接到主机上的服务

主机的IP地址正在更改(如果您没有网络访问权限,则没有IP地址)。我们建议您连接到特殊的DNS名称host.docker.internal,该名称解析为主机使用的内部IP地址。这是出于开发目的,在Docker Desktop for Windows之外的生产环境中不起作用。

也可以使用gateway.docker.internal访问网关。

如果您的计算机上安装了Python,请使用以下说明作为示例,从容器连接到主机上的服务:

  • 1 运行以下命令在端口8000上启动一个简单的HTTP服务器。

python-m http.server 8000    或   

python -m SimpleHTTPServer 8000

  • 2 现在,运行一个容器,安装curl,并尝试使用以下命令连接到主机:
 docker run --rm -it alpine sh
 apk add curl
 curl http://host.docker.internal:8000
 exit

4.3 试图从Windows连接到容器 

本地主机的端口转发localhost--publish-p, or -P 所有都能工作。从Linux公开的端口被转发到主机。

我们目前的建议是发布一个端口,或者从另一个容器连接。即使在Linux上,如果容器位于覆盖网络上,而不是桥网络上,这也是您需要做的,因为这些都不是路由的。

运行nginxwebserver的命令如Getting Started中所示就是一个例子。

$ docker run -d -p 80:80 --name webserver nginx

 为了澄清语法,以下两个命令都将容器的端口80发布到主机的端口8000:

$ docker run --publish 8000:80 --name webserver nginx

$ docker run -p 8000:80 --name webserver nginx

要发布所有端口,请使用-P标志。例如,以下命令启动容器(在分离模式下),并且-P标志将容器的所有公开端口发布到主机上的随机端口。

$ docker run -d -P --name webserver nginx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值