Bird
Raised Fist0
Dockerdevops~20 mins

GitLab CI with Docker - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
GitLab CI Docker Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
GitLab CI Runner Docker Image Output
What is the output of the following command when run inside a GitLab CI job using the official Docker image docker:latest?
Docker
docker --version
ADocker version 20.10.23, build 7155243
BError: Cannot connect to the Docker daemon
CDocker version 18.09.1, build 4c52b90
Dbash: docker: command not found
Attempts:
2 left
💡 Hint
The official Docker image used in GitLab CI jobs includes the Docker CLI by default.
❓ Configuration
intermediate
2:00remaining
Correct Docker-in-Docker Service Configuration
Which GitLab CI configuration snippet correctly enables Docker-in-Docker (DinD) service for building Docker images inside a job?
A
services:
  - docker:dind
variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_TLS_CERTDIR: ""
B
services:
  - docker:latest
variables:
  DOCKER_HOST: unix:///var/run/docker.sock
C
services:
  - docker:dind
variables:
  DOCKER_HOST: unix:///var/run/docker.sock
D
services:
  - docker:dind
variables:
  DOCKER_HOST: tcp://localhost:2375
  DOCKER_TLS_CERTDIR: ""
Attempts:
2 left
💡 Hint
DinD requires connecting to the Docker daemon over TCP and disabling TLS cert directory.
🔀 Workflow
advanced
3:00remaining
Order of Steps to Build and Push Docker Image in GitLab CI
Arrange the following steps in the correct order to build and push a Docker image using GitLab CI with Docker-in-Docker service.
A1,2,4,3
B1,4,2,3
C4,2,1,3
D4,1,2,3
Attempts:
2 left
💡 Hint
You must prepare the environment before logging in and building images.
❓ Troubleshoot
advanced
2:00remaining
Diagnosing Docker Push Failure in GitLab CI
A GitLab CI job using Docker-in-Docker fails with the error: denied: requested access to the resource is denied when pushing an image. What is the most likely cause?
ADocker image build failed before push
BDocker-in-Docker service is not started
CDocker registry login credentials are missing or incorrect
DGitLab runner does not have network access
Attempts:
2 left
💡 Hint
Access denied errors usually relate to authentication.
✅ Best Practice
expert
3:00remaining
Best Practice for Secure Docker-in-Docker Usage in GitLab CI
Which practice is recommended to securely use Docker-in-Docker in GitLab CI pipelines?
ADisable TLS and use plain TCP connection for simplicity
BRun DinD service with TLS enabled and use certificates for authentication
CUse Docker socket binding from host to avoid DinD service
DRun Docker commands directly on the GitLab runner host
Attempts:
2 left
💡 Hint
Security is important when exposing Docker daemon.

Practice

(1/5)
1. What is the main purpose of using docker:dind service in a GitLab CI pipeline?
easy
A. To send notifications after the pipeline finishes
B. To deploy the application to production automatically
C. To run Docker commands inside the CI job container
D. To store build artifacts permanently

Solution

  1. Step 1: Understand the role of docker:dind

    The docker:dind (Docker-in-Docker) service allows Docker commands to run inside a container, which is essential for building and managing Docker images during CI jobs.
  2. Step 2: Identify the purpose in GitLab CI context

    In GitLab CI, using docker:dind lets the pipeline build, run, and push Docker images isolated from the host system.
  3. Final Answer:

    To run Docker commands inside the CI job container -> Option C
  4. Quick Check:

    docker:dind = run Docker commands in CI [OK]
Hint: Remember: dind means Docker runs inside Docker [OK]
Common Mistakes:
  • Confusing dind with deployment step
  • Thinking dind stores artifacts
  • Assuming dind sends notifications
2. Which of the following is the correct way to specify the Docker service in a GitLab CI job to enable Docker commands?
easy
A. services: - docker:dind
B. services: - docker:latest
C. services: - docker:build
D. services: - docker:run

