21 设置Node.js
Node.js是一个用于开发服务器端应用程序的JavaScript框架。它是一个开放源代码框架,可以在各种操作系统上运行。由于Node.js是一种流行的开发框架,因此Docker也确保它支持Node.js应用程序。
现在我们将看到为Node.js启动并运行Docker容器的各个步骤。
第1步 - 第一步是从Docker Hub中提取图像。当您登录到Docker Hub时,您将能够搜索并查看Node.js的图像,如下所示。只需在搜索框中输入节点,然后点击搜索结果中出现的节点(官方)链接。

第2步 - 您将看到Docker 在Docker Hub中存储库的详细信息中为节点提取命令。

第3步 - 在Docker主机上,使用Docker pull命令(如上所示)从Docker Hub下载最新的节点映像。

一旦拉完成,我们就可以继续下一步。

第4步 - 在Docker主机上,让我们使用vim编辑器并创建一个Node.js示例文件。在这个文件中,我们将添加一个简单的命令来显示“HelloWorld”到命令提示符。

在Node.js文件中,我们添加以下语句 -
Console.log(‘Hello World’);
这将在我们通过Node.js运行时输出“Hello World”短语。

确保保存文件,然后继续下一步。
第5步 - 要使用Node Docker容器运行我们的Node.js脚本,我们需要执行以下语句 -
sudo docker run –it –rm –name = HelloWorld –v “$PWD”:/usr/src/app –w /usr/src/app node node HelloWorld.js
关于上述命令需要注意以下几点 -
该-rm选项用于它运行后删除的容器。
我们给名为“HelloWorld”的容器命名。
我们提到将容器中的卷映射到/ usr / src / app映射到我们当前的工作目录。这样做是为了让节点容器能够接收我们的DockWord主机上工作目录下的HelloWorld.js脚本。
该-w选项用于指定由Node.js的使用的工作目录
第一个节点选项用于指定运行节点图像。
第二个节点选项用于提及在节点容器中运行节点命令。
最后我们提到我们脚本的名字。
我们会得到以下输出。从输出中,我们可以清楚地看到Node容器作为容器运行并执行HelloWorld.js脚本。

22 设置MongoDB
MongoDB是一个着名的面向文档的数据库,被许多现代Web应用程序使用。由于MongoDB是一个很受欢迎的开发数据库,因此Docker也确保它支持MongoDB。
现在我们将看到为MongoDB启动并运行Docker容器的各个步骤。
第1步 - 第一步是从Docker Hub中提取图像。登录Docker Hub时,您将能够搜索并查看Mongo的图像,如下所示。只需在搜索框中输入Mongo,然后点击搜索结果中出现的Mongo(官方)链接。

第2步 - 您将看到Docker pull命令为Mongo提供了Docker Hub中存储库的详细信息。

步骤3 - 在Docker主机上,使用Docker pull命令(如上所示)从Docker Hub下载最新的Mongo镜像。


第4步 - 现在我们已经有了Mongo的映像,首先运行一个MongoDB容器,它将成为MongoDB的实例。为此,我们将发出以下命令 -
sudo docker run -it -d mongo
关于上述命令可以注意到以下几点 -
该-IT选项用于在交互模式的容器。
该-d选项用来运行容器作为一个守护进程。
最后我们从Mongo镜像创建一个容器。
然后您可以发出docker ps命令来查看正在运行的容器 -

记下以下几点 -
容器的名称是tender_poitras。这个名字会有所不同,因为当你旋转一个容器时容器的名字会不断变化。但只要记下你启动的容器。
接下来,请注意它正在运行的端口号。它正在侦听27017的TCP端口。
第5步 - 现在让我们创建另一个容器,它将充当我们的客户端,它将用于连接到MongoDB数据库。让我们为此发出以下命令 -
sudo docker run –it –link=tender_poitras:mongo mongo /bin/bash
关于上述命令可以注意到以下几点 -
该-IT选项用于在交互模式的容器。
我们现在将我们的新容器连接到已经启动的MongoDB服务器容器。在这里,您需要提及已经启动的容器的名称。
然后我们指定我们要启动Mongo容器作为我们的客户端,然后在我们的新容器中运行bin / bash shell。

