首页 > 其他分享 >2.dockerfile指令及数据卷

2.dockerfile指令及数据卷

时间:2023-07-24 14:06:15浏览次数:32  
标签:容器 ubuntu2004 -- dockerfile nginx 指令 root docker 数据

dockerfile指令总结

FROM:指定基础镜像
LABEL:指定镜像元数据,即标签
RUN:指定shell命令
CMD:容器启动命令
EXPORT:暴露端口
ENV:设置环境变量
ADD:复制和解包文件,增强版的copy
COPY:复制本地宿主机的文本到容器
VLOUME:匿名卷
WORKDIR:指定工作目录
ARG:构建参数
USER:指定当前用户
ENTRYPOINT:入口点,类似于CMD,配置容器启动后执行的命令及参数
HEALTHCHECK:健康检查

容器的分层

Lowerdir:基础镜像层,只读
mergeddir:容器变化的数据存放处,可读写,对应merged目录,新增和镜像的数据
upperdir:容器的文件系统,对应的是diff目录,可读写,新增加的数据
workdir:临时工作区,使用过程中用户不可见


#由于容器的数据存放在/var/lib/docker/overlay2/目录下,随着容器的删除,数据也会删除,所有我们需要建立数据卷进行管理,让数据不会随着容器的删除而删除。

数据卷

数据卷分类
指定宿主机目录或文件:
匿名卷:
命名卷:
数据卷使用方法:
1. -v 宿主机路径:容器路径[:ro]     #可加权限
2. -v 容器内路径    #匿名卷,只指定容器内路径,没有指定宿主机路径信息,宿主机自动生成/var/lib/docker/volumes/<卷ID>/_data目录,并挂载至容器指定路径
3. -v 卷名:容器目录路径      #命名卷将固定的存放在/var/lib/docker/volumes/<卷名>/_data
       #也可以先创建卷名:docker volume create <卷名>
将宿主机的目录挂载到容器实现数据卷:
[root@ubuntu2004 ~]#docker run -d -p 80:80 --name nginx01 -v /opt/test:/data/test nginx:v1.22.0-2022-10-18
df可以查看挂载情况:
root@baf68e8f4d41:/# df
在宿主机创建文件,容器里面也可以看到:
[root@ubuntu2004 test]#touch M50.test
root@baf68e8f4d41:/# ls /data/test/
M50.test
匿名卷:
创建容器的数据卷,目录/nginx/www,默认同步到宿主机的/var/lib/docker/volumes/下面
[root@ubuntu2004 ~]#docker run -d -p 80:80 --name nginx01 -v /nginx/www nginx:v1.22.0-2022-10-18 
在宿主机创建文件,无容器查看同步情况
[root@ubuntu2004 ~]#touch /var/lib/docker/volumes/e9e468de9ed3badac8885274eaa1c592187a12a62c9bba62362e50660bb580df/_data/123.txt
[root@ubuntu2004 ~]#docker exec nginx01 ls -l /nginx/www
total 0
-rw-r--r-- 1 root root 0 Oct 20 02:07 123.txt
命名卷:
可以先创建卷名,文件默认路径在/var/lib/docker/volumes/下:
[root@ubuntu2004 ~]#docker volume create volume1
volume1
[root@ubuntu2004 ~]#docker inspect volume1 
[
    {
        "CreatedAt": "2022-10-20T10:12:10+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/volume1/_data",
        "Name": "volume1",
        "Options": {},
        "Scope": "local"
    }
]
将宿主机的卷名挂载到容器:
[root@ubuntu2004 ~]#docker run -d -p 80:80 --name nginx01 -v volume1:/nginx/www nginx:v1.22.0-2022-10-18 

此时删除容器后,数据卷不会删除,数据依然保留
手工不创建,直接跟卷名,也会自动创建数据卷文件
实现多容器共享一个数据卷:
[root@ubuntu2004 ~]#docker run -d -p 80:80 --name nginx01 -v volume1:/apps/nginx/html nginx:v1.22.0-2022-10-18 
5b41294b1fb0a807d67560be65d2c3afb618c87634a8418629cc22fafe521e34
[root@ubuntu2004 ~]#docker run -d -p 81:80 --name nginx02 -v volume1:/apps/nginx/html nginx:v1.22.0-2022-10-18 

挂载时加只读,时容器只读,不可写

实战案例:实现 wordpress 持久化

[root@ubuntu2004 ~]#docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e  MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 --name  mysql -d -v /data/mysql:/var/lib/mysql --restart=always mysql:8.0.29-oracle

[root@ubuntu2004 ~]#docker run -d -p 80:80 --name wordpress -v  /data/wordpess:/var/www/html --restart=always wordpress:php7.4-apache

网站上传的数据在:
[root@ubuntu2004 nginx]# tree /data/wordpess/wp-content/uploads/

数据卷容器

[root@ubuntu2004 ~]#docker run -d -p 80:80 --name nginx01 -v volume1:/apps/nginx/html nginx:v1.22.0-2022-10-18 

