创建用于 Amazon ECR 的容器映像

2025-05-25

创建用于 Amazon ECR 的容器映像

Amazon Elastic Container Registry (Amazon ECR) 是一项 AWS 托管的容器镜像注册服务,安全、可扩展且可靠。Amazon ECR 使用 AWS IAM 支持具有基于资源权限的私有存储库。这样,指定的用户或 Amazon EC2 实例就可以访问您的容器存储库和镜像。

本文旨在演示如何创建 Docker 镜像并将其推送到 Amazon ECR(一个容器注册表)。我假设您对 Docker 的概念及其工作原理有基本的了解。

先决条件

在开始之前,请确保您已具备以下条件:

  • 设置您的 AWS 账户。

  • 完成 Amazon ECR 设置步骤。您可以找到有关如何设置 Amazon ECR 的信息。

  • 您使用的用户应具有访问和使用 Amazon ECR 的 IAM 权限。要了解更多信息,请参阅

  • 您的机器上应该已经安装了 Docker。

  • 最后,您还应该安装并配置 AWS CLI。

创建 Docker 镜像

在本节中,我们将为一个简单的 Web 应用程序创建一个 Docker 镜像,并在本地机器上测试该镜像,然后将其推送到容器注册表 Amazon ECR(与 DockerHub 非常相似)。

创建一个简单的 Web 应用程序的 Docker 镜像。

  • 第一步是创建一个名为Dockerfile的文件。Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用以组装镜像的所有命令。
touch Dockerfile
Enter fullscreen mode Exit fullscreen mode

图片描述

  • 现在将继续编辑 Dockerfile:
vim Dockerfile
Enter fullscreen mode Exit fullscreen mode

添加以下代码:

FROM ubuntu:18.04 

# Install dependencies 
RUN apt-get update && \
  apt-get -y install apache2 

# Install apache and write hello world message 
RUN echo 'Hello World!' > /var/www/html/index.html 

# Configure apache 
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ 
  echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ 
  echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \
  echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
  chmod 755 /root/run_apache.sh 

EXPOSE 80 

CMD /root/run_apache.sh
Enter fullscreen mode Exit fullscreen mode

我认为有必要谈谈上面的代码。此 Dockerfile 使用的是 Ubuntu 18.04 镜像。

RUN指令将更新包缓存,它将为 Web 服务器安装一些依赖的软件包,然后将“Hello World”语句打印到 Web 服务器的文档根目录。

EXPOSE指示容器将暴露到的端口(80)。而CMD启动 Web 服务器。

  • 接下来我们将构建Docker 镜像:
docker build -t hello-world .
Enter fullscreen mode Exit fullscreen mode

图片描述

  • 现在我们已经构建了图像,我们现在可以继续验证图像是否正确创建:
docker images --filter reference=hello-world 
Enter fullscreen mode Exit fullscreen mode

图片描述

  • 然后在-p 80:80上运行docker 镜像
docker run -t -i -p 80:80 hello-world
Enter fullscreen mode Exit fullscreen mode

图片描述

  • 为了确认我们的运行命令是否成功,我们将浏览器指向http://localhost/并查看带有“Hello World!”语句的网页。

图片描述

  • 现在我们的镜像已经构建并成功运行,我们可以通过输入Ctrl + c来停止 Docker 容器。

现在是时候将图像推送到 Amazon Elastic Container Registry 了。

Amazon ECR 是一项托管的 AWS Docker 镜像仓库服务。您可以使用 Docker CLI 推送、拉取和管理 Amazon ECR 存储库中的镜像。

标记您的图像并将其推送到 Amazon ECR。
  • 首先,我们必须创建一个 Amazon ECR 存储库来保存我们的hello-world图像。
aws ecr create-repository --repository-name hello-repository --region region
Enter fullscreen mode Exit fullscreen mode

图片描述

需要注意以下几点:

上面输出中的 repositoryUri。其次 ,将region替换为您的 AWS 区域,在我上面的例子中,我使用了us -east-1区域。

  • 下一步是使用上一步中的repositoryUri值标记hello-world图像。
docker tag hello-world aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
Enter fullscreen mode Exit fullscreen mode

图片描述

  • 此时,我们必须登录到我们的注册表,这将要求我们获取我们的登录密码凭证(使用aws ecr get-login-password)。
docker login -u AWS -p $(aws ecr get-login-password --region REGION) aws_account_id.dkr.REGION.amazonaws.com
Enter fullscreen mode Exit fullscreen mode

图片描述

我们应该看到登录成功的输出。

  • 使用前面步骤中的 repositoryUri 值将图像推送到我们的 Amazon ECR。
docker push aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
Enter fullscreen mode Exit fullscreen mode

图片描述

我们还可以通过AWS控制台确认:

图片描述

是时候清理我们的资源以节省成本了:

为了清理我们的资源,我们必须删除前面步骤中创建的存储库:

aws ecr delete-repository --repository-name hello-repository --region region --force
Enter fullscreen mode Exit fullscreen mode

图片描述

至此我们已经结束了这篇文章,我希望它能够对大家有很大的帮助。

欢迎通过Linkedin与我联系

文章来源:https://dev.to/oloruntobiolurombi/creating-a-container-image-for-use-on-amazon-ecr-3e3
PREV
集成 MongoDB 的 Dockerized Node.js 应用程序:部署到 AWS ECR
NEXT
事件溯源 为什么事件溯源是微服务通信的反模式 领域事件是通用语言的核心 领域事件用于跨边界通信 解耦的迷思 简单的答案:事件溯源! 事件溯源只是一种持久化策略吗? 有出路 选择的自由 结论 参考文献