用AWS的Docker挑选一只小猫咪

本文假设读者具有Docker基础知识,着重介绍如何在AWS上运行一个简单的Web程序。如果缺乏Docker基础知识,可以通过参考资料「1」的“傻瓜级”教程学习。

本地运行Image

首先我已经在将这个程序的docker image 上传到了我的Docker Hub。首先你可以在本地验证这个docker image是否能正常运行。

$ docker run -p 8888:5000 robinliug/catnip
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://172.17.0.2:5000

容器使用端口5000在Docker内部中运行,可以通过8888端口在外部访问该容器。

当你在能在本地浏览器捕获随机捕获一只小猫咪后,可以准备在AWS上部署该Image了。

云上运行Image

我们使用AWS Elastic Beanstalk(EB)运行这个程序,EB是一个AWS提供的PaaS,国内的云厂商也提供了类似的平台。值得一提的是,AWS允许新用户免费试用一年的所有类型产品。

以下是一些步骤:

1 创建账号

AWS创建个人账号,如果有任何创建账号问题都可以联系客服。我当时跟线上客服反馈收不到验证码,然后客服就从美国给我打了个国际电话来帮我解决了。

2 创建Application

EB创建Application。

可以创建多个Application,每一个Application下可以创建多个Environment。

这里的名字可以根据个人喜好填,比较重要的是后面的内容。

3 创建Environment

平台选择Docker,并且使用我们自己提供的AWS Docker运行环境配置文件。

配置文件名为Dockerrun.aws.json,内容如下:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "robinliug/catnip",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": 5000,
      "HostPort": 8000
    }
  ],
  "Logging": "/var/log/nginx"
}

步骤二(配置服务权限)稍微复杂一点,需要选择正确的Existing service roles和EC2 instance profile。

如果没选择正确的配置,最后在Environment生成的时候会出现以下错误:

有个很详细的官方文档告诉我们怎么配置这块,最主要的就是配置EC2的3个IAM权限:

  • AWSElasticBeanstalkWebTier
  • AWSElasticBeanstalkWorkerTier
  • AWSElasticBeanstalkMulticontainerDocker

步骤二完成后,可以直接跳去确认页提交所有配置

Environment发布成功后的页面大致就是这样:

最后你就可以通过Environment提供的链接,随机捕获你的小猫咪啦!

参考资料

1. A Docker Tutorial for Beginners
2. AWS EB Create an example application