Docker数据卷管理

Docker数据卷管理

为什么要用数据卷?

docker 原生使用的是 联合文件系统 性能差 生命周期与容器相同

数据卷的优点

  1. 直接mount到容器中 绕开了分层文件系统
  2. 性能和主机磁盘相同,并且不会因容器删除而删除
  3. 修改方便,不用进入容器内部,对容器侵入小

docker managed volume

在dockerfile中使用VOLUME关键字声明挂载称为docker管理卷

VOLUME ["<路径1>", "<路径2>"...]

bind mount

在docker run 中加上 -v 选项挂载称为bind mount

-v <host path>:<container path>

挂载nginx html

[root@localhost ~]# tree /html/
/html/ 
└── index.html

[root@localhost ~]# cat /html/index.html Welcom to Kylin!

[root@localhost ~]# docker run -itdp 80:80 --name nginx -v /html:/usr/share/nginx/html nginx:latest 66d9911e0553e9a4d1c321a4831cced49fe38a36d16a1e1082b3a05176f0c894

[root@localhost ~]# curl 192.168.50.16 Welcom to Kylin!

部署LNMP

  1. 下载nginx、php和mysql镜像

    [root@localhost ~]# docker images
    REPOSITORY 		TAG 	IMAGE ID		 CREATED		SIZE
    nginx 			latest   dd34e67e3371   2 weeks        ago133MB
    mysql		    5.7      6c20ffa54f86 	2 weeks        ago448MB
    php			    7.2-fpm  28f52b60203d   8 months       ago398MB
    
  2. 创建数据卷

    [root@localhost ~]# docker volume create nginx_html
    [root@localhost ~]# docker volume create mysql_conf
    [root@localhost ~]# docker volume create mysql_data
    
  3. 启动容器

    # 启动mysql容器
    [root@localhost ~]# docker run --name mysql -d -p 3310:3306 -v mysql_conf:/etc/mysql/conf.d -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    2f624ab4969be699803c47f6bb58bd1190ebca220c20d30ec4fd2aa066a4f876
    
    # 启动php容器
    [root@localhost ~]# docker run -d -v nginx_html:/var/www/html -p 9000:9000 --link mysql:mysql --name phpfpm php:7.2-fpm
    c7bec16d997ad1fd1734d11704955cd3a7eb1b42eebca0f168a16d9c3048ac1e
    
    # 启动nginx容器
    [root@localhost ~]# docker run -d -p 80:80 --name nginx -v nginx_html:/var/www/html --link phpfpm:phpfpm nginx:latest
    f0acd98b1319c00e0d247d0b01cd6b8902fea7bae08b095e0a9bd290aa5a9963
    
    [root@localhost ~]# docker ps -a
    CONTAINER ID 		IMAGE			  COMMAND			 CREATED			STATUS			 PORTS			 NAMES
    f0acd98b1319       nginx:latest	    "/docker-entrypoint.…"	35 secondsago      Up 34 seconds    0.0.0.0:80->80/tcp  nginx
    c7bec16d997a       php:7.2-fpm	    "docker-php-entrypoi…"   7 minutesago      Up 7 minutes     0.0.0.0:9000->9000/tcp phpfpm
    2f624ab4969b       mysql:5.7   	    "docker-entrypoint.s…" 	16 minutesago      Up 16 minutes 33060/tcp, 0.0.0.0:3310->3306/tcp mysql
    
  4. 编辑index.php

    [root@localhost ~]# cd /var/lib/docker/volumes/nginx_html/_data/
    [root@localhost _data]# vi index.php
    <?
    phpinfo();
    ?>
    [root@localhost _data]# docker ps
    CONTAINER ID 		IMAGE				 COMMAND 		  CREATE		   STATUS 		       PORTS		      NAMES
    c7bec16d997a       php:7.2-fpm     "docker-php-entrypoi…" About aminute ago  Up About a minute 0.0.0.0:9000->9000/tcp phpfpm
    [root@localhost _data]# docker exec -ti c7bec16d997a /bin/bash
    root@c7bec16d997a:/var/www/html# ls
    index.php
    
  5. nginx配置文件

    1.需要把自定义的配置文件挂载到容器的配置文件上
    2.基本需要改的是root目录和fastcgi_pass的地址
    3.root目录:这个是自定义
    4.fastcgi_pass地址:fastcgi_pass phpfpm:9000; 一般由php-fpm容器名:9000,这样组成
    5.这个conf文件可以在宿主机上面创建好,然后拷贝到容器中的配置文件中,进行覆盖
    
    [root@localhost ~]# cat ./default.conf
    server {
        listen 80;
        server_name localhost;
        
        #charset koi8-r;
        #access_log /var/log/nginx/host.access.log main;
        
        location / {
            root /var/www/html;
            index index.html index.htm index.php;
        }
        
        #error_page 404 /404.html;
        
        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /var/www/html;
        }
        
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
            #proxy_pass http://127.0.0.1;
        #}
        
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root /var/www/html;
            fastcgi_pass phpfpm:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
        
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny all;
        }
    }
    
    [root@localhost ~]# docker cp default.conf f0acd98b1319:/etc/nginx/conf.d/default.conf
    [root@localhost ~]# docker exec -ti f0acd98b1319 /bin/bash
    root@f0acd98b1319:/# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    root@f0acd98b1319:/# nginx -s reload
    2021/09/03 06:02:18 [notice] 40#40: signal process started
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值