Bird
Raised Fist0
Dockerdevops~5 mins

GitLab CI with Docker - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is GitLab CI?
GitLab CI is a tool built into GitLab that helps automate testing, building, and deploying your code using pipelines.
Click to reveal answer
beginner
Why use Docker in GitLab CI pipelines?
Docker lets you run your code in containers, which are like small, consistent environments. This makes sure your code runs the same way everywhere.
Click to reveal answer
beginner
What is a .gitlab-ci.yml file?
It is a file in your project that tells GitLab CI what steps to run, like building or testing your code, and how to run them.
Click to reveal answer
beginner
How do you specify a Docker image in GitLab CI?
You add 'image: ' at the top of your .gitlab-ci.yml file to tell GitLab which Docker image to use for running jobs.
Click to reveal answer
intermediate
What is the purpose of the 'services' keyword in GitLab CI with Docker?
The 'services' keyword lets you run extra Docker containers alongside your job, like a database, so your tests can use them.
Click to reveal answer
In GitLab CI, how do you tell the pipeline to use a specific Docker image?
ABy setting environment variables in GitLab UI
BBy running 'docker run' command in the terminal
CBy installing Docker manually on the runner
DBy adding 'image: <image-name>' in .gitlab-ci.yml
What does the 'services' keyword do in a GitLab CI pipeline?
AStarts the GitLab server
BDefines the main Docker image for the job
CRuns additional Docker containers alongside the job
DUploads artifacts after the job finishes
Which file controls the steps and Docker images used in GitLab CI?
A.gitlab-ci.yml
BDockerfile
CREADME.md
Dconfig.yml
Why is Docker useful in CI pipelines?
AIt creates consistent environments for running code
BIt speeds up internet connection
CIt replaces GitLab entirely
DIt stores code backups
What happens if you don't specify a Docker image in GitLab CI?
ADocker will not be installed
BGitLab uses a default image or the runner's environment
CThe pipeline will fail immediately
DThe job will run on your local machine
Explain how to set up a simple GitLab CI pipeline that uses Docker to run tests.
Think about the file, image, jobs, and running commands.
You got /5 concepts.
    Describe the role of Docker containers in GitLab CI pipelines and why they are helpful.
    Focus on environment consistency and isolation.
    You got /5 concepts.

      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