Docker Docs - Best Practices for Dockerfiles
Let’s talk about best practices for writing Dockerfiles.
In the last years, we are experiencing improvements on the way Dockerfiles should be structured.
We came from the simple Dockerfile with everything in one image to the multi-stage image build.
FROM ubuntu:18.04 COPY . /app RUN make /app CMD python /app/app.py
Instead of using this approach, the tip here is to use Use multi-stage builds
Here is one example of a Dockerfile for a Go application, could be like the following:
FROM golang:1.11-alpine AS build # Install tools required for project # Run `docker build --no-cache .` to update dependencies RUN apk add --no-cache git RUN go get github.com/golang/dep/cmd/dep # List project dependencies with Gopkg.toml and Gopkg.lock # These layers are only re-built when Gopkg files are updated COPY Gopkg.lock Gopkg.toml /go/src/project/ WORKDIR /go/src/project/ # Install library dependencies RUN dep ensure -vendor-only # Copy the entire project and build it # This layer is rebuilt when a file changes in the project directory COPY . /go/src/project/ RUN go build -o /bin/project # This results in a single layer image FROM scratch COPY --from=build /bin/project /bin/project ENTRYPOINT ["/bin/project"] CMD ["--help"]
In the docker docs documentation you can check the best practices when it comes to the latests.
Please check it at Docker Documentation
Please, follow our social networks:
Thank You and until the next one! 😉👍
Published on Nov 15, 2020 by Vinicius Moll