Builds Docker image to run phpIPAM container with persistent data.
A working Docker setup.
Spin up phpIPAM environment using the included docker-compose.yml
.
version: '2'
services:
db:
image: mrlesmithjr/mysql:latest
volumes:
- "db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: phpipam
MYSQL_DATABASE: phpipam
MYSQL_USER: phpipam
MYSQL_PASSWORD: phpipam
web:
depends_on:
- db
image: mrlesmithjr/docker-phpipam:latest
links:
- db
ports:
- "8000:80"
restart: always
environment:
MYSQL_DB_HOSTNAME: db
MYSQL_DB_USERNAME: phpipam
MYSQL_DB_PASSWORD: phpipam
MYSQL_DB_NAME: phpipam
MYSQL_DB_PORT: 3306
volumes:
db:
Spin up the environment with docker-compose up -d
Once complete if you run docker ps
you should see similar to below:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2446630340d9 mrlesmithjr/docker-phpipam:latest "apache2ctl -D FOREGR" 43 minutes ago Up 43 minutes 443/tcp, 0.0.0.0:8000->80/tcp dockerphpipam_web_1
1082d5b687b0 mrlesmithjr/mysql:latest "docker-entrypoint.sh" 3 hours ago Up 43 minutes 3306/tcp dockerphpipam_db_1
One thing that is left which still needs work is the phpIPAM DB schema but we can handle that with the below:
docker exec -it dockerphpipam_web_1 bash -c "mysql -u phpipam -p -h db phpipam < /var/www/html/db/SCHEMA.sql"
When prompted for password enter phpipam
and the DB will be populated.
Now open up your browser of choice and connect to http://127.0.0.1:8000 and
login with admin/ipamadmin
. And you will be prompted to change the default
password.
And you are now good to go to begin using phpIPAM.
I was not able to get cron jobs to run as desired however you can execute the following manually for example or schedule them to run from your Docker host.
Discover hosts
docker exec -it dockerphpipam_web_1 /usr/bin/php /var/www/html/functions/scripts/discoveryCheck.php
Resolve IP addresses
docker exec -it dockerphpipam_web_1 /usr/bin/php /var/www/html/functions/scripts/resolveIPaddresses.php
Ping check
docker exec -it dockerphpipam_web_1 /usr/bin/php /var/www/html/functions/scripts/pingCheck.php
If you spin this up using docker-compose
then you will have a persistent data
volume that gets created to ensure that your data remains. The data volume is
created as a name so it is easier to find and will always be mapped to the same
volume. By default this will be named as the project name_db. So for example:
dockerphpipam_db
.
You can view/inspect this volume by:
docker volume inspect dockerphpipam_db
[
{
"Name": "dockerphpipam_db",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/dockerphpipam_db/_data",
"Labels": null,
"Scope": "local"
}
]
And if you were to have spun this up previously when the data volume was ./.data
then you can easily migrate your existing data by doing the following (using above
example) in the project folder:
sudo su
sudo cp -r ./.data/db/. /var/lib/docker/volumes/dockerphpipam_db/_data
If you find yourself in need of backing up your DB data in order to migrate to another host or just to backup the data in general. You can do that as simple as below:
- Requirements
- Destination mountpoint to backup to
/backups
- Destination mountpoint to backup to
We will use the method of backing up using the --volumes-from
Docker volume
option. This process will spin up a temporary container, mount the
/var/lib/mysql
folder, and then back it all up to a tar.gz
file in our
/backups
folder.
docker run --rm --volumes-from dockerphpipam_db_1 \
-v /backups:/backup ubuntu tar cvzf /backup/dockerphpipam_db_1.backup.tar.gz \
/var/lib/mysql
And to validate that the backup exists:
ll /backups
total 550
drwxrwxrwx 2 root root 3 Aug 11 01:01 ./
drwxr-xr-x 24 root root 4096 Aug 11 00:47 ../
-rw-r--r-- 1 root root 811475 Aug 11 01:01 dockerphpipam_db_1.backup.tar.gz
Now you can copy/move that anywhere and extract it with all of your data intact.