一、docker 数据卷
实现数据持久性保存数据的2种方式:
1、数据卷Volumes
2、挂载主机目录 Bind mounts
Volumes方式下:容器内的数据被存放到宿主机一个特定的目录下 /var/lib/docker/volumes/ 这个目录
只有Docker可以管理,其他进程不能修改,推荐该方式
Bind mounts 方式,容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录
或文件中,docker之外的进程也可以任意对他们进行修改。
数据卷Volumes 方式:
通过命令 docker volume create 创建一个指定的卷,也可以在docker进程在创建容器或服务的过程中创建
特性:
对数据卷的修改会立马生效
对数据卷的更新不会影响镜像
数据卷默认会一直存在,即使容器被删除
实例:创建一个数据卷
# docker volume create my-vol
查看所有数据卷
# docker volume ls
查看指定数据卷的信息
# docker volume inspect my-vol
启用一个挂载数据卷的容器
# docker run -d -P --name web --mount source=myvol,target=/webapp training/webapp python app.py
-d 容器后台运行
-P 容器启动一个随机端口
创建一个名为web的容器,并加载一个数据卷到容器的/webapp目录下
使用了--mount 标记来将数据卷挂载到容器,此案例一次挂载了多个数据卷
target=/webapp 表示容器内的一个目录
training/webapp 镜像名称
python app.py 容器启动后,第一个要执行的操作
创建一个容器卷
[root@localhost ~]# docker volume create myvol myvol
查看所有容器卷
[root@localhost ~]# docker volume ls DRIVER VOLUME NAME local myvol
查看某个容器卷的详细信息
[root@localhost ~]# docker volume inspect myvol [ { "CreatedAt": "2024-12-04T19:29:31+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/myvol/_data", "Name": "myvol", "Options": null, "Scope": "local" } ]
删除所有未使用的数据卷
# docker volume prune
docker数据卷管理 bind mounts的使用
--mount 键值对组成 <key>=<value>
type: 可以是bind , volume 或 tmpfs 这里一直使用volume
source : volumes的名字 匿名volume可以胜利 srouce缩写src
destination : 挂载到容器中的文件或目录路径,也可以缩写dst或者使用target
readonly: 指定挂载在容器中为只读
数据卷生命周期独立与容器,docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收机制来处理
没有任何容器引用的数据卷。 docker rm -v 可以在删除容器的时候删除数据卷
挂载主机目录 Bind mounts
# docker run -d -P --name web1 --mount type=bind,srouce=/src/webapp1,target=/opt/webapp training/webapp python app.py
本地目录的路径必须是绝对路径,否则docker会报错
# docker run -d -P --name web1 --mount type=bind,srouce=/src/webapp1,target=/opt/webapp,readonly training/webapp python app.py
readonly 表示只读
二、使用Dockerfile 定制镜像
编写一个简单的Dockerfile文件
是一个文件文件,其内包含了一条条指令,每一条指令构建一层,定制一个nginx镜像为例:
在一个空目录中,建立一个文本文件命名为Dockerfile
mkdir mynginx cd mynginx touch Dockerfile
内容为:
FROM nginx RUN echo '<h1>hello,Docker</h1>' > /usr/share/nginx/html/index.html
制作镜像
docker build -t 镜像名称:版本 .
. 表示当前路径
-t 表示为镜像打标签
docker build -t mynginx:v1 .