一、绑定挂载(Bind Mount)
docker run -d \--name mysql8 \-p 39306:3306 \-e MYSQL_ROOT_PASSWORD="Admin@2026#" \-e MYSQL_DATABASE=toolbox \-e MYSQL_USER=appuser \-e MYSQL_PASSWORD="Abc@123456" \-v /datah/mysql:/var/lib/mysql \mysql:8
docker exec -it mysql8 bashmysql -h 127.0.0.1 -P 3306 -uroot -p'Admin@2026#'docker volume create mysql-datadocker volume lsdocker run -d \--name mysql8 \-p 39306:3306 \-e MYSQL_ROOT_PASSWORD="Admin@2026#" \-e MYSQL_DATABASE=toolbox \-e MYSQL_USER=appuser \-e MYSQL_PASSWORD="Abc@123456" \-v mysql-data:/var/lib/mysql \mysql:8
docker volume inspect mysql-datadocker stop mysql8docker rm mysql8docker volume lsdocker volume rm mysql-data
mkdir -p /opt/nginx/{conf.d,logs}cat > /opt/nginx/nginx.conf <<'EOF'user nginx;worker_processes auto;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events {worker_connections 10240;}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;keepalive_timeout 65;# ========== tmpfs 内存临时缓存目录配置 ==========client_body_temp_path /var/nginx/client_temp;proxy_temp_path /var/nginx/proxy_temp;fastcgi_temp_path /var/nginx/fastcgi_temp;uwsgi_temp_path /var/nginx/uwsgi_temp;scgi_temp_path /var/nginx/scgi_temp;# 静态资源内存缓存配置proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=nginx_cache:100m inactive=7d max_size=1G;gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;include /etc/nginx/conf.d/*.conf;}EOF
3.2、conf.d 站点配置(http + https)cat > /opt/nginx/conf.d/demo.conf <<'EOF'server {listen 80;server_name demo.dashboard.com;return 301 https://$host$request_uri;}server {listen 443 ssl http2;server_name demo.dashboard.com;ssl_certificate /etc/nginx/conf.d/certs/dashboard.com.crt;ssl_certificate_key /etc/nginx/conf.d/certs/dashboard.com.key;location / {proxy_pass http://192.168.100.200:31080;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto https;}}EOF
3.3、Docker 启动命令# tmpfs 内存挂载Nginx所有临时目录,限制最大2G,权限700--tmpfs /var/nginx:size=2G,mode=700 \# 配置、日志持久化挂载-v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \-v /opt/nginx/conf.d:/etc/nginx/conf.d \-v /opt/nginx/logs:/var/log/nginx \
docker run -d \--name nginx-gateway \--restart always \-p 80:80 \-p 443:443 \--tmpfs /var/nginx:size=2G,mode=700 \-v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \-v /opt/nginx/conf.d:/etc/nginx/conf.d \-v /opt/nginx/logs:/var/log/nginx \nginx:stable-alpine
3.4、访问域名查看界面docker stop nginx-gatewaydocker rm nginx-gateway
四、数据卷容器(Data Volume Container) 缺点:已经比较老旧、被 Named Volume 基本替代。适用场景:有老项目还在使用维护。4.1、创建数据卷容器(只做数据存储,不启动业务)docker create \--name nginx-data \-v /etc/nginx \-v /var/log/nginx \busybox
# 拷贝宿主机配置目录到数据卷容器docker cp /opt/nginx/nginx.conf nginx-data:/etc/nginx/nginx.confdocker cp /opt/nginx/conf.d/. nginx-data:/etc/nginx/conf.d/
# 从数据卷容器挂载所有声明的卷,不用再写宿主机-v路径--volumes-from nginx-data \
docker run -d \--name nginx-gateway \-p 80:80 \-p 443:443 \--volumes-from nginx-data \nginx
docker run -d \--name nginx-gateway2 \-p 8080:80 -p 8443:443 \--volumes-from nginx-data \nginx
https://demo.dashboard.com:8443/docker stop nginx-gateway nginx-gateway2docker rm -f nginx-gatewaydocker rm -f nginx-gateway2docker rm -f nginx-data
五、网络存储(NFS,分布式存储)/mnt/nfs 更优雅,容器迁移也方便。[root@nfs-server logs]# exportfs -v/datah/nfs_share192.168.100.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,insecure,no_root_squash,no_all_squash)
docker volume create \--driver local \--opt type=nfs \--opt o=addr=192.168.100.205,nolock,soft,rw \--opt device=:/datah/nfs_share \nfs_data
5.2、查看docker volume lsdocker volume inspect nfs_data
mkdir -p /datah/nfs_share/nginx/conf.dmkdir -p /datah/nfs_share/nginx/htmlchmod -R 777 /datah/nfs_share/nginx
5.4、创建两个 volumedocker volume create \--driver local \--opt type=nfs \--opt o=addr=192.168.100.205,nolock,soft,rw \--opt device=:/datah/nfs_share/nginx/conf.d \nginx_confdocker volume create \--driver local \--opt type=nfs \--opt o=addr=192.168.100.205,nolock,soft,rw \--opt device=:/datah/nfs_share/nginx/html \nginx_html
5.5、启动nginxdocker run -d \--name nginx \-p 80:80 \-v nginx_conf:/etc/nginx/conf.d \-v nginx_html:/usr/share/nginx/html \nginx:latest
http://192.168.100.203/[root@node ~]# docker stop nginxnginx[root@node ~]# docker rm nginxnginx[root@node ~]# docker volume rm nginx_htmlnginx_html[root@node ~]# docker volume rm nginx_confnginx_conf[root@node ~]# docker volume rm nfs_datanfs_data[root@node ~]# docker volume ls
总结原文来源:运维攻坚
评论 (0)