photoprism/docker
2022-01-27 09:48:21 +01:00
..
ddns Docker: Add DynDNS client for DigitalOcean 2022-01-08 17:53:51 +01:00
demo Frontend: Refactor asset loading #1648 2022-01-18 12:26:33 +01:00
develop OIDC: Add Traefik, Keycloak and Rename Development Base Image #782 2022-01-06 11:31:37 +01:00
dummy Docs: Update URL 2021-12-12 20:14:07 +01:00
examples Docker: Improve docker-compose.yml examples and docs 2022-01-27 09:48:21 +01:00
goproxy CI: Add Dockerfile for 32-bit ARMv7 image with "-armv7" suffix 2021-12-10 12:27:35 +01:00
photoprism Develop: Upgrade Docker base image 2022-01-16 14:25:49 +01:00
scripts Docker: Upgrade Go from v1.17.5 to v1.17.6 2022-01-16 13:48:39 +01:00
tensorflow Docs: Update URL 2021-12-12 20:14:07 +01:00
README.md Docker: Update README.md 2022-01-17 18:02:42 +01:00

Dockerfiles and Docker Compose Examples

Dockerfiles are text documents that contain all commands a user could call in a terminal to assemble an application image.

Docker Compose uses human-friendly YAML files to configure all application services so you can easily start them with a single command.

Why are we using Docker?

Containers are nothing new; Solaris Zones have been around for about 15 years, first released publicly in 2004. The chroot system call was introduced during development of Version 7 Unix in 1979. It is used ever since for hosting applications exposed to the public Internet.

Modern Linux containers are an incremental improvement. A main advantage of Docker is that application images can be easily made available to users via Internet. It provides a common standard across most operating systems and devices, which saves our team a lot of time that we can then spend more effectively, for example, providing support and developing one of the many features that users are waiting for.

Human-readable and versioned Dockerfiles as part of our public source code also help avoid "works for me" moments and other unwelcome surprises by enabling us to have the exact same environment everywhere in development and production.

Last but not least, virtually all file format parsers have vulnerabilities that just haven't been discovered yet. This is a known risk that can affect you even if your computer is not directly connected to the Internet. Running apps in a container with limited host access is an easy way to improve security without compromising performance and usability.

What about Virtual Machines?

A virtual machine running its own operating system provides more security, but typically has side effects such as lower performance and more difficult handling. You can also run Docker in a VM to get the best of both worlds. It's essentially what happens when you run dockerized applications on virtual cloud servers and operating systems other than Linux.

Alternatives

Building From Source

You can build and install PhotoPrism from the publicly available source code:

git clone https://github.com/photoprism/photoprism.git
cd photoprism
make all install

Missing build dependencies must be installed manually as shown in our human-readable and versioned Dockerfile. You often don't need to use the exact same versions, so it's possible to replace packages with what is available in your environment.

Please note that we do not have the resources to provide private users with dependencies and TensorFlow libraries for their personal environments. We recommend giving Docker a try if you use Linux as it saves developers a lot of time when building, testing, and deploying complex applications like PhotoPrism. It also effectively helps avoid "works for me" moments and missing dependencies.

Installation Packages

Developers are invited to contribute by building and testing standalone packages for Linux distributions and other operating systems. New versions are released several times a month, so maintaining and testing the long list of dependencies in multiple environments would consume much of our resources.

BSD Ports 😈

An unofficial port is available for FreeBSD / FreeNAS users.