Docker和Kubernetes是IT领域中最热门的两项技术。 本教程将使您开始使用IBM Cloud中的两种技术。 最重要的是,您可以在免费的IBM Cloud Lite帐户中执行所有操作(请参见边栏)。
本教程将向您展示如何:
- 获取示例代码并安装所需的工具
- 构建Docker映像并在本地计算机上运行
- 在IBM Cloud中创建Kubernetes集群
- 在IBM Cloud中创建Docker映像
- 将Docker映像部署到您的Kubernetes集群
获取示例代码
首先,请克隆包含示例代码的Github存储库。 您将部署的应用程序无非就是一个“ Hello World”页面,以及一个将应用程序构建到Docker映像中的Dockerfile
。 示例代码在github.com/IBM/dWTVSimpleContainerApp上 。
在命令行中,输入git clone https://github.com/IBM/dWTVSimpleContainerApp.git
来克隆存储库,然后切换到克隆存储库的目录( cd dWTVSimpleContainerApp
):
既然您已经在计算机上安装了示例代码,那么您就可以准备接管容器和集群世界时所需的工具。
在我们继续之前...
根据法律,任何讨论集装箱的文章都必须包括一张装载着……井集装箱的集装箱船的图片。 因此,您在这里:
我们希望您喜欢这种强制转移。
安装所需的工具
在运行docker docker build
或对Docker和Kubernetes进行任何其他操作之前,您需要安装IBM Cloud,Docker和Kubernetes的工具。
安装IBM Cloud工具
转到console.bluemix.net/docs/cli/index.html#downloads并单击“ 下载”链接以获取最新版本的IBM Cloud工具。 下载适合您平台的工具并运行安装程序。
注意:由于历史原因,使用IBM Cloud资源的命令是bluemix
。 您可能会担心,为每个命令键入七个完整字符会很累。 朋友们,请不要担心:我们已将命令缩写为bx
。 您会发现此快捷方式将节省您每天的打字时间,使您有更多时间与家人和朋友在一起,将自己重新投入长期被忽视的爱好中,或者花第二份工作来维持生计。
别客气。
安装Docker
下一步是安装Docker及其相关的命令行工具。 转到docker.com并单击获取Docker链接:
下载并安装Docker Community Edition。 根据您的平台,您可能会收到一条消息,提示您需要重新引导系统才能继续。 等到您安装了Kubernetes工具之后再进行操作。
安装Kubernetes工具
尽管直到本文后面将不使用Kubernetes,但您最好立即安装kubectl
工具。 转到kubernetes.io/docs/tasks/tools/install-kubectl/并根据您的平台说明安装kubectl
。
在IBM Cloud中创建集群时,您将配置kubectl
以与您的集群一起使用...但是首先需要完成一些步骤。 现在,只需安装命令。
登录到IBM Cloud
此时,您应该已经安装了所有IBM Cloud,Docker和Kubernetes工具,并在必要时重新启动了计算机。 下一步是登录到您的IBM Cloud帐户。 在命令行中,输入bx login
来登录:
登录到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。 当然,如何执行取决于您的平台。
视窗
双击桌面图标:
当Docker启动并运行时,您将在桌面的右下角看到一条消息:
苹果电脑
点击桌面图标:
当Docker启动并运行时,单击菜单栏中的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在当前目录中执行其工作。)您将看到类似以下内容:
您的结果会有所不同。 在此屏幕截图中,node.js映像已存在于系统上,因此Docker不需要下载很多东西。 第一次在计算机上运行docker build
时,映像所需的依赖项都不会在您的计算机上,因此Docker必须下载它们。 随后调用docker build
可能会更快。 还要注意,在此示例中, npm install
命令尚未完成运行。
在机器上运行Docker映像
毫无疑问,您已经兴奋不已了,构建了第一个Docker映像以及所有这些东西之后,让我们继续前进并实际运行该映像。 在命令行中,键入docker create basicapp:v1
以从映像创建容器:
嗯,不是很令人兴奋,是吗? 您运行了一个命令,并得到了一个很长的十六进制字符串,虽然可能尚不清楚,但它可能表示某些含义。 幸运的是,Docker社区拥有一些出色的工具,可轻松使用Docker容器。 如果您在Windows或Mac上运行,请使用很棒的Kitematic工具。 从Windows上的系统托盘或Mac上的菜单栏启动它:
注意:撰写本文时,Kitematic需要在Windows上单独安装。 查看Docker文档以获取说明。
当Kitematic启动时,您将看到类似于以下内容的显示:
dockerhub目录中有各种Docker映像的图块。 如果您想设置Jenkins或PostgreSQL或Minecraft或其他软件,则可以使用这些图像轻松进行设置。 有趣的是,它位于左上角:这是计算机上运行的所有容器的列表。 每个人都有一个随机分配的名称。 在这个屏幕捕捉,该容器名为unruffled_swirles
比十六进制字符的长字符串更加难忘你在命令行一分钟前看到-much。
此时,您的计算机上正在运行一个Docker容器。 它内部运行着基本的Hello World应用程序,但是您如何访问该应用程序呢? 为此,您必须为应用程序定义一个端口。 Docker会将传入的对您定义的端口号的请求映射到容器中的端口6006。 (回忆EXPOSE 6006
在命令Dockerfile
。)点击右上角的设置菜单,然后单击端口 :
您将看到一个显示,可将Docker容器中的端口6006映射到计算机上的端口。 使用端口32008的方法如下:
单击保存以保存映射,然后在浏览器中转到http://localhost:32008
。 您会看到Hello World应用程序已启动并正在运行:
恭喜你! 您已经成功构建了一个Docker映像,将其部署到您的计算机上,并配置了Docker运行时,以便您可以从浏览器访问Docker容器中运行的应用程序。
对于Linux,截至撰写本文时,还没有针对Linux的Kitematic。 要获得类似的功能,请尝试使用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映像放入IBM Cloud中的容器存储库中。 您可以通过以下两种方式之一进行操作:直接在云中构建映像或将现有映像推送到云中。 以下是每种方法的说明:
在IBM Cloud中构建Docker映像
您可以使用bluemix
命令在云中创建映像。 输入bx cr build -t registry.ng.bluemix.net/mailbag/basicapp:v1 .
(确保在命令末尾包含句点。)
该命令的输出类似于docker build
命令:
bx cr build
命令自动将新映像推入映像存储库。 您可以输入bx cr images
以确保您的图像已创建并且位于IBM Cloud中:
将现有的Docker映像推送到IBM Cloud
如果要获取已构建的Docker映像并将其推送到云中,请使用以下两个Docker命令:
-
docker tag basicapp:v1 registry.ng.bluemix.net/mailbag/basicapp:v2
-
docker push registry.ng.bluemix.net/mailbag/basicapp:v2
您的结果应如下所示:
注意:本示例使用标签v2
假设存储库中已有一个v1
映像,该映像是由上一节中的命令创建的。 创建两个标签( v1
和v2
)可为您提供同一图像的两个版本。 和以前一样,输入bx cr images
将在您的存储库中列出Docker图像。
配置kubectl
命令
您将结合使用bx
和kubectl
命令将映像部署为在集群中运行的容器,并将该容器公开。 在运行这些命令之前,您需要配置kubectl
命令以与在IBM Cloud中运行的集群一起使用。 这是您将运行的命令,以及每个命令的说明:
-
bx cs cluster-config Mailbag
这使用Bluemix容器服务插件来获取您先前创建的Mailbag集群的配置详细信息。 它返回一个命令,您可以复制并粘贴该命令来设置KUBECONFIG
环境变量。 -
[Set the KUBECONFIG variable]
该命令在上一个命令的输出中。 它是Linux和Mac上的export
语句,Windows命令行中是set
命令。 它返回Windows PowerShell中$env:KUBECONFIG
定义所需的信息。
在Linux或Mac上,这两个命令如下所示:
(请注意, export
命令只是对bx cs cluster-config
命令输出的剪切和粘贴。)
一旦KUBECONFIG
是一套,任何kubectl
命令你自动运行影响您的集群中的IBM Cloud中运行。
将Docker映像部署到您的Kubernetes集群
此时,您要部署的Docker映像位于IBM Cloud中,您的Kubernetes集群已启动并正在运行,并且kubectl
命令已配置为可与您的集群一起使用。
好戏开场了!
您距离胜利只有四个命令。 他们来了:
-
kubectl run apptest --image=registry.ng.bluemix.net/mailbag/basicapp:v1
这将从集群中的IBM Cloud容器存储库启动Docker映像basicapp:v1
。 它创建一个名为apptest
的Kubernetes部署。 -
kubectl expose deployment/apptest --type=NodePort --name=apptest-service --port=6006
这个冗长的命令公开apptest
部署作为NodePort
命名apptest-service
端口6006上运行(我们将谈论NodePort
小号一些其他的时间,我只想说,这是你的一个空闲簇的唯一选择。)在这点上,部署创建并公开服务: -
kubectl describe service apptest-service
这将显示有关您刚刚公开的服务的各种有用信息。 除其他外,它显示了Kubernetes赋予此服务的随机分配的端口号: -
bx cs workers Mailbag
最后,您需要获取Kubernetes集群本身的IP地址。 此命令返回该信息:
请转鼓:现在,您知道集群的IP地址和服务的端口号,可以在浏览器中将两者结合起来,以其全部优点查看Hello World:
![在Kubernetes集群中运行的Docker容器中运行的Hello World应用程序](https://i-blog.csdnimg.cn/blog_migrate/de5dd2eee00be738634f78ad605b10b0.png)
您已经将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