在EC2上为具有许多依赖关系的Web应用程序构建docker镜像

时间:2018-04-18 05:57:03

标签: docker amazon-ec2 amazon-ecs

我对Docker很新,并且有一些非常基本的问题。我无法在其他地方澄清我的怀疑,因此在此发布。如果查询非常明显,请原谅我。我知道我对图像缺乏一些基本的了解,但我很难找到一些容易理解的解释。

手头的问题:

我的应用程序在EC2节点上运行(r4.xlarge)。它是一个Web应用程序,具有很多依赖项(系统依赖项+其他库等)。我想创建一个我的机器的docker镜像,以便在我启动新的EC2实例时可以轻松地运行它。

问题:

  1. 我是否需要从头开始构建docker镜像,还是可以使用一些基本图像?
  2. 如果我可以使用基本图像,我会选择哪一个? (很难知道EC2机器上的操作系统版本,因此我不确定从哪个基本图像开始。 我提到这个文件 - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html#install_docker 但它是从Ubuntu基础映像创建的。
  3. 上面的示例提供了有关安装apache(以及应用程序所需的其他内容)的说明。让我们说我的应用程序需要安装服务器X + 20个系统依赖项+ 10个其他库。
  4. 前:

        yum install gcc
        yum install gfortran
        wget <abc>
    

    当我创建一个docker文件时,是否需要指定上面的所有安装说明?我认为创建图像就像是拍摄现有机器的副本。在这种情况下,docker文件应该具有什么?

    指出一些好的文档,在EC2上为依赖的Web应用程序构建一个docker镜像也非常有用。

    提前致谢。

2 个答案:

答案 0 :(得分:1)

  1. 您可以使用基本图像,使用第一行指定它 您的Docker文件,FROM
  2. EC2实例的基本操作系统对容器无关紧要。 这是容器的重点,你可以在windows上运行linux,arch 关于debian,无论你想要什么。
  3. 是的,您的基本图片中不存在的依赖关系需要 指定并安装。 (取决于默认打包器 您正在使用的基本映像的管理器可能使用dpkg, 或yum或apt-get。 )

答案 1 :(得分:1)

首先,如果您想转向docker,我建议使用专为docker容器设计的AWS ECS,并具有自动扩展和负载均衡功能。

关于你的问题是关注所以

  1. 您需要一个docker文件,其中包含已安装在EC2实例中的所有软件包和应用程序。至于基本图像,我会推荐 Alpine 。 Docker默认图像为 Alpine
  2. 为何选择阿尔卑斯山? Alpine将自己描述为:

      

    小。简单。安全。 Alpine Linux是一个面向安全的,   基于musl libc和busybox的轻量级Linux发行版。

    https://nickjanetakis.com/blog/the-3-biggest-wins-when-using-alpine-as-a-base-docker-image

    https://hub.docker.com/_/alpine/

      

    假设我的应用程序需要安装服务器X + 20系统   依赖项+其他10个库。

    所以你需要制作需要你提到的所有这些的dockerfile。

    我将再次建议使用ECS作为最佳基于docker的应用程序,因为这是为docker设计的ECS,而不是EC2

      

    集中一切

         

    Amazon ECS可让您轻松构建所有类型的   容器化应用程序,来自长期运行的应用程序和   微服务到批处理作业和机器学习应用程序。您可以   将旧版Linux或Windows应用程序从本地迁移到   云并使用Amazon ECS将其作为容器化应用程序运行。

    https://aws.amazon.com/ecs/

    https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/

    https://caylent.com/containers-kubernetes-docker-swarm-amazon-ecs/