danielrosehill's picture
commit
279efce

Check and Setup Docker

You are helping the user check if Docker is configured and set it up if needed.

Your tasks:

  1. Check if Docker is already installed:

    • Check Docker: docker --version
    • Check Docker Compose: docker-compose --version or docker compose version
    • Check Docker service: systemctl status docker
  2. If Docker is installed, verify configuration:

    • Check Docker info: docker info
    • Check user can run Docker: docker ps
    • If permission denied, user needs to be added to docker group
    • Check Docker storage driver and location
    • Check Docker network configuration
  3. If Docker is NOT installed, proceed with installation:

    Remove old versions:

    sudo apt-get remove docker docker-engine docker.io containerd runc
    

    Update and install prerequisites:

    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg lsb-release
    

    Add Docker's official GPG key:

    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    

    Set up repository:

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

    Install Docker Engine:

    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. Post-installation setup:

    Enable Docker service:

    sudo systemctl enable docker
    sudo systemctl start docker
    

    Add user to docker group:

    sudo usermod -aG docker $USER
    

    Then log out and back in, or run: newgrp docker

  5. Verify Docker installation:

    docker --version
    docker run hello-world
    docker ps
    docker images
    
  6. Install Docker Compose (if not included): Modern Docker includes Compose v2 as a plugin. Check: docker compose version

    If needed, install standalone:

    sudo apt-get install docker-compose-plugin
    
  7. Configure Docker daemon (optional): Edit /etc/docker/daemon.json:

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      },
      "storage-driver": "overlay2",
      "dns": ["8.8.8.8", "8.8.4.4"]
    }
    

    Then restart: sudo systemctl restart docker

  8. Check Docker storage location:

    docker info | grep "Docker Root Dir"
    sudo du -sh /var/lib/docker
    

    If storage is on a small partition, consider changing location.

  9. Configure storage location (if needed): In /etc/docker/daemon.json:

    {
      "data-root": "/new/path/to/docker"
    }
    

    Then:

    sudo systemctl stop docker
    sudo mv /var/lib/docker /new/path/to/docker
    sudo systemctl start docker
    
  10. Set up Docker networking: Check networks:

    docker network ls
    

    Create custom networks if needed:

    docker network create my-network
    
  11. Configure resource limits (optional): For laptops/desktops, may want to limit resources: In /etc/docker/daemon.json:

    {
      "default-ulimits": {
        "nofile": {
          "Name": "nofile",
          "Hard": 64000,
          "Soft": 64000
        }
      }
    }
    
  12. Set up Docker Hub authentication (optional):

    docker login
    
  13. Test Docker functionality: Run various test commands:

    docker run hello-world
    docker run -it ubuntu bash
    docker ps -a
    docker images
    docker system info
    
  14. Install useful Docker tools (optional): Ask user if they want:

    • Portainer (Docker management UI)
    • ctop (Container monitoring)
    • lazydocker (Terminal UI for Docker)
    # ctop
    sudo wget -O /usr/local/bin/ctop https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64
    sudo chmod +x /usr/local/bin/ctop
    
  15. Configure Docker logging: Check current logging:

    docker info | grep "Logging Driver"
    

    Configure in /etc/docker/daemon.json:

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "5",
        "labels": "production"
      }
    }
    
  16. Set up Docker cleanup: Suggest adding to crontab:

    # Clean up unused containers, images, networks weekly
    0 3 * * 0 docker system prune -af --volumes
    

    Or show manual cleanup:

    docker system prune -a
    docker volume prune
    docker network prune
    
  17. Check for common issues:

    • Docker daemon not running: sudo systemctl start docker
    • Permission denied: sudo usermod -aG docker $USER and re-login
    • Storage full: docker system df and cleanup
    • Network issues: Check DNS in daemon.json
    • Firewall blocking: Check ufw/iptables
  18. Provide best practices:

    • Don't run containers as root when possible
    • Use Docker Compose for multi-container apps
    • Tag images properly
    • Clean up regularly with docker system prune
    • Use .dockerignore files
    • Monitor disk usage: docker system df
    • Use specific image tags, not latest
    • Scan images for vulnerabilities: docker scan <image>
    • Keep Docker updated
    • Use multi-stage builds to reduce image size
    • Limit container resources in production
  19. Show basic Docker commands:

    • docker run <image> - Run a container
    • docker ps - List running containers
    • docker ps -a - List all containers
    • docker images - List images
    • docker pull <image> - Pull an image
    • docker build -t <name> . - Build an image
    • docker exec -it <container> bash - Enter container
    • docker logs <container> - View logs
    • docker stop <container> - Stop container
    • docker rm <container> - Remove container
    • docker rmi <image> - Remove image
    • docker compose up - Start compose stack
    • docker system prune - Clean up
  20. Report findings: Summarize:

    • Docker installation status
    • Version information
    • User permissions status
    • Storage configuration
    • Service status
    • Any issues found

Important notes:

  • User must log out and back in after being added to docker group
  • Docker can use significant disk space - monitor it
  • Don't run untrusted images
  • Docker Desktop is different from Docker Engine (we're installing Engine)
  • Rootless Docker is available for better security but more complex
  • Docker Compose v2 is now a plugin (docker compose not docker-compose)
  • Keep Docker updated for security patches