Jump to content

Docker Applications: Difference between revisions

From 太極
Brb (talk | contribs)
Brb (talk | contribs)
 
(5 intermediate revisions by the same user not shown)
Line 11: Line 11:
* [https://www.blackvoid.club/docker-top-10-images-and-solutions/ Docker top (18) images and solutions]
* [https://www.blackvoid.club/docker-top-10-images-and-solutions/ Docker top (18) images and solutions]
* [https://www.smarthomebeginner.com/best-docker-containers-for-home-server/ 60+ Best Docker Containers for Home Server Beginners 2023]
* [https://www.smarthomebeginner.com/best-docker-containers-for-home-server/ 60+ Best Docker Containers for Home Server Beginners 2023]
* 15 Best Docker Containers To Self-Host For A Powerful Setup
** [https://kasm.com/downloads Kasm Workspaces] (run full desktop sessions inside Docker containers), Plex/Jellyfin/Emby, Nextcloud, Pi-Hole/AdGuard Home, Home Assistant, Bitwarden, Ghost, Gitea, Dashy, Uptime Kuma, [https://github.com/YoRyan/mailrise Mailrise] (converts the emails it receives into [https://github.com/caronc/apprise Apprise] notifications), FreshRSS.


= Templates =
= Templates =
Line 231: Line 233:
== Immich ==
== Immich ==
* [https://github.com/immich-app/immich immich] - High performance self-hosted photo and video backup solution
* [https://github.com/immich-app/immich immich] - High performance self-hosted photo and video backup solution
* [https://immich.app/docs/overview/quick-start/ Quick Start]
** [https://immich.app/docs/overview/quick-start/ Quick Start]
** [https://docs.immich.app/FAQ FAQ]
** It does not delete photos/videos from local devices
 
* [https://www.makeuseof.com/raspberry-pi-immich-google-photos-alternative/ Immich Is a Great Google Photos Alternative You Can Host on Raspberry Pi]
* [https://www.makeuseof.com/raspberry-pi-immich-google-photos-alternative/ Immich Is a Great Google Photos Alternative You Can Host on Raspberry Pi]
* [https://missilepuppy.com/blog/2024/01/09/immich-finally-a-good-self-hosted-google-photos-replacement/ Immich – Finally, A Good Self-Hosted Google Photos Replacement]
* [https://linuxiac.com/how-to-install-immich-with-docker/ 9How to Install Immich with Docker: A Comprehensive Guide]
* [https://linuxiac.com/how-to-install-immich-with-docker/ 9How to Install Immich with Docker: A Comprehensive Guide]
* [https://pimylifeup.com/immich-docker/ Setting up Immich using Docker[
* [https://pimylifeup.com/immich-docker/ Setting up Immich using Docker]


== PhotoPrism ==
== PhotoPrism ==
Line 394: Line 398:


== File browser ==
== File browser ==
* https://filebrowser.org/installation/,  
<ul>
** https://github.com/filebrowser/filebrowser
<li>https://filebrowser.org/installation/,  
** Default credential: admin/admin
* https://github.com/filebrowser/filebrowser
* [https://youtu.be/30MYRgCObu8 Pi-Hosted : Installing JDownloader and File Browser On The Pi Docker Server Part 4] (video)
* Default credential: admin/admin
* It appears Filebrowser can only browse files in one directory from the same computer only. However, Filebrowser is not limited to browsing files in just one directory or from one computer only. While it is designed to operate from a specified "root" directory on the server where it is installed, it offers flexibility in how you configure access to multiple folders.
** '''Multiple Directories''': You can configure Filebrowser to access multiple directories by mapping several folders or disks as subdirectories within the main root directory you specify in your Docker (or other) setup.
** '''Remote Folders''': If you want to access files on other computers, you need to mount those remote folders (such as Samba shares) onto the local filesystem of the server running Filebrowser.
** '''Multiple Servers''': If you want to manage files on multiple servers, you need to run an instance of Filebrowser on each server. There is no built-in feature to aggregate multiple servers into a single Filebrowser interface, but you can access each server’s Filebrowser web interface individually.


The original image (filebrowser/filebrowser) does not work but linuxserver's image (filebrowser/filebrowser:s6) works fine.
<li>[https://youtu.be/30MYRgCObu8 Pi-Hosted : Installing JDownloader and File Browser On The Pi Docker Server Part 4] (video)
<li>It appears Filebrowser can only browse files in one directory from the same computer only.
<li>[https://www.bitdoze.com/deploy-filebrowser-docker/ Simplify File Management with Docker Filebrowser: Easy Setup Guide] still works in 2025.
* Note the username is "admin". The password was generated randomly and can be found using 'docker logs' command. We can modify the password after the first login.
<syntaxhighlight lang='sh'>
<syntaxhighlight lang='sh'>
$ touch filebrowser.db
$ touch filebrowser.db
$ cat settings.json
$ nano settings.json
{
{
   "port": 80,
   "port": 80,
Line 415: Line 418:
   "root": "/srv"
   "root": "/srv"
}
}
$ sudo chown 911:1001 filebrowser.db
$ mkdir project


#  Modify $FULL_PATH1 <- directory to share files
$ nano compose.yml
#      &  $FULL_PATH2  <- directory contains filebrowser.db & settings.json
services:
 
    filebrowser:
$ docker run \
        container_name: filebrowser
    --name filebrowser \
        volumes:
    -v $FULL_PATH1:/srv \
            - ./root:/srv
    -v $FULL_PATH2/filebrowser.db:/database/filebrowser.db \
            - ./filebrowser.db:/database/filebrowser.db
    -v $FULL_PATH2/settings.json:/config/settings.json \
            - ./settings.json:/config/settings.json
    -e PUID=$(id -u) \
        environment:
    -e PGID=$(id -g) \
            - PUID=$(id -u)
    -p 8080:80 \
            - PGID=$(id -g)
    filebrowser/filebrowser:s6
        ports:
            - 8088:80
        image: filebrowser/filebrowser:s6
$ docker compose up -d
$ docker logs -f filebrowser
...
User UID:    911
User GID:    1001
...
2025/11/29 21:27:44 Using config file: /config/settings.json
2025/11/29 21:27:44 WARNING: filebrowser.db can't be found. Initialing in /database/
2025/11/29 21:27:44 Using database: /database/filebrowser.db
2025/11/29 21:27:44 Performing quick setup
2025/11/29 21:27:44 User 'admin' initialized with randomly generated password: Mq12FFSReZ8EVzqW
2025/11/29 21:27:44 Listening on [::]:80
</syntaxhighlight>
</syntaxhighlight>


== Quantum ==
== FileBrowser Quantum ==
https://github.com/gtsteffaniak/filebrowser. It supports multiple sources!
https://github.com/gtsteffaniak/filebrowser. It supports multiple sources!


Line 619: Line 638:


== VS Code ==
== VS Code ==
* [https://github.com/coder/code-server code-server] VS Code in the browser. https://hub.docker.com/r/codercom/code-server
<ul>
* [https://www.reddit.com/r/docker/comments/waebx5/development_container_with_visual_studio_code_how/ Development container with Visual Studio code - how does it work?]
<li>[https://coder.com/ Coder] - Your Self-Hosted Remote Development Platform
* [https://coder.com/docs/v2/latest/quickstart/docker Coder] - Your Self-Hosted Remote Development Platform
* [https://github.com/coder/code-server code-server] (75.1k star) VS Code in the browser. https://hub.docker.com/r/codercom/code-server (100M+ pulls)
** Instruction step 1 is necessary
* docker image is 792MB
** Workspace - Template
* current directory is the project path
** After issuing docker run command, I need to go to the URL, create username/password. The username is for the app login purpose.
* access url http://ip:8080
** Add & Start the Template.
<pre>
** For the VS-code template, I can launch a Terminal and work on it (Same RAM as my machine, 6GB storage of Debian image).
docker run -d --name code-server -p 8080:8080 \
* [https://hub.docker.com/r/gitpod/openvscode-server OpenVSCode Server] 1M+ pulls. [https://github.com/coder/code-server/discussions/4267 Difference to OpenVSCode Server].
  -v "$HOME/.config:/home/coder/.config" \
  -v "$PWD:/home/coder/project" \
  -u "$(id -u):$(id -g)" \
  -e "DOCKER_USER=$USER" \
  -e PASSWORD="MySecretePassword" \
  codercom/code-server:latest
</pre>
<li>[https://hub.docker.com/r/gitpod/openvscode-server OpenVSCode Server] 1M+ pulls. [https://github.com/coder/code-server/discussions/4267 Difference to OpenVSCode Server].
* [https://docs.linuxserver.io/images/docker-openvscode-server/ linuxserver]
* docker image is 425MB
* ./config/workspace is the project path
* access url http://ip:3000
<pre>
services:
  openvscode-server:
    image: lscr.io/linuxserver/openvscode-server:latest
    container_name: openvscode-server
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
      - CONNECTION_TOKEN= #optional
      - CONNECTION_SECRET= #optional
      - SUDO_PASSWORD=password #optional
      - SUDO_PASSWORD_HASH= #optional
    volumes:
      - ./config:/config
    ports:
      - 3000:3000
    restart: unless-stopped
</pre>
</ul>


= Docker for R (r-base, rstudio) =
= Docker for R (r-base, rstudio) =

Latest revision as of 17:30, 29 November 2025

Homelab

Top/best

Templates

LXC != VM

  • When I try to run a seafile docker in LXC, I got an error.
    error during container init: open sysctl net.ipv4.ip_unprivileged_port_start file: reopen fd 8: permission denied
    

    Why it happens: The Seafile Caddy image tries to make itself able to bind to ports <1024 without root.

  • LXC vs full VM
    • LXC containers share the host kernel.
    • By default, LXC limits certain sysctls and capabilities, especially ones that can affect networking or security, like net.ipv4.ip_unprivileged_port_start.
    • In a normal VM (like a full Proxmox KVM VM), the container would have its own kernel, so this wouldn’t be blocked.
  • Privileged vs. unprivileged LXC: Pick your poison. Here's how I run Docker in an LXC on Proxmox, and why it's a solid alternative to a VM

App store

Tipi

Dockerizing Compiled Software

Crontab

Install macOS

Raspberry Pi servers based on Docker

Data Science

Data Science

Illumina BaseSpace

Bioinformatics analyses

Cloud provider

Docker can be deployed on any cloud provider like Digital Ocean, Amazon Web Services (AWS), Microsoft Azure, Google Cloud Computing.

Notification

Gotify

  • https://gotify.net/
  • Gotify: My New Favorite Way To Get Notified!
    • Create an app (e.g. "Uptime" in the Gotify interface). It will automatically create a Token
      • Go to Uptime Kuma - Settings - Notifications - Notification type = Gotify.
      • Copy Gotify application token here.
      • Copy Gotify server URL http://xxx.xxx.x.xxx:8010
      • Do a test
      • Gotify shall show` a notification on the app "Uptime"
    • Create another app called "watchTower"
      • WatchTower is launched through a docker compose
      • Docker compose file can specify notification settings. It can receive notifications from many apps.

Dashboard

Homelab Dashboard: What It Is and Why You Need One

Homepage

  • https://github.com/gethomepage/homepage
  • How-to:
    nano compose.yml # copy from https://github.com/gethomepage/homepage
                     # remember to the URLs on HOMEPAGE_ALLOWED_HOSTS 
    mkdir config     # it's ok the folder is empty
    docker compose up -d
    nano config/services.yaml  # modify for our need
    nano config/bookmarks.yaml # modify for our need
  • Tip:
    • By default, port 3000 is used.
    • If I want to use port 80, make sure DO NOT INCLUDE ":80" to HOMEPAGE_ALLOWED_HOSTS in the compose.yml since browsers usually send the request with the Host header as just "homepage.local" (without ":80").
    • To include pihole as a widget in the dashboard, I need to modify services.yaml. I also need to get the pihole api from Settings -> api. The api key is needed in order to access pihole statistics.
  • Files under the config folder
    $ ls -t config/*.*
    settings.yaml  widgets.yaml  bookmarks.yaml  services.yaml  docker.yaml  kubernetes.yaml  custom.css  custom.js
    

    It seems the most important ones are services.yaml and bookmarks.yml. Homepage automatically creates default/skeleton config files on first run inside /app/config if they do not already exist.

  • Icons
    • Icons can be specified by names. They are obtained from https://dashboardicons.com/.
    • Local icons can be placed in a new folder 'icons' and use -v ./icons:/app/public/icons in docker command. Recall Homepage's web root is /app/public.
    • Icons can be specified by using the way "/icons/myicon.png" in config/services.yaml file.
    • Icons can be specified by full URLs.
    • To download some website's favicon file, go to the source of a website and search for "icon". Alternatively, use a web tool.
    • Supported formats: .ico, .png, .svg, .webp
    • Use docker compose restart homepage to see its effects.
  • Widgets
  • To hide the CPU usage, RAM, storage, and the search box in your Homepage dashboard, modify config/widgets.yaml file. If you want to hide the entire "resources" section, you can simply remove or comment out the entire - resources: block from your widgets.yaml.
  • (Related to hide CPU/RAM/Storage/Search) To hide a horizontal bar at top (related to the header section), modify config/settings.yaml file by adding a line: headerStyle: none
  • Examples :

Dashy

docker run -d \
  -p 8295:80 \
  --volume /home/$USER/dashy/public/conf.yml:/app/public/conf.yml \
  --volume /home/$USER/dashy/icons:/app/public/item-icons/icons \
  --name dashy \
  --restart=unless-stopped \
  lissy93/dashy:latest

Glance

Flame

https://github.com/pawelmalak/flame

Homer

Uptime Kuma

  • Docker, Github
  • Uptime Kuma Docker Setup Guide: Installation and Configuration
  • Uptime Kuma | Fancy service and server monitoring (Video)
  • Since I like to use Uptime Kuma to monitor servers using IPs from my tailscale, I need to expose host's network to the container. That is, I would use something like "docker run -d --network host louislam/uptime-kuma" or
    services:
      uptime-kuma:
        image: louislam/uptime-kuma:1
        container_name: kuma
        volumes:
          - ./data:/app/data
        network_mode: "host"  # Use host network mode
        restart: always
    

    Note

    • In host network mode, the container shares the network stack of the host directly, bypassing Docker's network isolation.
    • The container can access all host network interfaces directly.
    • Any ports exposed by the container are automatically accessible on the host without explicit port mapping.
    • Port mapping is not applicable when the container is using host network. In host network mode, the container shares the network stack of the host system directly, bypassing Docker's network isolation.

heimdall

https://github.com/linuxserver/docker-heimdall

Dashboard for monitoring system: grafana

After I change the firewall by adding two ports (9090 & 9100), the docker-compose method of grafana works like a charm.

  • Reboot the host OS will not affect the grafana (assuming we include restart: unless-stopped in the 3 containers). But if we modify docker-compose.yml and run docker-compose down; docker-compose up it will result in data lose and we will need to re-create the admin password and all the setup.

Google keep

Joplin

Google photo

Immich

  • immich - High performance self-hosted photo and video backup solution

PhotoPrism

Document management

Music: Navidrome

Navidrome Is the Perfect Self-Hosted Music Server for Raspberry Pi

File server

samba

https://github.com/dockur/samba

services:
  samba:
    image: dockurr/samba
    container_name: samba
    environment:
      NAME: "Data"
      USER: "samba"
      PASS: "secret"
    ports:
      - 445:445
    volumes:
      - ./samba:/storage
    restart: always
  • It works on Linux (smb://192.168.x.x) and Windows (\\\\192.168.x.x\Data)
  • It doesn’t announce itself on the local network, so Windows Explorer or Linux “Files” doesn’t auto-discover it. It’s a networking limitation of Docker by default.
    • Network discovery (SMB browsing) depends on NetBIOS / mDNS broadcasts, which are local-network (Layer-2) broadcast packets.
    • Docker NATs traffic through a virtual bridge. The container cannot announce itself via NetBIOS name service (UDP 137/138) or mDNS.

ownCloud

After I use docker run --rm --name myowncloud -p 81:80 owncloud:8.1, I find I can only access it through http://localhost:81. If I try to access it through another computer by http://xxx.xxx.xx.1:81, the URL is changed back to http://localhost:81 so it failed to load.

nextcloud

Nextcloud looks more modern than owncloud though their interface are very similar. I got the same problem (URL is changed from IP to localhost) when I try to access its web from another computer. Using the IP instead of localhost to finish the initial setup can fix the error.

Note:

  • The first we open the webpage, we need to create the admin username/password.
  • Nextcloud uses owncloud mobile application.
  • Nextcloud includes a small mp4 file. I can use browser to play mp4. Photos files can be opened in browsers too (including slideshow).

Add external storage like SAMBA

To connect to a Samba drive in Nextcloud, you will need to use the External Storage app. This app allows you to mount external storage services, including Samba shares, as directories within your Nextcloud instance. Here are the steps to connect to a Samba drive in Nextcloud:

First, make sure that the External Storage app is installed and enabled on your Nextcloud instance. You can do this by going to the Apps section in the Nextcloud admin panel and searching for the External Storage app. If it is not installed, you can install it from there.

Once the External Storage app is installed and enabled, go to the Settings section in the Nextcloud admin panel and select the External Storages option under the Administration section (Left panel, scroll down to see the app).

On the External Storages page, click on the Add storage button and select SMB / CIFS from the dropdown menu.

In the configuration form that appears, enter the details of your Samba share, including the hostname or IP address of the server, share name, username, and password. You can also specify a subfolder within the share if you only want to mount a specific subfolder.

Once you have entered all of the required information, click on the Save button to save your configuration.

Nextcloud Apps

  • "access through untrusted domain" error. On my Casaos, I found the file /DATA/AppData/nextcloud/var/www/html/config/config.php shows trusted domain is casaos.local:10081. So I just need to change the app's setting in CasaOS to use http://casaos.local:10081 instead of http://IP:10081 to open the page.
  • Audio Player. When I play mp3 files, the web interface does not show a progress bar:(
    $ docker run --rm --name mynextcloud -v ~/Downloads/nextcloudapps:/var/www/html/custom_apps -p 81:80 nextcloud
    # above will create an empty folder ~/Downloads/nextcloudapps (www-data:root)
    $ tar xzvf Downloads/audioplayer-2.3.1.tar.gz -C Downloads/
    $ docker cp Downloads/audioplayer mynextcloud:/var/www/html/custom_apps
    # Go to nextcloud and '+Apps', a new app 'Audio Player' should have shown up.
  • Music. GOOD. The app is from the owncloud team though for some reason the app is not included in owncloud/nextcloud. Yes, a progress bar is shown when I played a song downloaded from Youtube:)
    # No need to create a volume
    $ docker run -d --name mycloud -p 81:80 nextcloud
    
    # Open another terminal
    # Don't download the zip file from github. Get the zip file from the app store
    $ tar xzvf ~/Downloads/music_0.7.0_nc-signed.tar.gz -C ~/Downloads/
    $ docker cp Downloads/music mycloud:/var/www/html/custom_apps
    $ docker exec mycloud chmod -R 0750 /var/www/html/custom_apps
    $ docker exec mycloud chown -R www-data:www-data /var/www/html/custom_apps
    Now open the website. Click the gear icon (Settings) and click "Apps". Find out the 'music' app from the bottom of the list and click the 'Enable' button. A new Music icon will be created next to the Gallery icon at the top. Note: if we want to play music repeatedly, I should not play the music directly from Files. I should click the Music icon at the top and let it start to scan musics. Then once I can play a music from there, it will show two new icons; one is shuffle and the other is loop. To have a persistent data, we can 'run' using
    $ mkdir -p ~/nextcloud/{html,apps,config,data}
    $ docker run -d \
        --name mycloud \
        -p 81:80 \
        -v ~/nextcloud/html:/var/www/html \
        -v ~/nextcloud/apps:/var/www/html/custom_apps \
        -v ~/nextcloud/config:/var/www/html/config \
        -v ~/nextcloud/data:/var/www/html/data \
        nextcloud
    If we like to delete the contain and its unamed volume, run
    $ docker stop mycloud; docker rm -v mycloud
    If we run the container again mounting all volumes, all apps,files,configuration,admin's username & password are kept.
  • PDF viewer. PDF files will be downloaded instead of opening on the browser. This can be easily fixed. Click '+Apps' from the personal settings (the response is slow when I tested using Docker). Search for PDF viewer. Click the 'Enable' button (it will be changed to 'Disable' after that)
  • draw.io. After enable it, we can click the "+" sign and choose "Diagram" to create a new diagram (*.xml).
  • Radio. After enable it, a new "Radio" icon will be shown at the top. Only 20 stations are available from the 'Top'. No response after I clicked "Categories".

Seafile

Copyparty

File manager

Filestash

Filestash – Dropbox-like file manager

File browser