你现在将在新的容器中。
第6步 - 在新容器中运行env命令以查看如何连接到MongoDB服务器容器的详细信息。

第6步 - 现在是时候从客户端容器连接到MongoDB服务器了。我们可以通过以下命令执行此操作 -
mongo 172.17.0.2:27017
关于上述命令需要注意以下几点
的蒙戈命令是客户端蒙戈是,用于连接到MongoDB数据库命令。
IP和端口号是您在使用env命令时获得的。
一旦你运行这个命令,你就会连接到MongoDB数据库。

然后您可以在命令提示符下运行任何MongoDB命令。在我们的例子中,我们运行以下命令 -
use demo
该命令是一个MongoDB命令,用于切换到数据库名称演示。如果数据库不可用,它将被创建。

现在您已经成功创建了一个客户端和服务器MongoDB容器。
23 设置NGINX
NGINX是一种流行的轻量级Web应用程序,用于开发服务器端应用程序。它是一个开源的Web服务器,可以在各种操作系统上运行。由于nginx是用于开发的流行Web服务器,因此Docker确保它支持nginx。
现在我们将看到让nginx的Docker容器启动并运行的各个步骤。
第1步 - 第一步是从Docker Hub中提取图像。当您登录到Docker Hub时,您将能够搜索并查看nginx的图像,如下所示。只需在搜索框中输入nginx并点击搜索结果中出现的nginx(官方)链接即可。

第2步 - 您将看到Docker 在Docker Hub中存储库的详细信息中为nginx 拉取命令。

步骤3 - 在Docker主机上,使用Docker pull命令(如上所示)从Docker Hub下载最新的nginx镜像。

第4步 - 现在让我们通过以下命令运行nginx容器。
sudo docker run –p 8080:80 –d nginx
我们将端口80 的nginx服务器上的端口暴露给Docker主机上的端口8080。

运行该命令后,如果浏览到URL http:// dockerhost:8080,则会得到以下输出。这表明nginx容器已启动并正在运行。

第5步 - 让我们看看另一个例子,我们可以在我们的ngnix容器中托管一个简单的网页。在我们的例子中,我们将创建一个简单的HelloWorld.html文件并将其存放在我们的nginx容器中。
我们首先创建一个名为HelloWorld.html的HTML文件

我们在HTML文件中添加一个简单的Hello World行。

接下来运行下面的Docker命令。
sudo docker run –p 8080:80 –v “$PWD”:/usr/share/nginx/html:ro –d nginx
关于上述命令需要注意以下几点 -
我们将端口80 的nginx服务器上的端口暴露给Docker主机上的端口8080。
接下来,我们将容器上的/ usr / share / nginx / html容器附加到我们当前的工作目录中。这是我们的HelloWorld.html文件的存储位置。

现在,如果我们浏览到URL http:// dockerhost:8080 / HelloWorld.html,我们将按照预期得到以下输出 -

24 工具箱
在介绍性章节中,我们看到了在Windows上安装Docker工具箱。Docker工具箱的开发使得Docker容器可以在Windows和MacOS上运行。Windows上工具箱的网站是https://docs.docker.com/docker-for-windows/

对于Windows,您需要启用启用了Hyper-V的Windows 10或Windows Server 2016。
工具箱由以下组件组成 -
Docker引擎 - 它用作用于运行Docker容器的基础引擎或Docker守护进程。
Docker Machine - 用于运行Docker机器命令。
Docker Compose用于运行Docker撰写命令。
Kinematic - 这是为Windows和Mac OS构建的Docker GUI。
Oracle虚拟机
现在我们来讨论Docker工具箱可能的不同类型的活动。
在Powershell中运行
在Windows 10多克的工具箱,你现在可以运行多克命令关闭的PowerShell。如果您在Windows上打开PowerShell并键入Docker版本的命令,您将获得有关所安装的Docker版本的所有必需详细信息。

