4:管理应用数据
五、将Docker主机数据挂载到容器
1、为什么需要将主机数据挂载到容器中?
前面讲到,容器删除后,容器里面的数据也将丢失。在某些场景中,需要数据持久化。
2、Docker提供三种不同的方式将数据从宿主机挂载到容器中:

voluemes:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)
bind mounts:可以存储在宿主机系统的任意位置
tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统
3、Volume配置方法
管理卷
docker volume create nginx-vol #创建数据卷
docker volume ls #查看数据卷
DRIVER VOLUME NAME
local nginx-vol
docker volume inspect nginx-vol #查看数据卷详细信息
[
{
"CreatedAt": "2018-03-14T04:18:43-04:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
}
]
用卷创建一个容器
docker run -d -it --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx docker container exec -it nginx-test bash #进入容器终端 ls /usr/share/nginx/html/ #查看容器数据 50x.html index.html ls /var/lib/docker/volumes/nginx-vol/_data/ #查看宿主机数据卷数据,数据已同步 50x.html index.html
清理数据卷
docker container stop nginx-test #停止容器 docker container rm nginx-test #删除容器 docker volume rm nginx-vol #删除数据卷
注意:
如果没有指定卷名,会自动创建匿名卷
官方文档:https://docs.docker.com/storage/volumes/
4、Bind Mounts配置
和volume不同,volume需要手工创建,Bind Mount不需要手工创建,可以直接将宿主机的文件夹挂载至容器中
用卷创建一个容器
docker run -d -it --name=nginx-test --mount type=bind,src=/data,d st=/usr/share/nginx/html nginx #用卷创建容器 docker inspect nginx-test #查看数据卷详细信息 echo "hello" > /data/1.html #创建测试文件 docker container exec -it nginx-test bash #进入容器终端 ls /usr/share/nginx/html/ #查看测试文件 1.html
清理容器
docker container stop nginx-test #停止容器 docker container rm nginx-test #删除容器
注意:
如果源目录没有存储,不会自动创建,会抛出一个错误
如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏
官方文档:https://docs.docker.com/storage/bind-mounts/
5、使用容器搭建LNMP网站平台
创建LNMP自定义网络
docker network create lnmp #创建网络
docker network ls #查看网络
创建MySQL数据库容器及相关库
docker run -itd \ > --name lnmp_mysql \ > --net lnmp \ > -p 3306:3306 \ > --mount src=mysql-vol,dst=/var/lib/mysql \ > -e MYSQL_ROOT_PASSWORD=123456 \ > mysql --character-set-server=utf8 #创建mysql容器 docker logs lnmp_mysql #查看mysql启动日志 docker top lnmp_mysql #查看mysql进程 docker exec lnmp_mysql sh \ > -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"' #创建wp数据库
创建PHP环境容器
docker run -itd \ --name lnmp_web \ --net lnmp \ -p 88:80 \ --mount type=bind,src=/data,dst=/var/www/html richarvey/nginx-php-fpm
搭建WordPress博客测试
cd /data/ wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz tar xf wordpress-4.7.4-zh_CN.tar.gz
测试:使用IP:88



浙公网安备 33010602011771号