Create Website content:
mkdir -p htdocs cat >htdocs/index.html <<EOF <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Docker Local Path Nginx</title> </head> <body> <h2>Hello from Nginx container of `hostname`</h2> </body> </html> EOF
docker run -d --name nginx-local \ -v $(pwd)/htdocs:/usr/share/nginx/html nginx IPADDRESS=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx-local) # Alternative with jq # docker inspect nginx-local| jq -r '.[0].NetworkSettings.Networks.bridge.IPAddress' curl $IPADDRESS
Prepare docker managed volume:
docker volume create htdocs-volume
docker container run \
-v $(pwd)/htdocs:/htdocs \
-v htdocs-volume:/htdocs1 \
-ti --rm alpine /bin/sh
cp htdocs/index.html htdocs1
exit
Use docker managed volume:
docker run -d --name web-server \ -v htdocs-volume:/usr/share/nginx/html nginx # check content docker exec web-server ls /usr/share/nginx/html docker run --rm -ti --volumes-from web-server alpine /bin/sh ls /usr/share/nginx/html exit
Inspect volumes:
docker volume ls docker volume inspect htdocs-volume #docker volume rm htdocs-volume
docker run \ --mount type=bind,src=$(pwd)/htdocs,dst=/usr/share/nginx/html,readonly \ -p 8080:80 \ nginx-public
# hostpath bind mount docker run --name mysql-db \ -v $(pwd)/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.4.9 # Access DB # Stop db docker stop mysql.db docker rm mysql-db # or docker managed volume /var/lib/docker/volumes docker volume create mysql-data docker run --name mysql-db \ -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.4.9