This may be a stupid question, but I'm new to using Docker-compose. So far, I love it... but I'm having some long build times. I have a project with several dependencies, and I need to obviously rebuild the source every time I make a change. Right now, I'm calling docker-compose build
to rebuild the container, followed by a docker-compose up
. The problem is:
It's rebuilding the entire container for every change I make to the source code (which takes a long time -- fetching dependencies/etc). This is significantly slowing me down.
I really feel like I should just be able to run a command on the container to rebuild and then re-run the executable, like-so:
docker-compose run web go build . docker-compose run web ./app
ordocker-compose run web go build . docker-compose restart
This should work because I'm using a volume to share code amongst the host and container. There shouldn't be a need to refetch all the dependencies. Shouldn't it use the freshly built executable? However, this does not reflect the built changes and port forwarding appears to break.
For reference, here is my Dockerfile:
FROM golang:1.8
COPY . /go/src/github.com/codeblooded/test1
WORKDIR /go/src/github.com/codeblooded/test1
RUN echo $PATH
RUN go get -d -v ./...
RUN go install -v ./...
RUN go build -o test1 .
CMD ["test1"]
EXPOSE 3470
And my docker-compose.yml file:
version: '3'
services:
postgres:
image: postgres
volumes:
- ./db/data/psql:/var/lib/postgresql/data
- ./db/schema:/db/schema
redis:
image: redis
volumes:
- ./db/data/redis:/data
server:
build: .
command: test1
volumes:
- .:/go/src/github.com/codeblooded/test1
ports:
- "3470:3470"
depends_on:
- postgres
- redis
Is there something I'm missing?
COPY --from
. You can have a look at my article about Efficient Docker builds for large monorepos, which also covers reducing image size using multi-stage builds, and making good use of the Docker build cache. – Versicolor