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

posted @ 2018-03-14 17:40  Wesley·zk  阅读(186)  评论(0)    收藏  举报