共享nginx01容器的挂载数据卷,实现容器数据卷共享:
--volume-from
[root@ubuntu2004 ~]#docker run -d -p 81:80 --name nginx02 --volume-from nginx01 nginx:v1.22.0-2022-10-18 
[root@ubuntu2004 ~]#docker run -d -p 82:80 --name nginx03 --volume-from nginx01 nginx:v1.22.0-2022-10-18

第一个容器称为server,后续基于server创建的成为client

数据卷容器备份

#MySQL容器默认使用了匿名数据卷
[root@ubuntu1804 ~]#docker run -d --name mysql -p 3306:3306 -e  MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30

#备份数据库
[root@ubuntu1804 ~]#docker run -it --rm --volumes-from mysql -v $(pwd):/backup  centos tar xvf /backup/mysql.tar -C /var/lib/mysql

标签:容器,ubuntu2004,--,dockerfile,nginx,指令,root,docker,数据
From: https://blog.51cto.com/lmm01/6834428

相关文章

  • vue项目使用vue-virtual-scroll-list虚拟滚动超多千万条数据 cv可用案例
    当我们有大量数据需要显示在列表中时,传统的滚动列表会将所有数据渲染到DOM中,导致性能下降和内存占用增加。虚拟滚动列表通过仅渲染当前视窗内可见的一小部分数据,动态地根据滚动位置更新列表内容,从而实现更高效的列表渲染。vue-virtual-scroll-list是一个用于Vue.js的虚拟滚动......
  • 使用mysqldump备份数据库时报错表不存在,提示信息Table 'mysql.engine_cost' doesn't e
    问题描述:使用mysqldump备份数据库时报错表不存在,提示信息Table'mysql.engine_cost'doesn'texist,如下所示:数据库:mysql5.7.211、异常重现[mysql@hisdb1~]$mysqldump-uroot-S/mysql/data/mysql.sock-P3306--max_allowed_packet=1G--master-data=2--single-transaction......
  • 4.镜像制作方式和dockerfile(Ubuntu、nginx)
    制作镜像方式dockercommit通过修改现有的容器,将之手动构建为镜像dockerbuild通过dockerfile文件,批量构建为镜像用镜像做成容器,在容器的基础上定制一个镜像手动制作镜像:commit基于busybox容器创建busybox:v1.0镜像[root@ubuntu2004~]#dockercommit-ali-m"initbusybo......
  • RUBY实践—数据库简单操作
    开发环境:Ruby:1.9.1Rails:2.3.5Rake:0.8.7Rack:1.0.1Mysql:5.0.9Ruby-mysql:mysql-2.8.1-x86-mswinIDE:RubyMine2.0.1 数据库准备:database:dbdevelopmentuser:crystalpassword:crystal 一、创建Ruby项目RorTest 二、修改database.yml这里只启用development环境数据库,修改配置文......
  • 【BP分类】基于遗传算法优化BP神经网络的数据分类附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 数据分析方法的详细解释和典型应用场景
    描述性统计分析:描述性统计分析是通过计算和组织数据来描述数据集的特征和属性。它提供了数据的中心趋势、离散程度和分布情况等重要信息。典型应用场景:描述性统计分析在各个领域都有广泛应用。例如,在市场调研中,可以使用描述性统计方法来概括调查数据,得出样本的平均值、中位数、......
  • .net core controller获取post的json数据
    如何在.NETCoreController中获取POST的JSON数据在开发Web应用程序时,我们经常需要从客户端发送一些数据到服务器端。一种常见的方式是使用HTTP的POST方法来发送数据。在.NETCore中,我们可以使用Controller来处理这些请求,并从POST请求中获取JSON数据。创建一个.NETCoreWebAPI......
  • 怎么查询mysql数据库重启记录
    项目方案:查询MySQL数据库重启记录1.简介MySQL是一种常见的关系型数据库管理系统,它在运行过程中可能会出现各种问题,包括数据库重启。在开发和维护过程中,我们经常需要查询数据库重启的记录,以便进行故障排查和性能优化等工作。本项目方案将介绍如何查询MySQL数据库的重启记录,包括......
  • 利用Abp过滤器实现业务数据“回收站”功能
    目录原理创建过滤器使用过滤器查询删除恢复新版Volo.Abp的控制器配置 原理回收站是当用户删除一条记录时,不是直接从数据库中删除,而是将其放入“回收站”,以便用户可以在需要时恢复数据。在Abp框架中,若实体实现了ISoftDelete,则将实体标记为删除时不是物理删除,而......
  • DPI数据挖掘
    DPI数据挖掘的流程对于一位刚入行的小白来说,实现"DPI数据挖掘"可能是一项具有挑战性的任务。下面我将向你介绍整个流程,并提供每一步所需的代码及其注释,帮助你完成这个任务。步骤下表展示了"DPI数据挖掘"的步骤及其大致顺序:步骤描述1.数据收集收集需要进行数据挖掘的......