====== Pi-Hole - Setup Pi-Hole running in Docker and Portainer ====== ===== Install Docker ===== curl -ssl https://get.docker.com | sh ---- ===== Install Portainer ===== This is always one of the first container to pull and run, because like me you are lazy and cannot remember more than 2 lines of code. ==== Create a volume to host Portainer data ==== docker volume create portainer_data returns portainer_data ---- ==== Install the Portainer Docker Image ==== docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --restart always portainer/portainer **NOTE:** This will run the container to pull, install and ensure it is always running. ---- ===== Check that Portainer is running ===== docker ps ---- ===== Configure Portainer ===== Navigate to http://yourdeviceip:9000. Portainer will prompt you to set up a new password for your admin user. {{:pi-hole:portainer_-_initial_login_admin_user_creation.png?800|}} ---- ===== Connect Portainer to Docker ===== Click **Local** and **Connect**. {{:pi-hole:portainer_-_connect_portainer_to_docker.png?800|}} **NOTE:** If using a remote Docker then select the appropriate **Remote** option. ---- ===== Select the local docker ===== Select your local docker: {{:pi-hole:portainer_-_local.png?800|}} ---- =====Install Pi-hole as a new container ===== ==== Add Container ==== Navigate to **Containers**. Click **Add Container**. {{:pi-hole:portainer_-_containers.png?800|}} ---- ==== Create Container ==== * Name: **PiHole**. * image: **pihole/pihole:latest**. * Publish all exposed network ports to random host ports: **Disabled**. Do not publish all exposed ports. Manually do it: * **53:53/tcp**. * **53:53/udp**. * **67:67/udp**. * **80:80/tcp** * **443:443/tcp** {{:pi-hole:portainer_-_create_container_-_pihole.png?800|}} ---- ==== Map some volumes ==== In **Advanced container settings**: * Click on the **Volumes** tab. * Click **map additional volume**. * Container: * **/etc/dnsmasq.d**. * **Bind**. * Host: * **/home/peter/pihole/dnsmasq.d**. * **Bind**. * Click **map additional volume**. * Container: * **/etc/pihole**. * **Bind**. * Host: * **/home/peter/pihole/pihole**. * **Bind**. **NOTE:** Bind mounts are used rather than standard volumes since that allows the location to the folder to be mapped instead of creating a volume in the Docker volumes folder. The /home/peter/pihole/ directory will be automatically created. {{:pi-hole:portainer_-_create_container_-_pihole_-_advanced_container_settings_-_volumes.png?800|}} ---- ==== Set up the network ==== This also sets the DNS the image should use. In **Advanced container settings**: * Click on the **Network** tab. * Network: **bridge**. * Hostname: **pihole**. * Primary DNS Server: **127.0.0.1**. * Secondary DNS Server: **192.168.1.1**. **NOTE:** As of version 4.1.1 of Pi-Hole, the DNS server for the Docker container itself, localhost (127.0.0.1), must be set as the primary DNS server. The secondary DNS server can be any other DNS server you prefer. {{:pi-hole:portainer_-_create_container_-_pihole_-_advanced_container_settings_-_network.png?800|}} ---- ==== Set the Environment ==== Ensures that Pi-hole starts automatically. In **Advanced container settings**: * Click on the **Env** tab. * Click **Add environment variable**. * Name: **TZ** * Value: **Europe/Jersey**. * Click **Add environment variable**. * Name: **DNS1** * Value: **192.168.1.1**. * Click **Add environment variable**. * Name: **DNS2** * Value: **1.1.1.1**. * Click **Add environment variable**. * Name: **WEBPASSWORD** * Value: **Password to use with Pi-Hole**. **NOTE:** Pi-hole will default to Google DNS Servers of 8.8.8.8 and 8.8.4.4 if the **DNS1** or **DNS2** environment variables are not set. If only 1 upstream DNS server is wanted, put **no** as the value for the **DNS2** variable, otherwise it will default to Google secondary DNS server 8.8.4.4. It is recommended to have two upstream DNS servers in case one goes down. {{:pi-hole:portainer_-_create_container_-_pihole_-_advanced_container_settings_-_env.png?800|}} ---- ==== Set the Restart Policy ==== Ensures that Pi-hole starts automatically. In **Advanced container settings**: * Click on the **Restart Policy** tab. * Click **Unless Stopped**. {{:pi-hole:portainer_-_create_container_-_pihole_-_advanced_container_settings_-_restart_policy.png?800|}} ---- ==== Deploy the Container ==== Click **Deploy the Container**.