From 89942f0cc9a938f4344e3db98696442f057293b8 Mon Sep 17 00:00:00 2001 From: Peter Banik Date: Wed, 22 Feb 2023 17:50:54 -0500 Subject: [PATCH] Docker production build optimizations --- .github/workflows/release-docker.yml | 41 ++++++++++++++-------------- client/Dockerfile.release | 34 +++++++++++++++++++++++ 2 files changed, 54 insertions(+), 21 deletions(-) create mode 100644 client/Dockerfile.release diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml index d8b65ae334..4ef15e49ca 100644 --- a/.github/workflows/release-docker.yml +++ b/.github/workflows/release-docker.yml @@ -5,8 +5,7 @@ on: types: [created] env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + DOCKER_CLI_EXPERIMENTAL: enabled IMAGE_NAME: decred/dcrdex jobs: @@ -14,22 +13,22 @@ jobs: runs-on: ubuntu-22.04 steps: - - name: Checkout code - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c #v3.3.0 - - - name: Set up Docker Buildx - run: | - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker buildx create --use --name mybuilder - docker buildx inspect --bootstrap - - name: Log in to Docker - run: | - docker login -u ${{ env.DOCKER_USERNAME }} -p ${{ env.DOCKER_PASSWORD }} - - name: Build and Push Docker Image - run: | - docker buildx build -f client/Dockerfile --platform linux/arm64,linux/amd64 \ - --tag ${{ env.IMAGE_NAME }}:${{ github.ref_name }} \ - --output "type=registry" . - env: - DOCKER_USERNAME: ${{ env.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ env.DOCKER_PASSWORD }} + - name: Login to Docker Hub + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: Checkout project + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c #v3.3.0 + + - name: Set up QEMU + uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 #v2.1.0 + + - name: Setup Docker buildx action + uses: docker/setup-buildx-action@f03ac48505955848960e80bbb68046aa35c7b9e7 #v2.4.1 + + - name: Build and Push Docker Image + run: | + docker buildx build \ + -f client/Dockerfile.release \ + --platform linux/arm64,linux/amd64 \ + --tag ${{ env.IMAGE_NAME }}:${{ github.ref_name }} \ + --output "type=registry" . diff --git a/client/Dockerfile.release b/client/Dockerfile.release new file mode 100644 index 0000000000..6e237f0ed7 --- /dev/null +++ b/client/Dockerfile.release @@ -0,0 +1,34 @@ +# +# Build a release Docker image +# This file is used to build production images off of a release-vx.x branch +# where the site build is checked in. (This allows for faster image builds.) +# +# $ docker build -t user/dcrdex -f client/Dockerfile.release . +# +# Create docker volume to store client data +# $ docker volume create --name=dcrdex_data +# +# Run the docker image, mapping web access port. +# $ docker run -d --rm -p 127.0.0.1:5758:5758 -v dcrdex_data:/dex/.dexc user/dcrdex +# + +# dexc binary build +FROM golang:1.20-alpine AS gobuilder +WORKDIR /root/dex +COPY . . +WORKDIR /root/dex/client/cmd/dexc/ +RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build +WORKDIR /root/dex/client/cmd/dexcctl/ +RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build + +# Final image +FROM debian:buster-slim +RUN apt-get update && apt-get install -y ca-certificates +WORKDIR /dex +ENV HOME /dex +RUN mkdir -p /dex/.dexc && chown 1000 /dex/.dexc +USER 1000 +COPY --from=gobuilder /root/dex/client/cmd/dexc/dexc ./ +COPY --from=gobuilder /root/dex/client/cmd/dexcctl/dexcctl ./ +EXPOSE 5758 +CMD [ "./dexc", "--webaddr=0.0.0.0:5758" ]