拉图像和运行容器
您现在也可以像在Linux中那样从Docker Hub中拖出图像并在PowerShell中运行容器。以下示例将简要显示Ubuntu映像的下载以及映像的容器运行情况。
第一步是使用Docker pull命令从Docker Hub中取出Ubuntu镜像。

下一步是使用以下运行命令运行Docker镜像-
docker run –it ubuntu /bin/bash
您会注意到该命令与Linux中的相同。

Kitematic
这是Windows上Docker的GUI等价物。要打开此GUI,请转至任务栏并在Docker图标上,右键单击并选择打开Kitematic。

它会提示您下载Kitematic GUI。一旦下载,只需解压缩内容。将会有一个名为Kitematic.exe的文件。双击该exe文件打开GUI界面。
然后您将被要求登录到Docker Hub,通过GUI进入。只需输入所需的用户名和密码,然后单击登录按钮。

登录后,您将能够在界面的左侧看到系统中下载的所有图像。

在右侧,您会发现Docker Hub上的所有图像。
我们举一个例子来了解如何使用Kitematic从Docker Hub下载节点映像。
步骤1 - 在搜索条件中输入节点的关键字。

第2步 - 点击官方节点图像上的创建按钮。您将看到正在下载的图像。

一旦图像被下载,它就会开始运行Node容器。

第3步 - 如果您转到设置选项卡,可以深入查看更多设置选项,如下所示。
常规设置 - 在此选项卡中,您可以命名容器,更改路径设置并删除容器。

端口 - 在这里您可以看到不同的端口映射。如果你愿意,你可以创建自己的端口映射。

卷 - 在这里你可以看到不同的卷映射。

高级 - 它包含容器的高级设置。

25 设置ASP.Net
ASP.Net是Microsoft为开发服务器端应用程序而提供的标准Web开发框架。由于ASP.Net已经存在了相当长的一段时间,Docker确保它支持ASP.Net。
在本章中,我们将看到让ASP.Net的Docker容器启动并运行的各个步骤。
先决条件
为了运行ASP.Net,需要执行以下步骤。
步骤1 - 因为这只能在Windows系统上运行,所以首先需要确保您拥有Windows 10或Window Server 2016。
步骤2 - 接下来,确保Windows系统上安装了Hyper-V和Containers。要安装Hyper-V和容器,可以打开或关闭Windows功能。然后确保选中Hyper-V选项和容器,然后单击确定按钮。

此操作后,系统可能需要重新启动。
步骤3 - 接下来,您需要使用以下Powershell命令来安装Docker 的1.13.0rc4版本。以下命令将下载并将其存储在临时位置。
Invoke-WebRequest "https://test.docker.com/builds/Windows/x86_64/docker-1.13.0- rc4.zip" -OutFile "$env:TEMP\docker-1.13.0-rc4.zip" –UseBasicParsing

第4步 - 接下来,您需要使用以下PowerShell命令展开存档。
Expand-Archive -Path "$env:TEMP\docker-1.13.0-rc4.zip" -DestinationPath $env:ProgramFiles

第5步 - 接下来,您需要使用以下PowerShell命令将Docker文件添加到环境变量。
$env:path += ";$env:ProgramFiles\Docker"
第6步 - 接下来,您需要使用以下PowerShell命令注册Docker Daemon服务。
dockerd --register-service
第7步 - 最后,您可以使用以下命令启动docker守护程序。
Start-Service Docker
在powershell中使用docker version命令来验证docker守护进程正在工作

安装ASP.Net容器
我们来看看如何安装ASP.Net容器。
第1步 - 第一步是从Docker Hub中提取图像。登录到Docker Hub时,您将能够搜索并查看Microsoft / aspnet的映像,如下所示。只需在搜索框中输入asp,然后单击搜索结果中出现的Microsoft / aspnet链接即可。

第2步 - 您将看到Docker pull命令用于在Docker Hub中存储库的详细信息中的ASP.Net。

第3步 - 转到Docker主机并运行Microsoft / ASPnet镜像的Docker pull命令。请注意,图像非常大,接近4.2 GB。

