• 技术文章 >运维 >Docker

    docker生态圈有哪些

    青灯夜游青灯夜游2022-05-11 14:49:59原创121

    生态圈有:1、Docker Hub,是预先写好的Dockerfile官方资源,提供公共的和私人的镜像存储库;2、Docker Engine,是用来运行和管理容器的核心软件;3、Kitematic,是一个可视化管理工具;4、Machine等。

    本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。

    Docker是一个用来创建“容器”的工具,这些容器仅仅包含你所需要的一个独立的应用或者技术堆栈。与虚拟机不同的是,这些容器共享相同的资源来管理容器与主机之间的相互作用。这一点使得Docker容器快速、轻量、安全并且共享。

    当前可用的Docker生态系统存在部分,包括:Docker Hub、Docker Engine、Kitematic、Docker Machine、Swarm、Docker Compose、Dokcer Cloud以及Data Center,下面会详细介绍这些工具的功能,以及怎样能够更好地将这些工具结合起来。

    Docker Hub

    任何使用Docker的项目的核心是一个 Dockerfile 文件。这个文件包含Docker如何创建一个镜像的指示说明。让我们来看一个简单的例子:

    FROM python:2.7
    ADD . /code
    WORKDIR /code
    RUN pip install -r requirements.txt

    在这个例子中,该Dockerfile文件拉取一个特定版本的现有镜像,将当前本地目录复制进容器的文件系统,并设置它为工作目录,然后通过pip命令从一个文本文件下载Python依赖。

    Docker Hub 是预先写好的Dockerfile官方资源,提供公共的(免费的)和私人的(付费的)镜像存储库。如果你正在寻找一个Dockerfile来满足你的需求,首先在Docker Hub上搜索,使用项目文档、下载量和镜像等级来帮助指导你的决定。

    1.png

    Docker Engine(引擎)

    Docker Engine(引擎)是用来运行和管理容器的核心软件。通常人们会简单地将其代指为 Docker 或 Docker 平台。Docker 引擎由许多专用的工具协同工作,从而可以创建和运行容器,例如 API、执行驱动、运行时、shim 进程等。

    Docker Engine创建Dockerfile文件并把它们转化为可用的容器。Docker Engine是Docker的核心,如果没有Docker Engine那么什么也运行不了。依据你的操作系统不同有几种下载Docker Engine的方案,你可以 在这里发现更多的细节 。

    依据Docker Hub中的一个镜像开启一个容器,应该首先拉取这个镜像并运行它。继续以Python为例:

    docker pull python
    docker run -it --rm --name script-name -v "$PWD":/usr/src/appname -w /usr/src/appname python:3 python app.py

    这样就会拉取最新的Python镜像然后开启一个容器运行一个Python脚本并且运行完后退出容器。run命令提供了更多的选项设置,你可以 在这里阅读完整的指南 。

    当一个Docker run命令开始变得更为复杂,它可以创建自己的自定义Dockerfile文件或许是一个更好的主意。开启一个基于本地Dockerfile文件的容器,运行以下里面包含文件的目录:

    docker build -t my_image .

    这个命令将会创建一个名为my_image的镜像。运行以下命令开启一个基于这个镜像的容器:

    docker run -name my_image_container -i -t my_image

    这个命令会开启一个基于自定义的my_image镜像的容器,这个容器命名为my_image_container。

    Kitematic(Docker可视化管理工具)

    对于那些宁愿避免命令行的用户来说, Kitematic 是一个 Docker GUI 工具,它可以更快速、更简单的运行Docker容器,现在已经支持 Mac /Windows/Linux。

    搜索你需要的镜像,创建一个容器,你最好去Kitematic。Kitematic提供了基本的配置选项,但对于更高级的设置,你可能需要进入命令行。

    2.png

    你的容器出现在左手边,在那里它们可以被启动、停止、重启,更有用的是,你可以在那里找到容器日志和直接SSH(exec按键)访问。

    3.png

    Docker Machine和Swarm

    生产中使用Docker的第一步是了解 Machine 和Swarm,它们为各种虚拟化和云服务提供商提供了一套简单的工具集用以移动和缩放他们的本地项目。

    “生产中使用Docker的第一步是了解Machine和Swarm。”

    例如,在Azure上创建一个Docker实例:

    docker-machine create -d azure --azure-subscription-id="XXX" --azure-subscription-cert="/mycert.pem" ecodemo

    这个命令使用预装的Docker创建一个Ubuntu 12.04-based虚拟机并命名为ecodemo。每个供应商都需要不同的参数和认证方法,这些默认设置可以被重写。在 这个文档 中可以阅读到更多的细节。

    当与 Swarm 结合后,Machine可以创建Docker实例的集群,这个集群被视为一个单一的、大的Docker实例。每一个Swarm集群都需要一个master实例,这个master实例可以用下面的命令来创建:

    docker-machine create
    -d virtualbox
    --swarm
    --swarm-master
    --swarm-discovery token://TOKEN_ID
    swarm-master

    这样就会在VirtualBox中创建一个Docker实例并且设置这个Docker实例为Swarm集群的一个master节点。TOKEN_ID非常重要,因为它可以帮助集群中的所有节点识别彼此。除了手动创建TOKEN_ID标识以外,Swarm也有 发现系统 来帮助你管理这个过程。

    下面的命令使用相同的TOKEN_ID标识添加Docker实例到Swarm集群:

    docker-machine create
    -d virtualbox
    --swarm
    --swarm-discovery token://TOKEN_ID
    swarm-node-n

    swarm-node-n对于集群中的每一个节点来说都是一个唯一的名字。

    现在,代替从单个虚拟机中开启容器,你可以在集群中开启容器,master节点将会把这个容器分配给最可用的和最有能力的节点。

    Docker Compose

    Compose 使得由多个组件(像容器)组成的应用程序更加简单,你可以开始使用一个命令在一个单一的配置文件中声明所有这些组件。

    下面是一个Compose文件(称为docker-compose.yml)的例子,这个例子创建三个 Crate 数据库实例和一个 Laravel (用一些额外的配置)PHP框架实例。最重要的是,容器与Links配置选项相连。

    crate1:
    image: crate
    ports:
    - "4200:4200"
    - "4300:4300"
    crate2:
    image: crate
    crate3:
    image: crate
    volumes:
    - ./data:/importdata
    laravelcomposer:
    image: dylanlindgren/docker-laravel-composer
    volumes:
    - /laravel-application:/var/www
    command: --working-dir=/var/www install
    links:
    - crate1
    laravelartisan:
    image: dylanlindgren/docker-laravel-artisan
    links:
    - crate1
    volumes_from:
    - laravelcomposer
    working_dir: /var/www
    command: serve --host=0.0.0.0:8080
    ports:
    - "8000:8000"
    - "8080:8080"

    所有这些实例和它们的配置现在可以通过运行以下在同一目录中的docker-compose.yml文件的命令来开始:

    docker-compose up

    4.png

    你可以使用相同的子命令作为Docker的命令来影响所有以docker-compose开始的容器。例如,docker-compose stop命令可以停止以docker-compose开始的容器。

    5.png

    Docker Cloud

    容器的自动化管理和编排是Docker的主要功能,但却一直由第三方服务来提供,直到去年Docker获得了 Tutum(它支撑着Docker云) 。虽然没有完整的命令行工具(还没有),Docker云服务允许Docker Compose文件设置应用程序栈,所以它不是来自于生态型的其它部分的一个大的导流。

    “容器的自动化管理是Docker的重要组成,但知道最近一直由第三方来提供。”

    例如:

    crate1:
    image: crate
    ports:
    - "4200:4200"
    - "4300:4300"
    command: crate -Des.network.publish_host=_ethwe:ipv4_
    crate2:
    image: crate
    command: crate -Des.network.publish_host=_ethwe:ipv4_
    crate3:
    image: crate
    command: crate -Des.network.publish_host=_ethwe:ipv4_

    这样就创建了同一个镜像的三个实例,其中一个手动设置主机与Docker之间的端口分配,其他的端口分配是自动的。我将很快重新访问command。

    如果你想在超过一个节点(节点能够运行它可以管理的足够多的容器和一个私有仓库上扩展应用程序,Docker Cloud是有偿服务。这对于实验目的来说足够了。记住,Docker Cloud默认管理托管在第三方托管服务器上的容器,所以你也需要支付费用。使得Docker Cloud代理运行在任何你管理的Linux主机上是可能的,你可以 在这里找到操作指南

    6.png

    上面的截图显示了三个使用预先设定的规则运行在跨越两个数字海洋的实例上的Docker容器,这个预先设定的规则是根据你设置的参数来将容器分配给主机。它会自动确保你指定数量的容器始终在运行。

    在之前的Docker Compose例子中,你可能已经注意到_ethwe:ipv4_。这是Docker Cloud的另外一个重要特征。许多分布式应用和服务依赖“ 服务发现 ”来找到同一服务的其他实例并进行通信。当在数据中心和物理机器上传播服务时,这往往需要实例的手动说明或者需要另一种方式来找到彼此。

    Docker Cloud包括支持 Weave 在你的实际网络中创建一个“软”网络;所有的容器和应用都可以发现彼此,无论它们被托管在哪里。在上面的例子中,我们重写了向容器发出的默认命令,以确保它接收它需要使用此功能的信息。

    Data Center

    到目前为止,本文涉及的大部分工具都是你安装,主机,和支持的工具。对企业用户来说,他们寻找安全性、性能和支持较高的保证,Docker提供了 数据中心 。

    它使用了覆盖这里的许多相同的工具包,但是增加了一个放置你的镜像的私有仓库,一个私有云,高级支持,和供应商可能吸引企业用户的第三方集成。这些包括LDAP and Active Directory用户管理,容器检测,和日志记录。

    推荐学习:《docker视频教程

    以上就是docker生态圈有哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Docker
    上一篇:docker核心技术是哪两个 下一篇:docker局限性有哪些
    千万级数据并发解决方案

    相关文章推荐

    • docker的日志存储在什么地方• docker和nas是什么• 什么是docker集群与镜像• docker容器化是什么意思• 怎么查看使用的docker是哪个版本
    1/1

    PHP中文网