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 
#挂载的时候注意!目录对应目录,文件对应文件

posted @ 2022-06-03 10:25  kirin(麒麟)  阅读(79)  评论(0)    收藏  举报
Δ