Posted: 16.06.2015
Edited: 30.06.2015 (“Test custom configurations” part is now little bit simpler)
I wanted to test MunkiReport and MySQL in non-production environment and didn’t want to install MySQL on my host machine. I’ve tested Docker couple of times before but never really “needed” it for Mac admin related tasks, except now. Here are few (not very verbose) notes about how MunkiReport test environment was built using Docker.
Requirements
Docker images @ Docker Hub
Launch Terminal and run boot2docker VM:
$ boot2docker up
Set environment variables:
$ eval "$(boot2docker shellinit)"
Get the latest MySQL Docker image:
$ docker pull mysql
Get the latest MunkiReport Docker image:
$ docker pull hunty1/munkireport-docker
Run MySQL container (db) & create a database for MunkiReport:
$ docker run --name db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=munkireport -e MYSQL_USER=admin -e MYSQL_PASSWORD=admin -d mysql
Run MunkiReport (mr) container and connect it to db container. Change environment variables (if needed):
$ docker run -p 80:80 --name mr -e DB_NAME=munkireport -e DB_USER=admin -e DB_PASS=admin -e DB_SERVER=$(boot2docker ip) -e MR_SITENAME="docker.local" --link db:mysql -d hunty1/munkireport-docker
Check that the both containers are running properly:
$ docker ps
Output example:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fd969c1c6ad hunty1/munkireport-docker:latest "/start.sh" 10 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp, 443/tcp mr
c22da21049c0 mysql:latest "/entrypoint.sh mysq 31 seconds ago Up 28 seconds 0.0.0.0:3306->3306/tcp db
Get boot2docker IP address:
$ boot2docker ip
This IP address will be used in the rest of the examples.
192.168.59.103
Go to http://192.168.59.103 and login with these credentials:
Username: root
Password: root
If everything went ok, you should see MunkiReport GUI with zero machines.
Note! You need Munki and MunkiReport installed on your host computer for this part.
Change MunkiReport BaseUrl
on the host computer (notice the trailing slash!):
$ sudo defaults write /Library/Preferences/MunkiReport.plist BaseUrl http://$(boot2docker ip)/
Run managedsoftwareupdate:
$ sudo /usr/local/munki/managedsoftwareupdate
Refresh MunkiReport web GUI and check your host computer info.
It’s nice to have MunkiReport up and running but it’s quite useless if there’s no data to view. Run mysqldump on your production server and copy the MySQL database file to your Desktop:
$ cp path/to/<my-db>.sql ~/Desktop/
Run separate MySQL client container and destroy it after database import:
$ docker run -it --link=db:mysql -v ~/Desktop:/tmp/ --rm mysql sh -c 'exec mysql -h192.168.59.103 -P3306 -uroot -proot munkireport < /tmp/<my-db>.sql'
Ignore the warning message:
Warning: Using a password on the command line interface can be insecure.
Connect to the database using Sequel Pro:
Or connect directly to the MySQL container and use mysql
command line tool.
$ docker exec -it db bash
mysql
Copy the munkireport
folder from MunkiReport container to your Desktop:
$ docker cp mr:/www/munkireport/ ~/Desktop/
Stop & delete current MunkiReport container:
$ docker stop mr
$ docker rm -f mr
Run MunkiReport container again and mount host volume ~/Desktop/munkireport
as a data volume. Change environment variables once again (if needed):
$ docker run -p 80:80 --name mr --link db:mysql -v ~/Desktop/munkireport:/www/munkireport -e DB_NAME=munkireport -e DB_USER=admin -e DB_PASS=admin -e DB_SERVER=$(boot2docker ip) -e MR_SITENAME="docker.local" -d hunty1/munkireport-docker
Edit files in ~/Desktop/munkireport
folder:
Refresh MunkiReport web GUI and login again: http://192.168.59.103/
Stop MunkiReport and MySQL containers:
$ docker stop mr db
Delete all Docker containers:
$ docker rm $(docker ps -a -q)
Shutdown boot2docker VM:
$ boot2docker down
Change MunkiReport BaseUrl
back to the original one:
$ sudo defaults write /Library/Preferences/MunkiReport.plist BaseUrl http://your_munki_repo/
Check out Calum Hunter’s GitHub page for more info if you want to tinker with MunkiReport container settings.