Amazon ECR
用户指南 (API Version 2015-09-21)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Docker 基本知识

Docker 是一项可让您构建、运行、测试和部署基于 Linux 容器的分布式应用程序的技术。 Amazon ECR 是一项托管 AWS Docker 注册表服务。客户可以使用熟悉的 Docker CLI 推送、拉取和管理映像。有关 Amazon ECR 产品详细信息、特色客户案例研究和常见问题,请参阅 Amazon Elastic Container Registry 产品详细信息页面

本指南中的文档假定读者已基本了解 Docker 是什么及其工作方式。有关 Docker 的更多信息,请参阅 Docker 是什么?Docker 用户指南

安装 Docker

Docker 适用于许多不同的操作系统,包括大多数现代 Linux 分发版(如 Ubuntu)甚至 Mac OSX 和 Windows。有关如何在特定的操作系统上安装 Docker 的更多信息,请转到 Docker 安装指南

您甚至无需本地开发系统即可使用 Docker。如果您已使用 Amazon EC2,则可启动 Amazon Linux 实例并安装 Docker 以开始使用。

在 Amazon Linux 实例上安装 Docker

  1. 使用 Amazon Linux AMI 启动实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的启动实例

  2. 连接到您的实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的连接到您的 Linux 实例

  3. 更新实例上已安装的程序包和程序包缓存。

    [ec2-user ~]$ sudo yum update -y
  4. 安装最新的 Docker Community Edition 程序包。

    [ec2-user ~]$ sudo yum install -y docker
  5. 启动 Docker 服务。

    [ec2-user ~]$ sudo service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]
  6. ec2-user 添加到 docker 组,以便您能够执行 Docker 命令,而无需使用 sudo

    [ec2-user ~]$ sudo usermod -a -G docker ec2-user
  7. 退出,再重新登录以接受新的 docker 组权限。

  8. 验证 ec2-user 是否能在没有 sudo 的情况下运行 Docker 命令。

    [ec2-user ~]$ docker info Containers: 2 Images: 24 Storage Driver: devicemapper Pool Name: docker-202:1-263460-pool Pool Blocksize: 65.54 kB Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 702.3 MB Data Space Total: 107.4 GB Metadata Space Used: 1.864 MB Metadata Space Total: 2.147 GB Library Version: 1.02.89-RHEL6 (2014-09-01) Execution Driver: native-0.2 Kernel Version: 3.14.27-25.47.amzn1.x86_64 Operating System: Amazon Linux AMI 2014.09

    注意

    在某些情况下,您可能需要重新启动实例,以便为 ec2-user 提供访问 Docker 守护程序的权限。如果您看到以下错误消息,请尝试重启您的实例:

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?

创建 Docker 映像

在此部分中,您将创建简单 PHP Web 应用程序的 Docker 映像,并在本地系统或 EC2 实例上测试此映像。

创建 PHP Web 应用程序的 Docker 映像

  1. 安装 git 并使用它将简单 PHP 应用程序从 GitHub 存储库克隆到系统中。

    1. 安装 git。

      [ec2-user ~]$ sudo yum install -y git
    2. 将简单 PHP 应用程序克隆到系统中。

      [ec2-user ~]$ git clone https://github.com/awslabs/ecs-demo-php-simple-app
  2. 将目录更改为 ecs-demo-php-simple-app 文件夹。

    [ec2-user ~]$ cd ecs-demo-php-simple-app
  3. 在此文件中检查 Dockerfile。Dockerfile 是一个清单文件,描述了用于 Docker 映像的基本映像以及要安装的项目以及在此项目上运行的内容。有关 Dockerfile 的更多信息,请转到 Dockerfile 参考

    [ec2-user ecs-demo-php-simple-app]$ cat Dockerfile FROM ubuntu:12.04 # Install dependencies RUN apt-get update -y RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql # Install app RUN rm -rf /var/www/* ADD src /var/www # Configure apache RUN a2enmod rewrite RUN chown -R www-data:www-data /var/www ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

    此 Dockerfile 使用 Ubuntu 12.04 映像。RUN 指令将更新程序包缓存,为 Web 服务器和 PHP 支持安装一些软件包,然后将您的 PHP 应用程序添加到 Web 服务器的文档根目录。EXPOSE 指令在容器上公开端口 80,CMD 指令启动 Web 服务器。

  4. 从您的 Dockerfile 构建 Docker 映像并在默认 Amazon ECR 注册表中将该映像标记为 amazon-ecs-sampleaws_account_id 替换为您的 AWS 账户 ID。

    注意

    Docker 的某些版本可能需要在以下命令中使用 Dockerfile 完整路径,而不是所示的相对路径。

    [ec2-user ecs-demo-php-simple-app]$ docker build -t aws_account_id.dkr.ecr.us-east-1.amazonaws.com/amazon-ecs-sample .
  5. 运行 docker images 以验证是否已正确创建映像以及映像名称是否包含可推送到的存储库(在此示例中,您的 Amazon ECR 注册表)。

    [ec2-user ecs-demo-php-simple-app]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE aws_account_id.dkr.ecr.us-east-1.amazonaws.com/amazon-ecs-sample latest 8df953fe88f7 27 minutes ago 260.8 MB ubuntu 12.04 2a7a952931ec 3 weeks ago 136.1 MB
  6. 运行新构建的映像。-p 80:80 选项将容器上公开的端口 80 映射到主机系统上的端口 80。有关 docker run 的更多信息,请转到 Docker 运行参考

    [ec2-user ecs-demo-php-simple-app]$ docker run -p 80:80 aws_account_id.dkr.ecr.us-east-1.amazonaws.com/amazon-ecs-sample apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2 for ServerName

    注意

    来自 Apache Web 服务器的输出将显示在终端窗口中。您可以忽略“Could not reliably determine the server's fully qualified domain name”消息。

  7. 打开浏览器并指向正在运行 Docker 并托管您的容器的服务器。

    • 如果您使用的是 EC2 实例,这将是服务器的 Public DNS 值,此值与您用于通过 SSH 连接到实例的地址相同。确保实例的安全组允许端口 80 上的入站流量。

    • 如果您正在本地运行 Docker,可将您的浏览器指向 http://localhost/

    • 如果您正在 Windows 或 Mac 计算机上使用 docker-machine,请使用 docker-machine ip 命令查找托管 Docker 的 VirtualBox VM 的 IP 地址,并将 machine-name 替换为您正在使用的 Docker 计算机的名称。

      $ docker-machine ip machine-name 192.168.59.103

    您应看到正在运行简单 PHP 应用程序的网页。

     简单 PHP 应用程序
  8. 通过键入 Ctrl +c 来停止 Docker 容器。

后续步骤

现在,您已创建并测试映像,可以执行 Amazon ECR 入门在 Amazon ECR 中使用 AWS CLI中的过程来将映像推送至您的 Amazon ECR 注册表。