计算机网络/计算机科学与应用/系统/运维/开发

12.4 Docker学习笔记总结

一、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 .



世间最珍贵的不是“得不到”和“已失去”,而是现在能把握的幸福。

评论

^