--- navigation: true title: Docker main: fluid: false --- :ellipsis{left=0px width=40rem top=10rem blur=140px} # Docker Docker, to install deployable services in seconds and manage them with just a few commands or clicks. ::alert{type="info"} 🎯 __Goals:__ - Install [Docker](https://www.docker.com/) - Install [Dockge](https://github.com/louislam/dockge) to manage stacks - Install [Watchtower](https://github.com/containrrr/watchtower) to update containers :: ![picture](/img/serveex/docker.svg) ## Install Docker --- Add the Docker repositories and GPG key: ```shell # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update ``` Install the packages: ```shell sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` That's it! **More options:** [Install Docker for Debian 12](https://docs.docker.com/engine/install/debian/) ::alert{type="info" icon="exclamation-circle"} :::list{type="info"} - From here on, we assume the stacks are installed in the `/docker` folder, created using the command: ::: ```shell sudo mkdir /docker :: ## Install [Dockge](https://github.com/louislam/dockge) to manage and deploy containers --- [Dockge](https://github.com/louislam/dockge) is a web tool to create, configure, launch, and manage Docker containers. It's a simple, intuitive interface that’s lighter and easier for beginners than using the CLI or Portainer. ![picture](/img/serveex/dockge.png) ### Configuration File structure we will create: ```console root └── docker └── dockge └── compose.yml ``` Create the stack folder: ```shell cd /docker sudo mkdir dockge ``` Then create the `compose.yml` file in this folder using `vim`: ```shell cd /docker/dockge sudo vi compose.yml ``` Press `i` to enter insert mode and paste the following: ```yaml --- services: dockge: image: louislam/dockge:1 restart: unless-stopped container_name: dockge ports: - 3555:5001 # LAN-accessible port will be 3555 volumes: - /var/run/docker.sock:/var/run/docker.sock - /docker/dockge/data:/app/data - /docker:/docker environment: - DOCKGE_STACKS_DIR=/docker ``` Press `Esc` and type `:x` to save and exit. To launch the container: ```shell cd /docker/dockge sudo docker compose up -d ``` Then go to `http://yourserverip:3555` in your browser to access the login page. More info on [Dockge and how to use it](https://github.com/louislam/dockge) And there you go — Docker and a tool to easily manage your containers are ready! ## [Watchtower](https://github.com/containrrr/watchtower?tab=readme-ov-file), to auto-update containers --- Watchtower is a container that checks for updates and pulls new images automatically, just by adding a label in your containers’ `compose.yml` files. ### Configuration - Open Dockge in your browser - Click `compose` - Name the stack `watchtower` - Paste the config below into the default config area in Dockge ```yaml --- services: watchtower: container_name: watchtower image: containrrr/watchtower:latest restart: unless-stopped env_file: - .env environment: - TZ=Europe/Paris - WATCHTOWER_SCHEDULE=${SCHEDULE} - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_CLEANUP=true - WATCHTOWER_REMOVE_VOLUMES=true # Discord notifications - uncomment if used #- WATCHTOWER_NOTIFICATIONS=slack #- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower #- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=${WH_URL} volumes: - /var/run/docker.sock:/var/run/docker.sock ``` Then fill in the `.env` section in Dockge with the following: ```properties SCHEDULE= WH_URL= ``` | Property | Value | Examples | |----------------|--------------------------------------------------------------------|----------------------------------------------| | `SCHEDULE` | Cron format | `0 0 6 * * *` (every day at 6 AM) | | `WH_URL` | Your Discord webhook URL - append `/slack` at the end | `https://yourdiscordserver/webhook/slack` | To have Watchtower monitor your other containers, add this to their `compose.yml`: ```yaml labels: - com.centurylinklabs.watchtower.enable=true ``` Then restart the modified stacks. And that's it — you now have a solid base to start deploying the services you want!