第4步 - 现在转到以下位置https://github.com/Microsoft/aspnet-docker并下载整个Git存储库。
第5步 - 在C驱动器中创建一个名为App的文件夹。然后将4.6.2 / sample文件夹中的内容复制到C驱动器中。转到示例目录中的Docker文件并发出以下命令 -
docker build –t aspnet-site-new –build-arg site_root=/
关于上述命令需要注意以下几点 -
- 它从Docker文件构建一个名为aspnet-site-new的新映像。
- 根路径设置为本地路径文件夹。

第6步 - 现在是时候运行容器。它可以使用以下命令完成 -
docker run –d –p 8000:80 –name my-running-site-new aspnet-site-new

第7步 - 您现在将在Docker容器中运行IIS。要查找Docker容器的IP地址,可以发出Docker 检查命令,如下所示。

26 Cloud
Docker Cloud是由Docker提供的一项服务,您可以在其中执行以下操作 -
节点 - 您可以将Docker Cloud连接到现有的云提供商(例如Azure和AWS),以在这些环境中启动容器。
云存储库 - 提供一个可以存储自己的存储库的地方。
持续集成 - 连接Github并构建持续集成管道。
应用程序部署 - 部署和扩展基础架构和容器。
持续部署 - 可以自动部署。
入门
您可以前往以下链接开始使用Docker Cloud - https://cloud.docker.com/

登录后,您将获得以下基本界面 -

连接到云提供商
第一步是连接到现有的云提供商。以下步骤将向您展示如何连接Amazon Cloud提供程序。
步骤1 - 第一步是确保您拥有正确的AWS密钥。这可以从aws控制台中获取。使用以下链接登录您的aws帐户 - https://aws.amazon.com/console/

步骤2 - 登录后,转到安全证书部分。记下将从Docker Hub使用的访问密钥。

第3步 - 接下来,您需要在aws中创建一个允许Docker查看EC2实例的策略。转到aws中的配置文件部分。点击Create Policy按钮。

第4步 - 点击“创建您自己的策略”,并将策略名称设置为dockercloudpolicy和策略定义,如下所示。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:*", "iam:ListInstanceProfiles" ], "Effect": "Allow", "Resource": "*" } ] }

接下来,点击Create Policy按钮
第5步 - 接下来,您需要创建一个角色,Docker将使用该角色在AWS上旋转节点。为此,请转至AWS中的Roles部分,然后单击Create New Role选项。

第6步 - 为角色命名为dockercloud-role。

第7步 - 在下一个屏幕上,转到“跨账户访问角色”并选择“在您的账户和第三方AWS账户之间提供访问权限”。

第8步 - 在下一个屏幕上,输入以下详细信息 -
- 在帐户ID字段中,输入Docker Cloud服务的ID:689684103426。
- 在外部ID字段中,输入您的Docker Cloud用户名。

第9步 - 然后,单击下一步按钮,在下一个屏幕上,附加在先前步骤中创建的策略。

第10步 - 最后,在创建角色的最后一个屏幕上,确保复制创建的arn角色。
arn:aws:iam::085363624145:role/dockercloud-role

第11步 - 现在回到Docker Cloud,选择Cloud Providers,然后单击Amazon Web Services旁边的插件符号。

输入arn角色并点击保存按钮。

一旦保存,与AWS的集成将完成。

设置节点
一旦与AWS的集成完成,下一步就是设置一个节点。转到Docker Cloud中的节点部分。请注意,设置节点将首先自动设置节点群集。
第1步 - 转到Docker Cloud中的节点部分。

第2步 - 接下来,您可以提供将在AWS中设置的节点的详细信息。

然后,您可以单击将出现在屏幕底部的启动节点群集。一旦部署了节点,您将在“节点集群”屏幕中获得通知。

部署服务
部署节点后的下一步是部署服务。为此,我们需要执行以下步骤。
第1步 - 转到Docker Cloud中的服务部分。点击创建按钮

第2步 - 选择所需的服务。在我们的例子中,我们选择mongo。

