Docker和Kubernetes入门

Docker和Kubernetes是IT领域中最热门的两项技术。 本教程将使您开始使用IBM Cloud中的两种技术。 最重要的是,您可以在免费的IBM Cloud Lite帐户中执行所有操作(请参见边栏)。

本教程将向您展示如何:

  1. 获取示例代码并安装所需的工具
  2. 构建Docker映像并在本地计算机上运行
  3. 在IBM Cloud中创建Kubernetes集群
  4. 在IBM Cloud中创建Docker映像
  5. 将Docker映像部署到您的Kubernetes集群

获取示例代码

首先,请克隆包含示例代码的Github存储库。 您将部署的应用程序无非就是一个“ Hello World”页面,以及一个将应用程序构建到Docker映像中的Dockerfile 。 示例代码在github.com/IBM/dWTVSimpleContainerApp上

dWTVSimpleContainerApp存储库的主页

在命令行中,输入git clone https://github.com/IBM/dWTVSimpleContainerApp.git来克隆存储库,然后切换到克隆存储库的目录( cd dWTVSimpleContainerApp ):

克隆github仓库

既然您已经在计算机上安装了示例代码,那么您就可以准备接管容器和集群世界时所需的工具。

在我们继续之前...

根据法律,任何讨论集装箱的文章都必须包括一张装载着……井集装箱的集装箱船的图片。 因此,您在这里:

一艘集装箱船在大海中间,被一只巨型鱿鱼吃掉

我们希望您喜欢这种强制转移。

安装所需的工具

在运行docker docker build或对Docker和Kubernetes进行任何其他操作之前,您需要安装IBM Cloud,Docker和Kubernetes的工具。

安装IBM Cloud工具

转到console.bluemix.net/docs/cli/index.html#downloads并单击“ 下载”链接以获取最新版本的IBM Cloud工具。 下载适合您平台的工具并运行安装程序。

IBM Cloud工具下载页面

注意:由于历史原因,使用IBM Cloud资源的命令是bluemix 。 您可能会担心,为每个命令键入七个完整字符会很累。 朋友们,请不要担心:我们已将命令缩写为bx 。 您会发现此快捷方式将节省您每天的打字时间,使您有更多时间与家人和朋友在一起,将自己重新投入长期被忽视的爱好中,或者花第二份工作来维持生计。

别客气。

安装Docker

下一步是安装Docker及其相关的命令行工具。 转到docker.com并单击获取Docker链接:

从docker.com下载Docker工具

下载并安装Docker Community Edition。 根据您的平台,您可能会收到一条消息,提示您需要重新引导系统才能继续。 等到您安装了Kubernetes工具之后再进行操作。

安装Kubernetes工具

尽管直到本文后面将不使用Kubernetes,但您最好立即安装kubectl工具。 转到kubernetes.io/docs/tasks/tools/install-kubectl/并根据您的平台说明安装kubectl

安装kubectl

在IBM Cloud中创建集群时,您将配置kubectl以与您的集群一起使用...但是首先需要完成一些步骤。 现在,只需安装命令。

登录到IBM Cloud

此时,您应该已经安装了所有IBM Cloud,Docker和Kubernetes工具,并在必要时重新启动了计算机。 下一步是登录到您的IBM Cloud帐户。 在命令行中,输入bx login来登录:

登录到IBM Cloud

登录到IBM Cloud后,您需要为IBM Container Service和IBM Container Registry安装插件。 键入以下命令:

  • bx plugin install container-service -r Bluemix
  • bx plugin install container-registry -r Bluemix
  • bx cr login

前两个命令从Bluemix存储库安装容器服务和容器注册表的Bluemix 。 最后一条命令将您登录到容器注册表服务。 这使您可以在IBM Cloud的公共注册表中访问Docker映像。

在机器上使用Docker映像和容器

启动Docker

现在是时候开始构建东西了。 首先,您需要在计算机上启动Docker。 当然,如何执行取决于您的平台。

视窗

双击桌面图标:

Windows上的Docker桌面图标

当Docker启动并运行时,您将在桌面的右下角看到一条消息:

Windows上的Docker``启动并运行''消息

苹果电脑

点击桌面图标:

Mac上的Docker桌面图标

当Docker启动并运行时,单击菜单栏中的Docker图标将显示以下令人欣慰的状态消息:

Mac上的Docker``启动并运行''状态

的Linux

在Linux上启动Docker可能会因发行版的不同而不同,但是通常您将运行以下两个命令之一:

  • sudo systemctl start docker
  • sudo service docker start

如果您无法在Linux上启动Docker,请参阅Docker文档以获取更多信息。

构建Docker映像

随着Docker的启动和运行,是时候构建包含您的应用程序的映像了。 您之前克隆的存储库包含一个Dockerfile ,该文件告诉Docker如何构建映像。 该文件如下所示:

FROM ibmcom/ibmnode:latest

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app
RUN npm install

EXPOSE 6006

COPY . /usr/src/app

CMD ["node", "app.js"]

