====== 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**.