I am trying to build a nodejs angular docker image and run a container of it in AWS ECS. I think this way of doing it is very ineffecient and illogical. But I don´t know how to it in another way.
Here I use a node image with aws cli to easily push the and deploy the docker image to a aws ecs container
bitbucket-pipelines.yml
image: rhinogram/node-awscli
#image: node:9.7.1
options:
docker: true
pipelines:
default:
- step:
script:
- echo "This script runs on all branches that don't have any specific pipeline assigned in 'branches'."
branches:
branch*:
- step:
caches:
- docker
script:
- eval $(aws ecr get-login --no-include-email | sed 's|https://||')
- cd ./ClientApp/
- docker build -t xxx .
# Tag and push my docker image to ECR
- docker tag xxx
- docker push xxx
# Register the ECS task definition and capture the version
- export IMAGE_NAME=xxx
- export TASK_VERSION=$(xxx
# Set ECS service to desired count 0
- aws ecs update-service --cluster xxx --service xxx --desired-count 0
# Set ECS service to desired count 1 and assign the new task-definition ## testing
- aws ecs update-service --cluster xxx --service wxxx --task-definition xxx:$TASK_VERSION --desired-count 1
The Dockerfile ia almost a default nodejs Dockerfile
Dockerfile
# base image
FROM node:9.7.1
# install chrome for protractor tests
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update && apt-get install -yq google-chrome-stable
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install -g @angular/cli@6.2.2
# add app
COPY . /usr/src/app
# start app
CMD ng serve --port xxx --host xxx
It takes around 9min for the pipelines start to finish. This way of doing it seems wrong?
and the docker cache seems to not work as well.
Can´t I do it another way? I have the "same" (very similar) setup for .net core app as well
Or let´s say I use microsoft/dotnet:2.1-sdk in the pipeline and then the same image in the Dockerfile. It pulls the image again. Which doesn´t make sense to me
Is there someway to run all Dockerfile steps directly in the pipeline and still push the Dockerfile the AWS microservice cluster? I feel the pipeline could complete in 1min instead of 9min
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.