Run service locally (mounts project dir)
docker-compose up
Develop locally (open bash prompt)
docker-compose run --rm app bash
When running in buildkite, docker compose won't be passed the overrides file (see below).
Dockerfile
FROM node:6
WORKDIR /src
# Bundle app source
COPY package.json /src
ENV NODE_ENV=production
RUN npm install -q --production
COPY . /src
EXPOSE 5000
ENV NODE_ENV=production
CMD ["node", "server.js"]
docker-compose.yml
version: '3'
services:
app:
image: "loke/app-name:${DOCKER_TAG:-latest}"
depends_on:
- db
db:
image: postgres:latest
docker-compose.override.yml
version: '3'
services:
app:
build: .
volumes:
- '.:/src'
ports:
- 5000:5000
db:
ports:
- 5432:5432
buildkite env
#!/usr/bin/env bash
set -e
DOCKER_TAG="$BUILDKITE_BUILD_ID"
export DOCKER_TAG
function docker-build() {
local PROJECT_NAME="$(jq -r '.name' package.json)"
local IMAGE_NAME="loke/$PROJECT_NAME:$BUILDKITE_BUILD_ID"
echo Building Docker Image: "$IMAGE_NAME"
docker build -t "$IMAGE_NAME" .
docker push "$IMAGE_NAME"
}
function docker-publish() {
local PROJECT_NAME="$(jq -r '.name' package.json)"
local IMAGE_NAME="loke/$PROJECT_NAME:$BUILDKITE_BUILD_ID"
tags=( "$@" )
for tag in "${tags[@]}"; do
echo Tagging Docker Image: "loke/$PROJECT_NAME:$tag"
docker tag "$IMAGE_NAME" "loke/$PROJECT_NAME:$tag"
docker push "loke/$PROJECT_NAME:$tag"
done
}
.buildkite/pipeline.yml
steps:
- label: build
command: docker-build
- wait
- label: test
# command: '.buildkite/test.sh'
command: 'npm install && npm test'
env:
BUILDKITE_DOCKER_COMPOSE_CONTAINER=app
- wait
- label: publish
command: docker-publish testing