第3步 - 在下一个屏幕上,选择创建和部署选项。这将开始在您的节点集群上部署Mongo容器。

一旦部署完毕,您将能够看到容器处于运行状态。

27 日志记录
Docker拥有适当的日志记录机制,可以用来在问题发生时进行调试。在守护程序级别和容器级别都有日志记录。我们来看看不同级别的日志记录。
守护进程日志记录
在守护进程日志记录级别,有四个级别的日志记录可用 -
调试 - 它详细说明守护进程处理的所有可能的信息。
信息 - 它详细介绍了守护进程处理的所有错误和信息。
错误 - 它详述了守护进程处理的所有错误。
致命 - 它仅详述守护进程处理的所有致命错误。
通过以下步骤了解如何启用日志记录。
步骤1 - 首先,我们需要停止docker守护进程,如果它已经在运行。它可以使用以下命令完成 -
sudo service docker stop

第2步 - 现在我们需要启动docker守护进程。但是这一次,我们需要附加-l参数来指定日志记录选项。所以让我们在启动docker守护进程时发出以下命令。
sudo dockerd –l debug &
关于上述命令需要注意以下几点 -
dockerd是docker 守护进程的可执行文件。
该-l选项用于指定日志记录级别。在我们的例子中,我们把这个作为调试
&用于在启用日志记录后返回到命令提示符。

一旦通过日志记录启动Docker进程,您现在也会看到将调试日志发送到控制台。

现在,如果您执行Docker命令(如Docker 镜像),则调试信息也会发送到控制台。

集装箱记录
日志记录也可在容器级别使用。所以在我们的例子中,我们首先启动一个Ubuntu容器。我们可以通过使用以下命令来完成。
sudo docker run –it ubuntu /bin/bash

现在,我们可以使用docker log命令查看容器的日志。
语法
Docker logs containerID
参数
containerID - 这是您需要查看日志的容器的ID。
例
在我们的Docker主机上,让我们发出以下命令。在此之前,您可以在容器中发出一些命令。
sudo docker logs 6bfb1271fcdd
输出

从输出中,您可以看到在容器中执行的命令显示在日志中。
28 Compose
Docker Compose用于将多个容器作为单个服务运行。例如,假设您有一个需要NGNIX和MySQL的应用程序,您可以创建一个文件,将这两个容器作为服务启动,而无需单独启动每个容器。
在本章中,我们将看到如何开始使用Docker Compose。然后,我们将看看如何使用Docker Compose启动并运行MySQL和NGNIX的简单服务。
Docker Compose─安装
需要遵循以下步骤才能启动并运行Docker Compose。
第1步 - 使用以下命令从github下载必要的文件-
curl -L "https://github.com/docker/compose/releases/download/1.10.0-rc2/dockercompose -$(uname -s) -$(uname -m)" -o /home/demo/docker-compose
上述命令将下载最新版本的Docker Compose,这篇文章在撰写本文时为1.10.0-rc2。然后将它存储在目录/ home / demo /中。

第2步 - 接下来,我们需要使用以下命令为下载的Docker Compose文件提供执行权限 -
chmod +x /home/demo/docker-compose

然后我们可以使用以下命令查看撰写 版本。
语法
docker-compose version
参数
版本 - 这用于指定我们需要Docker Compose版本的详细信息。
输出
将显示Docker Compose的版本详细信息。
例
以下示例显示如何获取docker-compose版本。
sudo ./docker-compose -version
输出
您将获得以下输出 -

创建你的第一个Docker-Compose文件
现在让我们继续创建我们的第一个Docker Compose文件。所有Docker撰写文件都是YAML文件。您可以使用vim编辑器创建一个。因此,执行以下命令来创建撰写文件 -
sudo vim docker-compose.yml

让我们仔细看看这个文件的各种细节 -
该数据库和网页的关键字来定义两个单独的服务。一个将运行我们的mysql数据库,另一个将是我们的nginx web服务器。
该图像关键字用于从指定图像dockerhub我们的MySQL和Nginx的容器
对于数据库,我们使用ports关键字来提及需要为mysql公开的端口。
然后,我们还指定了运行mysql所需的mysql的环境变量。
现在让我们使用以下命令运行我们的Docker Compose文件 -
sudo ./docker-compose up
这个命令会将docker-compose.yml文件放入本地目录并开始构建容器。

