首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置AWS ECS + dockerfile-maven-plugin?

如何设置AWS ECS + dockerfile-maven-plugin?
EN

Stack Overflow用户
提问于 2017-12-03 05:49:07
回答 2查看 4.9K关注 0票数 2

我正在尝试设置我的项目的pom.xml和Maven的settings.xml,以自动化生成Docker映像并将其推到我的AWS ECS私有Docker存储库的过程。

在我的pom.xml中,我添加了dockerfile-maven-plugin并将其配置如下:

代码语言:javascript
运行
复制
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
    <executions>
        <execution>
            <id>default</id>
            <goals>
                <goal>build</goal>
                <goal>push</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <finalName>myproject/server</finalName>
        <repository>137037344249.dkr.ecr.us-east-2.amazonaws.com/myproject/server</repository>
        <tag>${docker.image.tag}</tag>
        <serverId>ecs-docker</serverId>
        <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
        <buildArgs>
            <VERSION>${project.version}</VERSION>
            <BUILD_NUMBER>${buildNumber}</BUILD_NUMBER>
            <WAR_FILE>${project.build.finalName}.war</WAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

根据dockerfile-maven-plugin提供的使用说明,我需要添加用于ECS服务器身份验证的配置,但我不知道需要提供什么用户名/密码。我怀疑这是我的AWS登录用户/通行证。

代码语言:javascript
运行
复制
<servers>
    <server>
        <id>ecs-docker</id>
        <username>where_to_get_this</username>
        <password>where_to_get_this</password>
    </server>
</servers>

此外,任何建议,自动化这个码头形象生成/推动我的回购更好的方式是欢迎的。

EN

回答 2

Stack Overflow用户

发布于 2019-02-09 09:44:41

要构建码头映像并使用Spotify dockerfile-maven-plugin将其推送到AWS ,您应该:

  1. 安装amazon-ecr-credential-helper
代码语言:javascript
运行
复制
go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login 
  1. 将其移动到某个已经在执行路径中的文件夹:
代码语言:javascript
运行
复制
mv ~/go/bin/docker-credential-ecr-login ~/bin/
  1. credHelpers部分添加到Amazon的~/.docker/config.json文件:
代码语言:javascript
运行
复制
{
  "credHelpers": {
    "<ecr-id>.dkr.ecr.<aws-region>.amazonaws.com": "ecr-login"
  },
  //...
}

(在Windows行中,如果存在"credsStore": "wincred",,则从该文件中删除)

  1. 检查~/.aws/config是否有您的区域
代码语言:javascript
运行
复制
[default]
region = <aws-region>

~/.aws/credentials有你的钥匙

代码语言:javascript
运行
复制
[ecr-push-user]
aws_access_key_id = <id>
aws_secret_access_key = <secret>

(更多信息...)

  1. 将Spotify dockerfile-maven-plugin添加到pom.xml中:
代码语言:javascript
运行
复制
    <properties>
        <docker.image.prefix>xxxxxxxxxxxx.dkr.ecr.rrrrrrr.amazonaws.com</docker.image.prefix>
        <docker.image.name>${project.artifactId}</docker.image.name>
        <docker.image.tag>${project.version}</docker.image.tag>
        <docker.file>Dockerfile</docker.file>
    </properties>

    <build>
      <finalName>service</finalName>

      <plugins>
          <!-- Docker image mastering -->
          <plugin>
              <groupId>com.spotify</groupId>
              <artifactId>dockerfile-maven-plugin</artifactId>
              <version>1.4.10</version>
              <configuration>
                  <repository>${docker.image.prefix}/${docker.image.name}</repository>
                  <tag>${docker.image.tag}</tag>
                  <dockerfile>${docker.file}</dockerfile>
              </configuration>
              <executions>
                  <execution>
                      <id>default</id>
                      <phase>package</phase>
                      <goals>
                          <goal>build</goal>
                          <goal>push</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>
    </build>
  1. 确保Dockerfile存在,例如:
代码语言:javascript
运行
复制
FROM openjdk:11-jre-slim
VOLUME /tmp
WORKDIR /service
COPY target/service.jar service.jar
ENTRYPOINT exec java -server \
-Djava.security.egd=file:/dev/./urandom \
$JAVA_OPTS \
-jar service.jar
  1. 使用一个命令构建并推送图像:
代码语言:javascript
运行
复制
mvn package
票数 4
EN

Stack Overflow用户

发布于 2018-04-05 13:35:30

要在ECR上登录,您必须使用AWS命令行生成一个docker登录命令,然后使用它登录您的docker守护进程。我不认为这个用例是由任何码头maven插件处理的。

在我的项目中,我所做的是在执行推送之前登录我的docker守护进程:

代码语言:javascript
运行
复制
logstring=`aws --profile my-aws-profile ecr get-login --registry-ids my-registry-id`
`$logstring`

在我的例子中,这个手动步骤是必需的,因为我们有一个AWS帐户,它使用一个硬件令牌来保护,该令牌生成一次使用代码,但这不是一个问题,因为我们只需要每天做一次(ECR登录持续12小时),在部署到ECR的日子(而不是只在本地测试的那些)。

所以解决办法是:

  • 手动登录到ECR,这样您的对接者就可以推送工作,而无需从maven登录。
  • 添加一个登录步骤,直接在pom中脚本外部登录。
  • 当您提交时,尝试使用AWS CodePipeline直接构建您的代码,并将其部署到ECR (如果没有其他限制的话,我建议您这样做)

玩得开心!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47615658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档