New to Docker and trying to wrap my head around proper management of named volumes.
I’m making a Wordpress stack that uses a Traefik docker container for reverse proxy.
version: '2'
services:
db:
image: mysql:5.7
networks:
- backend
volumes:
- db:/var/lib/mysql
labels:
- "traefik.enable=false"
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wp:/var/www/html
networks:
- backend
- frontend
restart: always
labels:
- "traefik.docker.network=traefik_webgateway"
- "traefik.frontend.rule=Host:${HOST_NAME}"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${DB_USER}
WORDPRESS_DB_PASSWORD: ${DB_PASS}
WORDPRESS_DB_NAME: ${DB_NAME}
volumes:
wp: {}
db: {}
networks:
backend:
driver: bridge
frontend:
external:
name: traefik_webgateway
The named volumes seem encouraged over using bind mounts, so I’m inclined to use them. Also when binding to a local directory I was having issues with mysql not working properly. Having the name is nice too when using docker volume cli.
With this setup everything runs great so far. I may have to add a volume for php upload configs too. My issue is I’m not sure how to properly access and edit the volumes if need be. I know where the mount point is in var/lib though it didn’t seem best practice to just root in and mess around there.
The use case here being if a pluigin update is faulty or incompatible and crashes the site. Now I need to go in and disable the plugins, a simple way is to rename the plugin folder with _ prefixed to the name. Another case may be editing the config or developing a plugin, etc.
Ideally I would like to be able to sftp into named docker volumes, not sure if that’s the best way though. I could create a dockerfile that extend wordpress and setup an sftp on the wordpress container, though I may also have a reason in the future to sftp into the db volume. What is the proper way to edit a named volume mounted in var/lib?
I also will want remote access to the mysql db at some point, using workbench. I could just add it to the frontend and remove the backend and use iptables on host for security, if anyone has a better approach for that feel free to weigh in.