8、Ddocker数据卷
版权声明:原创作品,谢绝转载!否则将追究法律责任。 ————— 作者:kirin
8.1.现在我们都可以随便起一个容器了,那么我们能用容器来干什么?启动nginx的容器也只能访问默认页面,那么我们如何在站点里面写入数据呢?

8.2.启动nginx容器并进入到容器里
[root@docker01 ~]# docker run -d -it -p 80:80 nginx:latest
[root@docker01 ~]# docker exec -it nostalgic_jones /bin/bash
root@ef51ac01f6c8:/# cd /usr/share/nginx/html/
root@ef51ac01f6c8:/usr/share/nginx/html# touch oldzhang.txt
root@ef51ac01f6c8:/usr/share/nginx/html# ls
50x.html index.html oldzhang.txt
8.3.在宿主机上查找oldzhagn.txt,就可以知道容器的数据具体存放路径了
[root@docker01 ~]# find / -name "oldzhang.txt"
[root@docker01 ~]# cd /var/lib/docker/overlay2/1752ddeebf3883f65d728d5ee0f78cb8a9faeb86f95da11aabdcbb72dead42b8/merged

8.4.上传代码文件到上面的那个路径,然后打开网页刷新

8.5.这种方法不推荐,我们可以使用-v挂载参数
8.5.1.在宿主机上创建对应的目录并上传对应的代码
[root@docker01 ~]# mkdir -p /code/xiaoniao
8.6.创建镜像并打开浏览器访问
[root@docker01 ~]# docker run -d -it -p 81:80 -v /code/xiaoniao:/usr/share/nginx/html nginx:latest
8.7.相比8.5与8.6两种方法,8.6更方便,加入更新代码,用第一种方法还需要一台一台改,而第二种方法只修改宿主机的代码就可以

8.8.创建卷,将容器上的数据持久化的(永久)保存在卷上面,就算把容器删除,只要卷还在,数据就在。卷的大小看/分区的大小,卷没有大小限制。不加卷名的话会随机起一个卷名。
[root@docker01 ~]# docker volume create test
8.8.1.卷的默认路径
[root@docker01 ~]# cd /var/lib/docker/volumes/test/_data/
8.8.2.查看挂载的卷
[root@docker01 /var/lib/docker/volumes/test/_data]# docker volume ls

删除卷的命令:
[root@docker01 /var/lib/docker/volumes/test/_data]# docker volume rm test
持久化的作用:就算当前容器坏掉了,也可以启用一个新容器来恢复,只要相同的镜像挂载相同的卷就可以。如果卷下面没有数据,它会容器指定目录下的文件持久化到卷的数据目录下、如果卷下面有数据,它会把卷的数据目录挂载到容器的指定目录

docker run
-v 宿主机绝对目录:容器目录
-v 容器目录 #创建一个随机卷,来持久化容器的目录下的数据,适合保存变化的数据
-v 卷名:容器目录 #创建一个固定名字的卷,来持久化容器的目录下的数据,适合数据共享
–volumes-from #跟某一个容器挂载所有相同的卷
8.9.小练习: 只启动一个nginx容器,要求访问80端口,出现nginx默认欢迎首页,访问81端口,出现小鸟飞飞
实战:
8.9.1方法一:
启动容器
[root@docker01 ~]# docker run -d -p 80-81:80-81 -v /code/xiaoniao:/code nginx:latest
8.9.2.进入容器
[root@docker01 ~]# docker exec -it focused_meninsky /bin/bash
8.9.3.写入配置文件
root@59e9a1e697fd:/etc/nginx/conf.d# cat >> xiaoniao.conf<< EOF
server {
listen 81;
server_name localhost;
location / {
root /code;
index index.html index.htm;
}
}
EOF
8.9.4.退出并重启容器
[root@docker01 ~]# docker restart musing_blackburn

8.10.方法二
#创建新的容器
[root@docker01 ~]# docker run -d -p 82-83:80-81 -v /code/xiaoniao:/code nginx:latest
#复制粘贴
[root@docker01 ~]# cat >> xiaoniao.conf<< EOF
server {
listen 81;
server_name localhost;
location / {
root /code;
index index.html index.htm;
}
}
EOF
#拷贝文件至新的容器机上的/etc/nginx/conf.d/下面
[root@docker01 ~]# docker container cp xiaoniao.conf 9b436f03de39:/etc/nginx/conf.d
8.10.1验证:(自信点,不需要验证,直接打开浏览器访问)
[root@docker01 ~]# docker exec -it wizardly_mcclintock /bin/bash
root@9b436f03de39:~# ls /etc/nginx/conf.d/xiaoniao.conf
/etc/nginx/conf.d/xiaoniao.conf
8.10..2重启容器
[root@docker01 ~]# docker restart flamboyant_aryabhata
#接下来打开浏览器测试

8.11.方法三:(一条命令解决)
[root@docker01 ~]# docker run -d -p 84-85:80-81 -v /root/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf -v /code/xiaoniao:/code nginx:latest
#挂载的时候注意!目录对应目录,文件对应文件

本文来自博客园,作者:kirin(麒麟),转载请注明原文链接:https://www.cnblogs.com/kirin365/articles/16137784.html

浙公网安备 33010602011771号