你在用 docker 么?你是否感觉在国内更新 docker 经常失败?下载 docker image 速度缓慢?

如果你想解决这个问题,可以尝试使用 AWS 提供的 Elastic Container Service(简称 ECS)把你的 docker 容器放在云上。

把 docker 镜像交给 AWS —— 创建 docker image 仓库

通常,如果你想要在服务器上构建一个镜像,你可能会通过 ssh 登录服务器后,执行 docker build 命令,或者从 docker hub 上下载镜像。如果使用 ECS 服务,你可以直接把镜像交给 AWS 设置的 image 仓库。

首先,我们在 ECS 服务中创建一个仓库。和 docker hub 或者 github 仓库一样,我们在网页上创建一个空仓库,然后把我们的资源 push 到仓库的地址。

在进入 Elastic Container Service 的控制台后,点击「存储库」选项卡,并点击「创建存储库」。

在下一页,给你的存储库起个名字。比如我起的名字叫 example-image

 

 然后点击下一步,会有一个详细的上传引导,按照这个引导一步一步做,当你本地的终端里显示镜像 push 完成后,点击浏览器里的完成。你就能看到你上传的镜像了。

 

 

如果你不知道用什么镜像,可以看我写的这个 Dockerfile,一个基于 nginx 的很简单的镜像

找个地方承载你的服务 —— 创建集群

在上一步,我们已经准备好了要使用的镜像,但是还没有服务器可以让我们来启动这个镜像。为了弄一台能运行 docker 的服务器,我们需要在 ECS 控制台中创建一个集群(尽管这个集群只有 1 台服务器)。

那么,点击「集群」选项卡,并点击「创建集群」:

 

 之后会有很多设置项需要填写,我们在这里只填写最少必要的设置项,也就是第一屏的设置项。如图,我把集群名称设置为example-cluster

 

 

之后,滑到页面地图,点击创建。然后等待集群创建好,你就有了一个可以运行 docker 的 ECS 集群。

定义如何运行你的容器 —— 创建任务定义

有了 ECS 集群后,你就可以把容器放到上面运行了。但是在运行之前,你需要先定义一下,你要如何运行这些容器。

那么,我们就进入「任务定义」 选项卡,并点击「创建新任务定义」:

 

 

之后又是一些设置项,但对我们来说,重要的只有两个,一个是起名,一个是添加容器。我把这个任务起名为example-task,然后点击添加容器。

在添加容器的时候,最基本的是前 5 项,更详细的说明我写在图中。后面还有很多选项,其中大部分都可以看做是从 docker 命令演化而来的,在本教程中不详细介绍。填写之后,点击右下角的创建:

 

 

这样,我们就在任务中添加了一个容器作为任务的一部分。接着点击页面下方的「创建」,完成整个任务的创建。

启动容器和配套设施 —— 创建服务

这是运行容器前的最后一步,也就是把刚才定义的任务运行起来。在 AWS 的词典里,这叫创建服务[1]

要想创建服务,我们需要进入刚刚创建的集群:

 

 在「服务」选项卡(1号位置)下,点击「创建」。之后会设置任务的参数,只需要填选第一屏的内容就好了。

 

 之后所有的设置项,我们都留作默认的。所以一路点击下一步,并创建服务,直到页面显示「服务已创建」。这个时候,我们可以去查看服务状态:

 

 

如果在服务的控制面板中,显示刚刚启动的任务为「RUNNING」状态,代表着我们成功的启动了在「创建任务定义」阶段设置的容器。

为了查看实际效果,我们回到集群的控制面板,去查看 ECS 服务器的地址(公有 DNS 或者 公有 IP):

 

 我得到的实际效果是这样的:

 

 

后话

恭喜,到这里你可能已经在使用自己的第一个 ECS 了。但是后续的更改要如何进行呢?

如果你想使用更多的服务器,就在集群控制面板中做「扩展 ECS 实例」的操作。
如果你想想更新容器运行的代码,就把用新打包的镜像推到仓库中,然后对任务「创建新修订」,然后更新服务。

 

 

最后,我要道歉的是,我对 ECS 服务也并不是很熟悉,无法达到生产环境要求的稳定性,可用性。如果有疑问,或者质疑,欢迎留言。

参考

Running Docker In Production Using AWS ECS


  1. 或者说,运行任务是创建服务的一部分,因为创建服务的过程中,还可以配置 auto scaling,负载均衡等超越运行任务的部分。



作者:刘思宁
链接:https://www.jianshu.com/p/d9a3093bd151
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。