Docker数据卷管理
为什么要用数据卷?
docker 原生使用的是 联合文件系统 性能差 生命周期与容器相同
数据卷的优点
- 直接mount到容器中 绕开了分层文件系统
- 性能和主机磁盘相同,并且不会因容器删除而删除
- 修改方便,不用进入容器内部,对容器侵入小
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
-
下载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
-
创建数据卷
[root@localhost ~]# docker volume create nginx_html [root@localhost ~]# docker volume create mysql_conf [root@localhost ~]# docker volume create mysql_data
-
启动容器
# 启动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
-
编辑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
-
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