网站开发详细报价单,网络营销推广方式怎么收费,张家港企业网站建设,wordpress开发解析Docker进阶#xff1a;深入了解容器数据卷 一、前言二、容器数据卷的作用三、容器数据卷的使用方法四、实战--使用docker部署前端项目#xff08;数据卷挂载#xff09;4.1 重要#xff1a;准备工作#xff0c;先在本地创建挂载目录4.2 启动一个临时的nginx容器#xff0… Docker进阶深入了解容器数据卷 一、前言二、容器数据卷的作用三、容器数据卷的使用方法四、实战--使用docker部署前端项目数据卷挂载4.1 重要准备工作先在本地创建挂载目录4.2 启动一个临时的nginx容器拷贝nginx容器内的初始配置文件4.3 重新挂载目录4.4 修改宿主机nginx的配置文件4.5 拷贝前端项目到挂载目录4.6 重启nginx容器加载配置 五、容器数据卷具名挂载、匿名挂载5.1 具名挂载Named Volumes5.2 匿名挂载Anonymous Volumes5.3 如何确定是具名挂载还是匿名挂载5.4 拓展读写规则映射添加 六、命令总结 The Begin点点关注收藏不迷路 一、前言
在Docker中容器数据卷是一个非常有用的功能它可以用于实现容器与主机之间的数据共享和持久化存储。
容器数据卷的概念
容器数据卷是Docker中用于实现数据持久化的一种机制。
它可以将容器内部的数据目录或文件与主机上的目录或文件进行映射从而实现数据在容器和主机之间的共享和持久化存储。
二、容器数据卷的作用 1、数据共享
容器数据卷可以让多个容器之间共享数据。比如一个Web应用程序可能需要一个容器负责前端页面的展示另一个容器负责处理后端逻辑它们可以通过容器数据卷共享数据。
2、数据持久化
容器数据卷可以实现数据在容器销毁或重新创建时的持久化存储。通常情况下容器内部的数据在容器销毁后会丢失而通过容器数据卷我们可以将数据存储在主机上从而保证数据的持久性。
3、数据备份和恢复
容器数据卷可以用于数据的备份和恢复。我们可以将容器数据卷中的数据备份到主机上以便在需要时进行恢复。
三、容器数据卷的使用方法
1、在运行 Docker 容器时将宿主机上的一个目录使用绝对路径表示映射到容器内的指定目录中。以实现数据在宿主机和容器之间的共享和持久化存储。
具体命令如下
docker run -it -v /宿主机绝对路径:/容器内目录 镜像名##其中-it 表示以交互模式启动容器-v /宿主机绝对路径:/容器内目录指定了数据卷的映射关系镜像名表示要基于哪个镜像运行容器。四、实战–使用docker部署前端项目数据卷挂载
运行一个 nginx 容器并将宿主机上的一个目录映射到容器内的指定目录中让 nginx 使用自定义的配置文件来启动服务。** 4.1 重要准备工作先在本地创建挂载目录
mkdir /mynginx/conf
mkdir /mynginx/zyl-web
mkdir /mynginx/logs如果没有先在本地创建有关文件会启动报错如下
如下容器 mynginx 已经成功创建并运行但是在 45 秒前已经退出。容器状态显示为 Exited (1)
报错12024/03/12 11:58:54 [emerg] 1#1: open() /etc/nginx/nginx.conf failed (2: No such file or directory)
报错22024/03/12 12:08:13 [emerg] 1#1: open() /etc/nginx/mime.types failed (2: No such file or directory) in /etc/nginx/nginx.conf:18 4.2 启动一个临时的nginx容器拷贝nginx容器内的初始配置文件
先启动一个临时的 nginx 容器然后将容器内的初始配置文件拷贝到本地宿主机。
1、启动临时的 nginx 容器
docker run -d --nametmp-nginx -p 8000:80 nginxdocker ps2、进入nginx容器
docker exec -it tmp-nginx /bin/bash3、拷贝 nginx 配置文件到本地宿主机
把tmp-nginx容器中/etc/nginx/目录下的文件不包括该目录本身复制到本地文件系统的/mynginx/conf/目录中。
docker cp tmp-nginx:/etc/nginx/. /mynginx/conf/3、停止并删除临时的 nginx 容器
docker stop tmp-nginx
docker rm tmp-nginx4.3 重新挂载目录
需要多次使用 -v 参数来实现将多个目录或文件挂载到容器内。
将本地的 zyl-web/dist 目录挂载到容器内的 /usr/share/nginx/html 目录conf 目录挂载到容器内的 /etc/nginx 目录logs 目录挂载到容器内的 /var/log/nginx 目录。
##重新挂载docker run -d -p 8000:80 \
-v /mynginx/zyl-web/dist/:/usr/share/nginx/html \
-v /mynginx/conf:/etc/nginx \
-v /mynginx/logs:/var/log/nginx \
--namemynginx nginx4.4 修改宿主机nginx的配置文件
vi nginx.conf内容如下 server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {# 前端项目地址注意这里是容器内部的地址root /usr/share/nginx/html;# 默认访问的资源index index.html index.htm;}#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 html;}} 4.5 拷贝前端项目到挂载目录
## 根据你项目而定
mv /zyl-web/* /mynginx/zyl-web/4.6 重启nginx容器加载配置
重新启动后容器会继续使用之前加载的配置文件、数据和设置。
docker restart mynginx2、进入mynginx容器你会看到数据同步
docker exec -it mynginx /bin/bashcd /usr/share/nginx/html/测试访问前端web项目 这样发布前端项目、修改配置即可不用进到容器内部而是在本地宿主机修改即可。
五、容器数据卷具名挂载、匿名挂载
5.1 具名挂载Named Volumes
具名挂载是通过为容器指定一个特定的卷Volume来实现的。
具名挂载可以为卷指定一个名称并且可以在容器创建时或后续运行时进行管理。
具名挂载的优点是可以方便地管理和共享数据同时也支持在多个容器之间共享数据。
具名挂载在容器的生命周期内保留数据即使容器被删除数据仍然存在。
例1验证具名挂载即使容器被删除数据仍然存在。
1、创建具名挂载卷并运行容器
通过 -v 卷名:容器内路径 docker run -d -P --namenginx01 -v juming-nginx:/etc/nginx nginx2、检查名为 juming-nginx 的 Docker 卷的详细信息
##将返回有关指定卷的元数据和配置信息。
docker volume inspect juming-nginx3、查看具名卷的数据目录
docker 在没有指定目录的情况下容器内的卷都在’/var/lib/docker/volumes/卷名/_data
/var/lib/docker/volumes/ 是Docker 用于存储具名卷数据的默认路径。在这个路径下Docker 会为每个具名卷创建一个单独的目录并在其中保存卷的数据。
[rootzyl-server ~]# find / -name juming-nginx
/var/lib/docker/volumes/juming-nginx在这个目录下能够找到与 juming-nginx 具名卷相关联的数据目录。
即使容器被删除这些数据目录仍然存在说明数据得到了持久化存储。
4、进入容器内部创建文件
docker exec -it nginx01 /bin/bashtouch test-juming.txt5、验证删除前面创建的nginx01 容器数据是否持久化存储
docker stop nginx01
docker rm nginx01 可以看到数据仍然存在则说明具名挂载的数据是持久化的即使容器被删除也不会丢失。
5.2 匿名挂载Anonymous Volumes
匿名挂载是在容器创建时自动创建的临时卷没有指定一个特定的名称。匿名挂载的优点是可以快速创建和销毁临时数据适用于临时存储或临时共享数据的场景。
匿名挂载在容器删除后会自动销毁数据不会保留。
5.3 如何确定是具名挂载还是匿名挂载
-v 容器内路径 ##匿名挂载-v 卷名:容器内路径 ###具名挂载-v /宿主机路径:容器内路径 ##指定路径挂载5.4 拓展读写规则映射添加
docker run -it --privilegedtrue -v /宿主机绝对路径:/容器内目录ro只读默认可读可写 镜像名ro ##只读如果有ro则说明只能通过宿主机来操作容器内无法操作
rw ##可读可写六、命令总结
docker run -d 镜像名 ##重启之后不会自动运行docker run -d --restartalways 镜像名 ##重启之后自动运行容器docker start 容器id/容器名 ##启动docker restart 容器id/容器名 ##重启docker stop 容器id/容器名 ##停止docker kill 容器id/容器名 ##kill进程docker ps ###列出当前运行的容器docker ps | grep 容器id/容器名 ## 查看进程是否正常docker ps -a ###列出所有容器docker exec -it 容器id/容器名 /bin/bash ##进入容器docker logs 容器id/容器名 ###看容器的日志docker cp 容器id/容器名:/容器内文件路径 宿主机文件绝对路径 ##从容器复制文件到本地文件系统docker cp 宿主机文件绝对路径 容器id/容器名:容器内文件路径 ##从本地文件系统复制文件到容器内The End点点关注收藏不迷路