十五、docker学习-docker核心docker数据卷

这篇具有很好参考价值的文章主要介绍了十五、docker学习-docker核心docker数据卷。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是数据卷

当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们删除docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。

通俗地来说,docker容器数据卷可以看成使我们生活中常用的u盘,它存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。

特点:

  1. 数据卷可以在容器之间共享或重用数据
  2. 数据卷中的更改可以立即生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷默认会一直存在,即使容器被删除
  5. 数据卷的生命周期一直持续到没有容器使用它为止

容器中的管理数据主要有两种方式:

  • 数据卷:Data Volumes 容器内数据直接映射到本地主机环境
  • 数据卷容器:Data Volume Containers 使用特定容器维护数据卷

docker cp

**docker cp 😗*用于容器与主机之间的数据拷贝。

语法
# 宿主机文件复制到容器内 
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH 
# 容器内文件复制到宿主机 
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
# options
-L :保持源目标中的链接
宿主机文件copy到容器内
# 宿主机的index.html页面覆盖容器内的index.html页面
docker run -itd --name nginx1 -p 80:80 nginx:1.21.0-alpine
# 创建html文件
echo "yyc" > index.html
# 将文件拷贝到宿主机
docker cp index.html nginx1:/usr/share/nginx/html/index.htm

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ImBujaNL-1688298252690)(file:///Users/yangcun/Documents/学习/Markdown/images/docker.assets/image-20210706172100388.png?msec=1688297976992)]

容器内文件 copy 到宿主机

将容器内的nginx.cnf复制到宿主机中

 docker run -itd --name nginx1 -p 80:80 nginx:1.21.0-alpine
 # 拷贝文件到宿主机
 docker cp nginx:/etc/nginx/nginx.conf /data

十五、docker学习-docker核心docker数据卷,docker,docker,学习,eureka

数据卷

数据卷(Data Volumes)是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器。

注意事项
  • 挂载数据卷,最好是通过run而非create/start创建启动容器,create/start命令创建启动容器后,再挂载数据卷相当麻烦,要修改很多配置文件,但并非不可以。
  • docker官网推荐尽量进行目录挂载,不要进行文件挂载。
宿主机数据卷

bind mounts:容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录或文件中。除了docker之外的进程也可以任意对他们进行修改。

当使用bind mounts时,宿主机的目录或文件被挂载到容器中。容器将按照挂载目录或文件的绝对路径来使用或修改宿主机的数据。宿主机中的目录或文件不需要预先存在,在需要的使用会自动创建。

使用bind mounts在性能上是非常好的,但这依赖于宿主机有一个目录妥善结构化的文件系统。

使用bind mounts的容器可以在通过容器内部的进程对主机文件系统进行修改,包括创建,修改和删除重要的系统文件和目录,这个功能虽然很强大,但显然也会造成安全方面的影响,包括影响到宿主机上Docker以外的进程。

数据覆盖问题
  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
  • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。如果原来容器中的目录有数据,那么原始数据会被隐藏掉。
语法
docker run -v /宿主机绝对路径目录:/容器内目录 镜像名
基础镜像
docker pull mysql:5.7.31
容器目录权限
# 通过 -v 容器内路径: ro rw 改变读写权限 
    ro:readonly 只读 
    rw:readwrite 可读可写 

    docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 
    docker run -it -v /宿主机绝对路径目录:/容器内目录:rw 镜像名 

# 例如: 
    docker run -d -P --name nginx05 -v lagouedu1:/etc/nginx:ro nginx 
    docker run -d -P --name nginx05 -v lagouedu2:/etc/nginx:rw nginx 

ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作! 
运行镜像
# 最好先创建好目录,这里不创建目录权限足够的情况下也会自己创建
docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql mysql:5.7.31 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

十五、docker学习-docker核心docker数据卷,docker,docker,学习,eureka

已知的权限问题

sonatype/nexus3:3.28.1 镜像在数据卷挂在的时候,可以需要进行授权,否则会报错:

# 拉取镜像
docker pull sonatype/nexus3:3.28.1
# 数据卷挂载
docker run -d -p 8081:8081 --name nexus3 -v /data/nexus3/:/nexus-data/ sonatype/nexus3:3.28.1
# 查看容器启动日志 
docker logs -f nexus3 
# 报错信息如下: 
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied 
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied 
OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory 

Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.log 
Warning: Forcing option -XX:LogFile=/tmp/jvm.log 
java.io.FileNotFoundException: ../sonatype-work/nexus3/tmp/i4j_ZTDnGON8hezynsMX2ZCYAVDtQog=.lock (No such file or directory) 
.... 

# 删除容器 
docker rm -f nexus3
# 解决方法
# 查看官网说明文档,需要为挂载目录授权 
chown -R 200 nexus3/
# 运行容器 
docker run -d -p 8081:8081 --name nexus3 -v /data/nexus3/:/nexus-data/ sonatype/nexus3:3.28.1

命名的数据卷

基础镜像
docker pull nginx:1.19.3-alpine
挂载数据卷
docker run -itd --name nginx -p 80:80 -v test-nginx:/etc/nginx nginx:1.19.3- alpine 
# 查看docker数据卷 
docker volume ls 
# 查看lagouedu-nginx宿主机目录 
docker volume inspect test-nginx 
# 进入docker数据卷默认目录 
cd /var/lib/docker/volumes/test-nginx 
# 查看文件 
ls
# 所有的文件docker默认保存在_data目录中 
cd _data 
# 删除容器 
docker rm $(docker stop $(docker ps -aq)) 
# 查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在 
ls

匿名数据卷

基础镜像
docker pull nginx:1.19.3-alpine
挂载数据卷
docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx:1.19.3- alpine 
# 查看docker数据卷 
docker volume ls 
# 查看lagouedu-nginx宿主机目录 
docker volume inspect test-nginx 
# 进入docker数据卷默认目录 
cd /var/lib/docker/volumes//dbd07daa4e40148b11....
# 查看文件 
ls
# 所有的文件docker默认保存在_data目录中 
cd _data 
# 删除容器 
docker rm $(docker stop $(docker ps -aq)) 
# 查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在 
ls

数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。

发现创建好的数据卷容器是处于停止运行的状态,因为使用 —volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态。
十五、docker学习-docker核心docker数据卷,docker,docker,学习,eureka

基础镜像
docker pull centos:7.8.2003 
docker pull nginx:1.19.3-alpine 
docker pull mysql:5.7.31
run命令
docker run
--volumes-from
创建案例

创建一个数据卷容器

docker run -d --name data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003

创建NG两个镜像共同使用一个数据卷

docker run -itd --name nginx01 -p 80:80 --volumes-from data-volume nginx:1.19.3-alpine 
echo "test nginx" > /data/nginx/index.html 
http://宿主机ip
docker run -itd --name nginx02 -p 81:80 --volumes-from data-volume nginx:1.19.3-alpine 
http://宿主机ip:81

创建两个Mysql容器共同使用一个数据卷文章来源地址https://www.toymoban.com/news/detail-516136.html

docker run -itd --name mysql01 --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci

docker run -itd --name mysql02 --restart always --privileged=true -p 3307:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci

到了这里,关于十五、docker学习-docker核心docker数据卷的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Eureka-Server源码核心代码入口

    1、服务端 spring-cloud-netflix-eureka-server中spring.factories中EurekaServerAutoConfiguration 1.1、服务注册 ApplicationResource类的addInstance方法接收请求,在对实例的信息进行验证后,向服务注册中心添加实例。 /注意是POST方法 进入InstanceRegistry的register在这里做了两个功能 父类PeerAwareInstanceReg

    2024年02月03日
    浏览(37)
  • ES核心干货学习(原理及数据结构)

    ES是建立在Lucene基础之上的分布式准实时搜索引擎。 核心:分布式和Lucene全文搜索。 1.2 什么场景需要用ES 1. 业务需要进行大量数据实时检索时,传统关系型数据库无法支撑。 2. 需要进行分词检索,语义检索 3. 需要大数据分析 符合上面特征都可以考虑,如日志收集、订单数

    2024年02月15日
    浏览(37)
  • eureka的docker镜像部署

    项目结构  1.pom.xml文件 2.EurekaServerApplication主函数类 3.application.yml配置文件 4.选择进行打jar包 5.打开linux虚拟机,启动docker镜像,并创建目录为了方便编写自定义镜像  6.创建docker目录,把jar包粘贴过来,并重命名(为了后面调用时方便) 选择新建文件,编写DockerFile文件 选择

    2024年02月06日
    浏览(42)
  • docker专题系列之十五:卸载docker

    一、准备工作 1.杀死docker有关的容器: 2.删除所有docker容器: 3.删除所有docker镜像: 4.停止 docker 服务: 5.删除docker相关存储目录:(分别进行执行以下四个命令) 6.如果删除不掉,则先umount: 7.然后再重新执行上面那步“删除docker相关存储目录”。 二、卸载工作 经过上面一

    2024年02月11日
    浏览(30)
  • Docker详解(十五)——Docker静态IP地址配置

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Docker静态IP地址配置。 在前文Docker详解(十四)——Docker网络类型详解中,我们讲解了Docker网络的四种模式。今天,我们就来实现Docker容器的静态IP地址配置。我们尝试把Docker容器以类似Vmware桥接的方式与物理机处于同一

    2023年04月09日
    浏览(32)
  • ZooKeeper源码解析——学习ApacheZookeeper原理,掌握其核心组件的数据模型、监听通知机制等

    作者:禅与计算机程序设计艺术 随着互联网的飞速发展,各种信息数据越来越多,数据的存储也越来越依赖于分布式文件系统或NoSQL数据库。而传统的单机数据库往往不具备弹性可扩展性和高可用容错能力,在面对海量数据时难免会遇到性能瓶颈。为了解决这一问题,人们又

    2024年02月10日
    浏览(39)
  • Spring Cloud学习笔记:Eureka简介,Eureka简单样例

    这是本人学习的总结,主要学习资料如下 - 马士兵教育 Eureka 是 SpringCloud Nexflix 的核心子模块,其中包含 Server 和 Client 。 Server 提供服务注册,存储所有可用服务节点。 Client 用于简化和 Server 的通讯复杂度。 下面是 Eureka 的简单架构图 每一个服务节点需要在 Eureka Server 中注册

    2024年04月16日
    浏览(50)
  • (十五)docker安装sentinel,客户端配置规则本地持久化

    操作系统: Linux  CentOS 7.3 64位 docker版本: 19.03.8 sentinel版本: 1.8.0 1、拉取镜像   2、运行容器   3.访问sentinel http://192.168.121.132:8858/ 账号密码默认都是sentinel ​ sentinel配置的规则默认是存在内存里的,不够稳定,所以我们需要持久化到本地文件中。 1.新建持久化处理类 在我

    2024年02月08日
    浏览(48)
  • Eureka 学习笔记3:EurekaHttpClient

    版本 awsVersion = ‘1.11.277’ EurekaTransport 用于客户端和服务端之间进行通信,封装了以下接口的实现: ClosableResolver 接口实现 TransportClientFactory 接口实现 EurekaHttpClient 接口实现及其对应的 EurekaHttpClientFactory 接口实现 EurekaHttpClientFactory 是 上层工厂接口 (A top level factory interface)

    2024年02月15日
    浏览(31)
  • 微服务学习 Eureka注册中心

    服务调用时候出现问题,当服务者很多时候,比如不同的端口。消费者如何找到服务者的地址?又如何判断服务者是否健康。 Eureka基本原理: 总结:如果有多个服务提供者,消费者该如何选择? 搭建Eureka注册中心: 1.引入依赖 2.编写启动类,添加@EnableEurekaServer注解 这里在启动

    2024年04月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包