这是文件中命令的简要说明:

  • 第1行:这告诉Docker映像将基于最新的IBM node.js映像。 (您可以访问此图像,因为您之前运行过bx cr login命令。)
  • 第3和4行:这将创建目录/usr/src/app并告诉Docker将其用作工作目录。
  • 第6和7行:package.json文件复制到工作目录,然后运行npm install命令安装所有应用程序依赖项。
  • 第9行:告诉Docker打开端口6006接收传入流量。 该应用程序侦听此端口上的连接。
  • 第11行:将当前目录中的所有文件复制到工作目录中。
  • 第13行:告诉Docker在映像启动时运行什么命令。 第一个参数是命令,第二个参数是该命令的参数列表。 当该映像启动时,Docker运行node app.js

转到命令行并运行命令docker build -t basicapp:v1 . (命令的一部分是句点;它告诉Docker在当前目录中执行其工作。)您将看到类似以下内容:

docker build命令的结果

您的结果会有所不同。 在此屏幕截图中,node.js映像已存在于系统上,因此Docker不需要下载很多东西。 第一次在计算机上运行docker build时,映像所需的依赖项都不会在您的计算机上,因此Docker必须下载它们。 随后调用docker build可能会更快。 还要注意,在此示例中, npm install命令尚未完成运行。

在机器上运行Docker映像

毫无疑问,您已经兴奋不已了,构建了第一个Docker映像以及所有这些东西之后,让我们继续前进并实际运行该映像。 在命令行中,键入docker create basicapp:v1以从映像创建容器:

从Docker映像创建Docker容器

嗯,不是很令人兴奋,是吗? 您运行了一个命令,并得到了一个很长的十六进制字符串,虽然可能尚不清楚,但它可能表示某些含义。 幸运的是,Docker社区拥有一些出色的工具,可轻松使用Docker容器。 如果您在Windows或Mac上运行,请使用很棒的Kitematic工具。 从Windows上的系统托盘或Mac上的菜单栏启动它:

在Windows或Mac上启动Kitematic

注意:撰写本文时,Kitematic需要在Windows上单独安装。 查看Docker文档以获取说明。

当Kitematic启动时,您将看到类似于以下内容的显示:

主Kitematic屏幕

dockerhub目录中有各种Docker映像的图块。 如果您想设置Jenkins或PostgreSQL或Minecraft或其他软件,则可以使用这些图像轻松进行设置。 有趣的是,它位于左上角:这是计算机上运行的所有容器的列表。 每个人都有一个随机分配的名称。 在这个屏幕捕捉,该容器名为unruffled_swirles比十六进制字符的长字符串更加难忘你在命令行一分钟前看到-much。

此时,您的计算机上正在运行一个Docker容器。 它内部运行着基本的Hello World应用程序,但是您如何访问该应用程序呢? 为此,您必须为应用程序定义一个端口。 Docker会将传入的对您定义的端口号的请求映射到容器中的端口6006。 (回忆EXPOSE 6006在命令Dockerfile 。)点击右上角的设置菜单,然后单击端口

设置菜单下的端口菜单

您将看到一个显示,可将Docker容器中的端口6006映射到计算机上的端口。 使用端口32008的方法如下:

将Docker端口映射到localhost上的端口

单击保存以保存映射,然后在浏览器中转到http://localhost:32008 。 您会看到Hello World应用程序已启动并正在运行:

在Docker容器中运行的Hello World应用程序

恭喜你! 您已经成功构建了一个Docker映像,将其部署到您的计算机上,并配置了Docker运行时,以便您可以从浏览器访问Docker容器中运行的应用程序。

对于Linux,截至撰写本文时,还没有针对Linux的Kitematic。 要获得类似的功能,请尝试使用Portainer:

Portainer控制台

Portainer打包为Docker映像,因此安装过程仅要求Docker下载并运行该映像。 有关所有详细信息,请参见portainer.io

在IBM Cloud中创建Kubernetes集群

这里的最终目标是将在Docker容器中运行的应用程序部署到Kubernetes集群。 集群启动并运行需要几分钟,因此,请立即创建集群。 稍后将进行Docker部署。 在IBM Cloud控制台中,转到左上角的菜单,然后单击容器

容器菜单项

接下来,单击页面中间的创建集群按钮:

“创建集群”按钮

最后,为您的集群命名(在下面的示例中,该集群名为“ Mailbag”),并确保您已经选中了Lite计划 (又称免费计划),然后单击右侧的Create Cluster按钮。面板的:

集群创建面板

群集可能需要花费几分钟才能启动并启动。 发生这种情况时,请继续构建将要部署到集群的Docker映像。

在IBM Cloud中创建Docker映像

您已经在本地计算机上创建了一个Docker映像,这很棒,但是您需要将该映像放入IBM Cloud,然后才能将其部署到Kubernetes集群。 (继续之前,请确保已使用bx cr login命令登录到IBM Cloud映像存储库。)首先,为映像定义一个名称空间。 例如,要创建mailbag命名空间,请输入以下命令:

