要使用Docker部署我们的应用,首先要安装Docker。本篇文章以Mac系统为例,说明Docker安装过程及部署应用。
----Part1----
[官网Docker下载地址](https://www.docker.com/products/docker#/mac)。

在官网给出的描述很清楚,圈起来的那句话比较重要,意思是如果我们要在Mac上安装Docker,需要我们的Mac系统在10.10.3及以上。

我们查看自己的系统,如果满足要求便可直接Download Docker for Mac,如果不满足要求有两种解决方式:1.升级自己的Mac系统之后点击Docker下载安装;2.点击官网给出的链接先下载Docker Toolbox,Toolbox可以安装你在开发中运行Docker时所需要的一切:Docker客户端、Compose(仅Mac需要)、Kitematic、Machine以及VirtualBox。Toolbox使用Machine和VirtualBox在虚拟机中创建了一个引擎来运行容器。在该虚拟机上,你可以使用Docker客户端、Compose以及Kitematic来运行容器。
在此由于我使用第一种方式安装,所以第二种方式想了解第二种安装方式的可参考这篇博文。

待下载完成后,进行安装,将Docker拖入Application内。

在电脑应用里找到Docker应用图标进入。

在第一次启动Docker应用时,会如上图的初始化引导设置,入没特殊需求,一路next点下去就好。当然,需要输入自己的用户名密码。

当你看到这个界面时,Docker就运行起来了。到此下载安装运行过程完成。
----Part2----
为方便后面docker创建服务,我们需要在Docker官网注册账号,并repository。下图为我注册好的账号与repository,后续我们可以通过docker push命令发布镜像到repository。

关于登陆:

关于怎么编写Dockerfile在此就不提了(自己也没有好好研究,待有时间会学习的)。有关编写Dockerfile的文章请移步到此。
关于构建自己的镜像:

由于我并没有自己编写Dockerfile,偷懒从git上down了一个放在了/tcl文件夹下,通过命令行进入文件夹并进入我下载的hello-service-master文件夹下,发现有Dockerfile文件,我直接通过命令:docker build -t xxx:xxx . 构建自己的镜像。在国内网速龟速,由于构建时要请求网络下载一系列东西,所以可以通过换源稍稍提高网速,关于换源。


如上图所示:当镜像构建完成,就可以通过docker push hello-service-master将镜像push到自己的repository。
----Part3----
创建节点最快最省事的办法是,通过docker-machine命令,在本地创建虚拟机:

以上命令在本地创建一个virtualbox的虚拟机,名字为t1。create命令执行创建操作, -d(driver #指定基于什么虚拟化技术的驱动)。docker-machine自带virtualbox虚拟机,无需单独安装。执行上述命令,会自动从docker服务器下载匹配版本最新的virtualbox虚拟机镜像,下载完毕会自动启动该虚拟机。
上述命令执行时需要请求网络,国内限制,解决方案是通过阿里云Docker镜像加速,移步。

执行命令创建3个节点。
----Part4----
创建Swarm
上面创建了3个节点。计划让:
default作为manager节点,swarm的操作命令只能在manager节点上执行
t1和t2作为worker节点
可通过docker-machine的ssh命令无需密码登陆到default节点:

在default节点创建swarm:

退出default,再次通过docker-machine ssh命令登陆到t2和t3,执行上述命令加入到t1创建的swarm中,即:

然后,再次登录t1,可通过如下命令查看swarm加入的情况:

创建服务:
在default节点,执行命令创建服务:先执行pull!!!
docker service create -p 3000:3000 --name hello-service tcl012812/hello-service-master:0.1.0

这个命令类似docker的run命令:
docker run -d -p 3000:3000 marshalw/hello-service
区别是,docker run命令只在当前docker服务器上创建容器,docker service create将在创建的swarm中创建容器。上面创建服务的命令只跑了1个服务实例。当开启服务实例后,通过docker service ls查看服务列表。

待上述命令执行完毕,通过服务命令查看均状态正确之后,就可以通过 curl 'http://xxx.xxx.xxx.xxx:xx/xx/xx' 格式的地址来验证是否成功。

上图虽然服务只部署在swarm其中一个节点,但无论访问其中哪个节点,都可获得服务:原因是未部署服务的节点会自动转发请求到服务所在的节点上去。
改变服务的实例数:
下面命令将目前1个实例数改为3个:
docker service scale hello-service=3

可以通过docker service ps命令查看具体节点上服务的状态:
docker service ps hello-service

网友评论