我试图找到一种方法来开发环境 . 我已经能够将所有内容单独停靠,但现在我正在尝试将所有内容自动化为单个命令以启动和运行开发环境 .

当前堆栈

  • Angular 5

  • Golang Lambda REST Api

  • Mongo DB

运行开发的当前进程

如果不使用docker来运行此环境,我必须执行以下操作

1)在Angular项目文件夹上运行服务

2)在Golang项目中,我必须构建我的源代码并从可执行文件创建zip文件

3)使用aws-sam-cli,我运行命令“sam local start-api”来模拟AWS API网关 .

4)Mongo db从mongod命令启动 .

Dockerize Attempt

  • 在docker上创建Angular应用程序,通过卷共享源代码并设置端口进行实时重新加载,我可以访问localhost上的网站:4200

  • 在docker上创建golang,发送源代码,并运行脚本为aws-sam-cli生成所需的zip文件

问题

我首先尝试在同一个golang容器上安装aws-sam-cli,但是有以下内容并没有让我“sam”正确安装(建议?)

RUN apk add --no-cache bash gawk sed grep bc coreutils git RUN apk add --no-cache curl && \ curl -sSLO https://github.com/awslabs/aws-sam-cli/archive/v0 . 6.0.tar.gz && \ tar -C / usr / local / bin -zxvf v0.6.0.tar.gz && \ apk del curl && \ rm -f v0.6.0.tar.gz RUN apk add --no-cache py-pip && pip install awscli EXPOSE 3000 CMD [“sam”,“local”,“start-api”]

也许我只需要在PATH中添加一些东西?

然后,我意识到我可以直接从docker的aws-cli图像创建一个新容器,所以我可以创建图像,但现在我现在要做的是如何将我的golang容器与我的template.yaml链接( aws cli需要工作)和二进制文件(zip文件)到aws-cli容器,以便我可以运行sam local start-api并在端口3000上启动我的服务器?

这是我本地计算机上的文件夹

- server
 - api
 - template.yaml
 - Dockerfile

然后在执行Docker文件时,容器将运行一个脚本并INSIDE我现在拥有的容器

- server
 - api
 - template.yaml
 - Dockerfile
 - bin

(注意:运行容器时,我的本地计算机中不存在"bin"文件夹,即使我认为我已共享该卷)

这是我的docker-compose.yaml文件

version: '3.3'
    services:
      server:
        container_name: 'server'
        build: './server'
        volumes:
          - 'executables:/go/src/app/server/bin'
      amazon:
        image: cnadiminti/aws-sam-local
        command: local start-api --host 0.0.0.0 --docker-volume-basedir 
    executables
        ports:
          - '3000:3000'
        volumes:
          - 'executables:/go/src/app/server/bin'
        depends_on:
          - server

    volumes:
      executables:

所以start-api命令允许我修改二进制文件,它会自动获取更改,所以我在服务器容器上创建了一个脚本,用于从修改后的代码创建zip文件 . 我希望amazon容器能够从服务器容器中识别更新的zip文件,以便它可以获取更改而无需在amazon容器上重新启动sam local start-api命令

基本上这个目标的最终目的是做一个项目的git克隆,运行docker-compose并开始在代码中进行更改(使用本地机器上的编辑器)然后通过docker exec运行脚本来重建zip文件和更改将立即部署 .

这可能吗?