bx cr namespace-add mailbag

命名空间使您可以在IBM Cloud帐户中创建Docker映像组。 在拥有命名空间之前,您无法创建或上传Docker映像。 您的结果应如下所示:

为Docker映像定义名称空间

现在,您需要将Docker映像放入IBM Cloud中的容器存储库中。 您可以通过以下两种方式之一进行操作:直接在云中构建映像或将现有映像推送到云中。 以下是每种方法的说明:

在IBM Cloud中构建Docker映像

您可以使用bluemix命令在云中创建映像。 输入bx cr build -t registry.ng.bluemix.net/mailbag/basicapp:v1 . (确保在命令末尾包含句点。)

在IBM Cloud中构建Docker映像的命令

该命令的输出类似于docker build命令:

Bluemix Docker build命令的输出

bx cr build命令自动将新映像推入映像存储库。 您可以输入bx cr images以确保您的图像已创建并且位于IBM Cloud中:

Docker镜像已构建并存储在mailbag命名空间下

将现有的Docker映像推送到IBM Cloud

如果要获取已构建的Docker映像并将其推送到云中,请使用以下两个Docker命令:

  1. docker tag basicapp:v1 registry.ng.bluemix.net/mailbag/basicapp:v2
  2. docker push registry.ng.bluemix.net/mailbag/basicapp:v2

您的结果应如下所示:

标记Docker映像并将其推入IBM Cloud

注意:本示例使用标签v2假设存储库中已有一个v1映像,该映像是由上一节中的命令创建的。 创建两个标签( v1v2 )可为您提供同一图像的两个版本。 和以前一样,输入bx cr images将在您的存储库中列出Docker图像。

配置kubectl命令

您将结合使用bxkubectl命令将映像部署为在集群中运行的容器,并将该容器公开。 在运行这些命令之前,您需要配置kubectl命令以与在IBM Cloud中运行的集群一起使用。 这是您将运行的命令,以及每个命令的说明:

  1. bx cs cluster-config Mailbag
    这使用Bluemix容器服务插件来获取您先前创建的Mailbag集群的配置详细信息。 它返回一个命令,您可以复制并粘贴该命令来设置KUBECONFIG环境变量。
  2. [Set the KUBECONFIG variable]
    该命令在上一个命令的输出中。 它是Linux和Mac上的export语句,Windows命令行中是set命令。 它返回Windows PowerShell中$env:KUBECONFIG定义所需的信息。

在Linux或Mac上,这两个命令如下所示:

定义KUBECONFIG环境变量

(请注意, export命令只是对bx cs cluster-config命令输出的剪切和粘贴。)

一旦KUBECONFIG是一套,任何kubectl命令你自动运行影响您的集群中的IBM Cloud中运行。

将Docker映像部署到您的Kubernetes集群

此时,您要部署的Docker映像位于IBM Cloud中,您的Kubernetes集群已启动并正在运行,并且kubectl命令已配置为可与您的集群一起使用。

好戏开场了!

您距离胜利只有四个命令。 他们来了:

  1. kubectl run apptest --image=registry.ng.bluemix.net/mailbag/basicapp:v1
    这将从集群中的IBM Cloud容器存储库启动Docker映像basicapp:v1 。 它创建一个名为apptest的Kubernetes部署。
  2. kubectl expose deployment/apptest --type=NodePort --name=apptest-service --port=6006
    这个冗长的命令公开apptest部署作为NodePort命名apptest-service端口6006上运行(我们将谈论NodePort小号一些其他的时间,我只想说,这是你的一个空闲簇的唯一选择。)在这点上,部署创建并公开服务:
    创建部署并公开服务
  3. kubectl describe service apptest-service
    这将显示有关您刚刚公开的服务的各种有用信息。 除其他外,它显示了Kubernetes赋予此服务的随机分配的端口号:
    为您的服务随机分配的端口号
  4. bx cs workers Mailbag
    最后,您需要获取Kubernetes集群本身的IP地址。 此命令返回该信息:
    Kubernetes集群的IP地址

请转鼓:现在,您知道集群的IP地址和服务的端口号,可以在浏览器中将两者结合起来,以其全部优点查看Hello World:

在Kubernetes集群中运行的Docker容器中运行的Hello World应用程序

您已经将Docker映像部署到了Web上运行的Kubernetes集群中。 Hello World应用程序在全球范围内; 任何地方的任何人都可以访问它。 沐浴在这里的成就荣耀中,尽量保持谦虚。

摘要

至此,您已经完全准备好接管容器和集群的世界。 您知道如何构建Docker映像,如何将其推送到IBM Cloud以及如何在Kubernetes集群中部署它。 在群集中的Docker容器中运行的应用程序可以在网络上运行,因此世界上任何人都可以看到您的手工作品。 还有很多事情要掌握(例如,在群集内处理凭据),但是您已经有了一个良好的开端。


翻译自: https://www.ibm.com/developerworks/cloud/library/cl-getting-started-docker-and-kubernetes/index.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值