Skip to content

k911/docker-client

Repository files navigation

Docker image with Docker client empowered

This image is used to build other docker images on GitLab. It has additional tools like docker/buildx or awslabs/amazon-ecr-credential-helper

Building

Docker-compose

docker-compose build --pull

Docker only

DOCKER_VERSION="20.10.5"
DOCKER_BUILDX_VERSION="0.5.1"
DOCKER_AWS_ECR_CREDENTIAL_HELPER_VERSION="0.5.0"
docker build --pull --build-arg "DOCKER_VERSION=$DOCKER_VERSION" \
    --build-arg "DOCKER_BUILDX_VERSION=$DOCKER_BUILDX_VERSION" \
    --build-arg "DOCKER_AWS_ECR_CREDENTIAL_HELPER_VERSION=$DOCKER_AWS_ECR_CREDENTIAL_HELPER_VERSION" \
    --tag "registry.gitlab.com/swoole-bundle/docker-client:$DOCKER_VERSION" .

docker run --rm -ti -v "/var/run/docker.sock:/var/run/docker.sock" "registry.gitlab.com/swoole-bundle/docker-client:$DOCKER_VERSION" info

docker push registry.gitlab.com/swoole-bundle/docker-client

GitLab Examples

Running build commands using docker/buildx

build-docker-image:
  stage: build
  image: registry.gitlab.com/swoole-bundle/docker-client:latest
  variables:
    DOCKER_TLS_CERTDIR: /certs
    DOCKER_BUILDX_CONTEXT_CREATE: "1"
    DOCKER_BUILDX_BUILDER_CREATE: "1"
  services:
    - docker:19.03.5-dind
  before_script:
    - docker-use-buildx
  script:
    - >-
        docker build
        --tag "$IMAGE_NAME:$IMAGE_TAG"
        --cache-from "type=registry,ref=$IMAGE_NAME"
        --cache-to "type=registry,ref=$IMAGE_NAME,mode=max"
        --output "type=registry" .

Authorize AWS ECR

build-docker-image:
  stage: build
  image: registry.gitlab.com/swoole-bundle/docker-client:latest
  variables:
    DOCKER_TLS_CERTDIR: /certs
    AWS_ACCOUNT_ID: xxxxx
    AWS_DEFAULT_REGION: xxxxx
    AWS_ACCESS_KEY_ID: xxxxx
    AWS_SECRET_ACCESS_KEY: xxxxx
  services:
    - docker:20.10.5-dind
  before_script:
    - aws-ecr-login
  script:
    - docker build --tag "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_NAME:$IMAGE_TAG" .
    - docker push "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_NAME:$IMAGE_TAG" .

Authorize GitLab Registry

build-docker-image:
  stage: build
  image: registry.gitlab.com/swoole-bundle/docker-client:latest
  variables:
    DOCKER_TLS_CERTDIR: /certs
  services:
    - docker:20.10.5-dind
  before_script:
    - gitlab-docker-registry-login
  script:
    - docker build --tag "$CI_REGISTRY_IMAGE:$IMAGE_TAG" .
    - docker push "$CI_REGISTRY_IMAGE:$IMAGE_TAG" .

Local Examples using Docker-compose

Exposed local daemon via unix socket

# Build
docker-compose build --pull

# Use
docker-compose run --rm local docker ps

# or
docker-compose run --rm local sh

cd workspace/nginx
./build-and-run.sh
# ...
# <b>Hello Docker!</b>

Docker in Docker (dind)

# Start docker daemon in docker (dind)
docker-compose up -d dind

# Build
docker-compose build --pull

# Start
docker-compose run --rm remote docker ps

# or
docker-compose run --rm remote sh

cd workspace/nginx
./build-and-run.sh
# ...
# <b>Hello Docker!</b>

Docker in Docker (dind) with buildx

# Start docker daemon in docker (dind)
docker-compose up -d dind

# Build
docker-compose build --pull

# Start
docker-compose run --rm remote sh

docker-use-buildx
cd workspace/nginx
./buildx-and-run.sh
# ...
# <b>Hello Docker!</b>

Clean-up

docker-compose down -v