一旦执行,所有图像将开始下载,容器将自动启动。

当你做一个docker ps时,你可以看到容器确实已经启动并正在运行。

29 持续集成
Docker与许多Continuous Integrations工具集成,其中还包括流行的称为Jenkins的 CI工具。在Jenkins中,你可以使用可用于处理容器的插件。那么让我们快速查看一下Jenkins工具可用的Docker插件。
让我们一步一步来看看Jenkins中Docker容器有什么可用的。
第1步 - 转到您的Jenkins仪表板并单击管理Jenkins。

第2步 - 转到管理插件。

第3步 - 搜索Docker插件。选择Docker插件并点击Install without restart按钮。

第4步 - 安装完成后,转至Jenkins仪表板中的工作。在我们的例子中,我们有一个名为Demo的工作。

第5步 - 在作业中,当您进入构建步骤时,您现在可以看到启动和停止容器的选项。

步骤6 - 作为一个简单的例子,您可以选择其他选项来在构建完成时停止容器。然后,点击保存按钮。

现在,只需在詹金斯工作就可以了。在控制台输出中,您现在可以看到停止所有容器的命令已经运行。

30 Kubernetes架构
Kubernetes是Docker容器的编排框架,它帮助将容器作为服务展现给外部世界。例如,你可以有两个服务 - 一个服务将包含nginx和mongoDB,另一个服务将包含nginx和redis。每个服务可以有一个IP或服务点,可以通过其他应用程序连接。Kubernetes然后用于管理这些服务。
下图以一种简单的格式显示了Kubernetes如何从架构角度出发。

该minion是,所有的服务运行的节点。你可以在一个时间点运行许多小兵。每个仆从将拥有一个或多个POD。每个POD就像托管服务一样。每个POD包含Docker容器。每个POD可以托管一组不同的Docker容器。然后代理被用来控制这些服务对外部世界的暴露。
Kubernetes在其架构中有几个组件。下面将解释每个组件的作用。
etcd - 此组件是高度可用的key-value存储,用于存储shared configuration和service discovery。在这里,各种应用程序将能够通过discovery service连接到服务。
Flannel - 这是容器所需的后端网络。
kube-apiserver - 这是一个可用于编排Docker容器的API。
kube-controller-manager - 这用于控制Kubernetes服务。
kube-scheduler - 这用于在主机上调度容器。
Kubelet - 这是用来控制通过清单文件(mainfest)启动容器的。
kube-proxy - 用于向外界提供网络代理服务。
-
31 Working of Kubernetes
在本章中,我们将看到如何安装Kubenetes通过kubeadm。这是一个有助于安装Kubernetes的工具。让我们一步一步学习如何安装Kubernetes。
第1步 - 确保您正在使用的Ubuntu服务器版本是16.04。
第2步 - 确保您生成可用于ssh登录的ssh密钥。您可以使用以下命令执行此操作。
ssh-keygen
这将在您的主文件夹中生成一个密钥,如下所示。
步骤3 - 接下来,根据Ubuntu的版本,您需要将相关站点添加到apt软件包管理器的docker.list中,以便它能够从kubernetes站点检测到Kubernetes软件包并下载他们相应。
我们可以使用以下命令来完成它。
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/docker.list
第4步 - 然后我们发出apt-get更新以确保所有软件包都在Ubuntu服务器上下载。
第5步 - 安装Docker包,详见前面的章节。
第6步 - 现在是时候通过安装下列软件包来安装kubernetes -
apt-get install –y kubelet kubeadm kubectl kubernetes-cni
步骤7 - 一旦下载完所有kubernetes软件包,就可以使用以下命令启动kubernetes控制器 -
kubeadm init
完成后,您将收到一条成功消息,表明主服务器已启动并正在运行,并且节点现在可以加入群集。