DOCKER02_镜像如何存储、镜像加载原理、容器数据卷、可视化界面-Portainer(二)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ③. 容器如何挂载 volume、bindmount、temfsmount①. 每一个容器里面的内容,支持三种挂载方式②. 直接挂载 volume(卷)③. 手动挂载 bind mount④. 使用总结

③. 容器如何挂载 volume、bindmount、temfsmount


①. 每一个容器里面的内容,支持三种挂载方式


①. docker自动在外部创建文件夹自动挂载容器内部指定的文件夹内容(Dockerfile VOLUME指令的作用)


②. 自己在外部创建文件夹,手动挂载(以/开头的)


③. 可以把数据挂载到内存中(基本不用)


④. Volumes(卷):存储在主机文件系统的一部分中,该文件系统由Docker管理(在Linux上的根目录是"/var/lib/docker/volumes/"(非Docker进程不应修改文件系统的这一部分,卷是在Docker中持久存储数据的最佳方法


Bind mounts(绑定挂载) 可以在任何地方存储在主机系统上。它们甚至可能是重要的系统


文件或目录。Docker主机或Docker容器上的非Docker进程可以随时对其进行修改


tmpfs mounts(临时挂载) 仅存储在主机系统的内存中,并且永远不会写入主机系统的文件系统


微信图片_20220106193146.png


⑤. 管理卷(容器卷是用来做持久化处理的,有点类似我们Redis里面的rdb和aof文件)


docker volume create xxx:创建卷名


docker volume inspect xxx:查询卷详情


docker volume ls: 列出所有卷


docker volume prune: 移除无用卷


②. 直接挂载 volume(卷)


①. 具名卷使用 不以/开头的路径,Docker容器内部绝对路径:叫绑定(docker会自动管理,docker不会把他当前目录,而把它当前卷)


docker run -d --name mynginxvolume -p 30001:80 -v nginxhtml:/usr/share/nginx/html nginx


-v不以绝对路径方式:
(1). 先在docker底层创建一个你指定名字的卷(具名卷)nginxhtml
(2). 把这个卷和容器内部目录绑定
(3). 容器启动以后,目录里面的内容就在卷里面存着
[root@i-id8g0yu9 nginx]# docker run -d --name mynginxvolume -p 30001:80 -v nginxhtml:/usr/share/nginx/html  nginx
2d1e2fadafbd81474234defd42e058c7b817796f91ad3e5de03b50a6d4ca2e16
[root@i-id8g0yu9 nginx]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                     NAMES
2d1e2fadafbd   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:30001->80/tcp, :::30001->80/tcp   mynginxvolume
[root@i-id8g0yu9 ~]# docker volume --help
Usage:  docker volume COMMAND
Manage volumes
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
[root@i-id8g0yu9 ~]# docker volume ls
DRIVER    VOLUME NAME
local     nginxhtml
[root@i-id8g0yu9 ~]# docker volume inspect nginxhtml
[
    {
        "CreatedAt": "2021-04-17T15:39:42+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginxhtml/_data",
        "Name": "nginxhtml",
        "Options": null,
        "Scope": "local"
    }
]
[root@i-id8g0yu9 ~]# cd /var/lib/docker/volumes/nginxhtml/_data
[root@i-id8g0yu9 _data]# ls
50x.html  index.html


②. -v /usr/share/nginx/html 效果:匿名卷 (什么都不写也不要加冒号,直接写容器内的目录)


[root@i-id8g0yu9 _data]# docker run -d --name mynginxvolume2 -v /usr/share/nginx/html -p 30002:80 nginx
44efbcbbb23325714fd6285cd5823f4d97a9937ebc34b35a7ee6b9d5555f3a5c
[root@i-id8g0yu9 _data]# docker volume ls
DRIVER    VOLUME NAME
local     958a10da49ff92c048071292cb70dd329c080863aa3394eb9c0bc8d7204962f4
local     nginxhtml
[root@i-id8g0yu9 _data]# docker volume inspect 958a10da49ff92c048071292cb70dd329c080863aa3394eb9c0bc8d7204962f4
[
    {
        "CreatedAt": "2021-04-17T16:06:48+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/958a10da49ff92c048071292cb70dd329c080863aa3394eb9c0bc8d7204962f4/_data",
        "Name": "958a10da49ff92c048071292cb70dd329c080863aa3394eb9c0bc8d7204962f4",
        "Options": null,
        "Scope": "local"
    }
]
[root@i-id8g0yu9 _data]# cd /var/lib/docker/volumes/958a10da49ff92c048071292cb70dd329c080863aa3394eb9c0bc8d7204962f4/_data
[root@i-id8g0yu9 _data]# ls
50x.html  index.html


③. 手动挂载 bind mount


①. bind mount,文件挂载没有在外部准备好内容而导致的容器启动失败问题(一定要防止空挂载问题)


②. docker run -d -P -v /root/nginxconf:/etc/nginx/ -v /root/nginxhtml:/usr/share/nginx/html --name=nginx999 nginx

(一定要提前把/nginxconfig和nginxhtml以及里面的东西提前准备好,不然会出现空挂载问题)


③. 参考Nginx的安装步骤


④. 使用总结


  • ①. 如果自己开发测试,用-v绝对路径的方式


  • ②. 如果是生产环境建议用卷


  • ③. 除非特殊/bin/docker需要挂载主机路径的则操作绝对路径挂载
相关文章
|
3天前
|
JavaScript 前端开发 数据安全/隐私保护
阿里云云效操作报错合集之流水线中获取不到CI_COMMIT_REF_NAME变量,导致docker镜像打包失败,什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
3天前
|
运维 Serverless 文件存储
函数计算产品使用问题之在利用Docker镜像部署应用时,容器内的应用如何能访问函数计算配置的NAS挂载
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4天前
|
IDE Serverless 开发工具
函数计算产品使用问题之如何使用Docker镜像作为执行环境
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4天前
|
存储 Serverless 对象存储
函数计算产品使用问题之项目打包为docker镜像,该如何部署上去
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
15天前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
|
12天前
|
前端开发 安全 数据库
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
|
9天前
|
NoSQL Redis Docker
使用 Docker Compose 接管现有容器的文档
使用 Docker Compose 接管现有容器的文档
24 2
|
12天前
|
Cloud Native 安全 Docker
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
|
9天前
|
存储 关系型数据库 MySQL
解读 MySQL 容器信息:`docker inspect` 字段详解
解读 MySQL 容器信息:`docker inspect` 字段详解
25 1
|
12天前
|
Linux Docker 容器
蓝易云 - net.ipv4.ip_forward=0导致docker容器无法与外部通信
完成以上步骤后,Docker容器应该能够正常与外部通信了。
14 2