我正在设置circle-ci以自动构建/部署到AWS ECR&ECS。
但是由于没有Dockerfile
,构建失败。
可能是因为我为多个docker映像设置了docker-compose
。
但是我不知道如何解决这个问题。
没有办法制作DockerFile
而不是docker-compose
吗?
article
├ .circleci
├ client
├ api
└ docker-compose.yml
我设置了.circleci / config.yml。
version: 2.1
orbs:
aws-ecr: circleci/aws-ecr@6.0.0
aws-ecs: circleci/aws-ecs@0.0.8
workflows:
build_and_push_image:
jobs:
- aws-ecr/build-and-push-image:
region: AWS_REGION
account-url: AWS_ECR_ACCOUNT_URL
repo: 'article-ecr-jpskgc'
tag: '${CIRCLE_SHA1}'
- aws-ecs/deploy-service-update:
requires:
- aws-ecr/build-and-push-image
family: 'article-task-jpskgc'
cluster-name: 'article-cluster-jpskgc'
service-name: 'article-service-jpskgc'
container-image-name-updates: 'container=article-container-jpskgc,tag=${CIRCLE_SHA1}'
这是github中的源代码。 https://github.com/jpskgc/article
我希望通过circle-ci到ECR / ECS的构建/部署能够成功,但实际上会失败。
这是circle-ci上的错误日志。
Build docker image
Exit code: 1
#!/bin/bash -eo pipefail
docker build \
\
-f Dockerfile \
-t $AWS_ECR_ACCOUNT_URL/article-ecr-jpskgc:${CIRCLE_SHA1} \
.
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/circleci/project/Dockerfile: no such file or directory
Exited with code 1
答案 0 :(得分:1)
您必须使用Dockerfile
,查看正在使用的球的文档。请仔细阅读它们here。同样是docker-compose
≠docker
,因此,我将确认不能用一个替代另一个。
鉴于您的docker-compose.yml
,对于您的常规设置和CI,我有一些建议。
有问题的docker-compose.yml
供参考:
version: '3'
services:
db:
image: mysql
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: article
MYSQL_USER: docker
MYSQL_PASSWORD: docker
nginx:
restart: always
build:
dockerfile: Dockerfile.dev
context: ./nginx
ports:
- '3050:80'
api:
build:
dockerfile: Dockerfile.dev
context: ./api
volumes:
- ./api:/app
ports:
- 2345:2345
depends_on:
- db
tty: true
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
client:
build:
dockerfile: Dockerfile.dev
context: ./client
volumes:
- /app/node_modules
- ./client:/app
ports:
- 3000:3000
如上所述,正如您所说的,我们具有各种组件:
以下是我对每个组件的建议:
MySQL数据库
Nginx负载均衡器
客户端应用
因为这是一个React应用程序,所以您不应将其部署到ECS上-这不划算,您宁可将其部署到Amazon S3。有关如何执行此操作的资源很多。尽管您可能必须根据存储库的结构进行一些更改,但您可以遵循this guide。
这将减少您的总体成本,并且比仅运行用于提供静态文件的整个Docker容器更有意义。
API服务器
这是在ECS中应该运行的唯一内容,您需要做的就是指向配置中正确的Dockerfile
,以成功构建并推送它。
因此,假设我们在您的circle ci
中使用相同的Dockerfile
,则可以按以下方式编辑docker-compose.yml
配置:
build_and_push_image:
jobs:
- aws-ecr/build-and-push-image:
region: AWS_REGION
dockerfile: Dockerfile.dev
path: ./api
account-url: AWS_ECR_ACCOUNT_URL
repo: 'article-ecr-jpskgc'
tag: '${CIRCLE_SHA1}'
注意事项
我的答案不包括:
您必须执行的操作:
docker-compose.yml