Solution

  1. Step 1: Recall the correct service name for Docker-in-Docker

    The official Docker-in-Docker service image is docker:dind, which must be specified exactly to enable Docker commands in GitLab CI.
  2. Step 2: Compare options to find exact match

    Only services: - docker:dind uses the correct service name docker:dind. Other options are invalid or do not exist as official images.
  3. Final Answer:

    services: - docker:dind -> Option A
  4. Quick Check:

    Correct service name = docker:dind [OK]
Hint: Use exact service name 'docker:dind' for Docker commands [OK]
Common Mistakes:
  • Using 'docker:latest' instead of 'docker:dind'
  • Adding extra tags like 'build' or 'run'
  • Omitting the services section
3. Given this GitLab CI job snippet, what will be the output of the docker ps command inside the job?
job:
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker info
    - docker ps
medium
A. Shows an error: Docker daemon not running
B. Lists running containers inside the dind service (likely empty)
C. Lists containers on the host machine
D. Outputs the Docker version only

Solution

  1. Step 1: Understand the environment of the job

    The job uses docker:dind service, which runs a Docker daemon inside the CI environment. The docker ps command connects to this daemon.
  2. Step 2: Predict the output of docker ps

    Since the job just started and no containers were run inside the dind daemon, docker ps will list running containers inside the dind environment, which is likely empty.
  3. Final Answer:

    Lists running containers inside the dind service (likely empty) -> Option B
  4. Quick Check:

    docker ps inside dind = running containers (empty if none) [OK]
Hint: docker ps shows containers inside dind, not host [OK]
Common Mistakes:
  • Expecting error about Docker daemon
  • Thinking it lists host machine containers
  • Confusing docker info output with docker ps
4. You have this GitLab CI job configuration:
build:
  image: docker:latest
  script:
    - docker build -t myapp .
  services:
    - docker:dind
The job fails with error: Cannot connect to the Docker daemon. What is the most likely fix?
medium
A. Add variables: DOCKER_HOST: tcp://docker:2375 to the job
B. Change image to docker:dind
C. Remove the services section
D. Add docker login before build

Solution

  1. Step 1: Identify cause of Docker daemon connection error

    The error means the Docker client inside the job cannot reach the Docker daemon running in the docker:dind service container.
  2. Step 2: Fix connection by setting DOCKER_HOST variable

    Setting DOCKER_HOST: tcp://docker:2375 tells the Docker client to connect to the dind service over TCP, enabling communication.
  3. Final Answer:

    Add variables: DOCKER_HOST: tcp://docker:2375 to the job -> Option A
  4. Quick Check:

    Set DOCKER_HOST to connect client to dind daemon [OK]
Hint: Set DOCKER_HOST to tcp://docker:2375 to fix connection [OK]
Common Mistakes:
  • Changing image to docker:dind instead of using service
  • Removing services section disables Docker daemon
  • Adding docker login does not fix daemon connection
5. You want to build a Docker image and push it to GitLab Container Registry in a GitLab CI job. Which snippet correctly sets up the job with Docker-in-Docker and pushes the image?
build_and_push:
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:latest
hard
A. No docker login command before push
B. Missing DOCKER_HOST variable, so Docker commands fail
C. Uses docker:dind as image instead of service
D. Correct setup with variables and login before build and push

Solution

  1. Step 1: Check Docker-in-Docker setup

    The job uses docker:dind as a service and sets DOCKER_HOST and disables TLS cert dir, which is required for Docker commands to connect properly.
  2. Step 2: Verify login and push steps

    The job logs into the GitLab Container Registry using CI variables, then builds and pushes the image with correct tags.
  3. Final Answer:

    Correct setup with variables and login before build and push -> Option D
  4. Quick Check:

    Proper dind setup + login + build + push = Correct setup with variables and login before build and push [OK]
Hint: Always login before push and set DOCKER_HOST for dind [OK]
Common Mistakes:
  • Forgetting DOCKER_HOST causes connection errors
  • Using docker:dind as image instead of service
  • Skipping docker login before push
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard