Skip to content

Docker 数据映射与挂载

数据卷映射

通过数据卷 ( Volume ) 映射容器中的数据到宿主机后,可实现容器数据的持久化

数据卷在容器被删除后任然保留,并且可以在多个容器之间共享

zsh
% docker run \
    # 其他选项
    -v [数据卷名]:[容器中路径] \
    [镜像名:版本]
例子:使用数据卷持久化 PostgreSQL 容器中的数据
zsh
% docker run \
    --name sample_db \
    -p 5432:5432 \
    -v sample_db—_data:/var/lib/postgresql/data \ 
    -d \
    postgres
例子:使用数据卷持久化 Nginx 容器中的配置信息
zsh
% docker run \
    --name sample-nginx \
    -p 80:80 \
    -v /app/xxx:/usr/share/nginx/html \
    -v sample-nginx-config:/etc/nginx \ 
    -d \
    nginx

目录挂载

在启动容器时将宿主机中的某个目录挂载到容器中,并保持二者的实时同步

在容器内外对该目录进行修改时都会影响并立即反应给另一方

zsh
% docker run \
    # 其他选项
    -v [宿主机中路径]:[容器中路径] \
    [镜像名:版本]
例子:将宿主机的/app/xxx/挂载到 Nginx 容器中的/usr/share/nginx/html/
zsh
# 在宿主机中创建目录与文件
% mkdir /app/xxx && cd /app/xxx
% echo "Hello" > index.html

# 启动容器,并将宿主机中目录挂载到容器
% docker run \
    --name sample-nginx \
    -p 80:80 \
    -v /app/xxx:/usr/share/nginx/html \ 
    -v sample-nginx-config:/etc/nginx \
    -d \
    nginx
例子:基于当前项目目录中的 Dockerfile 创建容器,并将当前目录挂载到容器中的/app/
zsh
% cd sample_project

# 构建容器镜像
% docker build \
    -t sample_project:1.0.0 \
    -f ./Dockerfile \
    .

# 启动容器,并挂载当前目录挂载到容器
% docker run \
    --name sample_project \
    -p 8080:8080 \
    -v $(pwd):/app \ 
    -d \
    sample_project:1.0.0
sample_project/
├─ ...
└─ Dockerfile

常用数据卷命令

查看

zsh
# 查看所有的数据卷
% docker volume ls

# 查看所有的数据卷的ID
% docker volume ls -q

删除

删除数据卷

zsh
# 删除一个数据卷
% docker volume rm [数据卷名]

# 删除所有的数据卷
% docker volume rm ${docker volume ls -q}