使用 docker run
命令创建容器并挂载数据卷是非常常见的做法。数据卷(volume)是一种存储在宿主机文件系统上的数据存储方式,它可以绕过 Union FS 的限制,提供持久化的存储。下面是如何使用 docker run
命令来创建一个挂载了宿主机目录作为数据卷的容器。
基本语法
docker run -d --name some-name -v /host/directory:/container/directory some-image
这里 -v
参数用来指定要挂载的数据卷。格式是 /host/directory:/container/directory
,其中 /host/directory
是宿主机上的目录,而 /container/directory
是容器内的目录。
示例
假设你想运行一个 MySQL 数据库容器,并且希望将数据持久化到宿主机的一个目录中,可以这样做:
- 首先确保 Docker 服务正在运行。
- 创建一个用于存放 MySQL 数据的目录(如果尚未存在):
mkdir -p /mnt/data/mysql
- 使用
docker run
命令启动 MySQL 容器并挂载数据卷:docker run -d --name mysql-container \ -v /mnt/data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ mysql:latest
在这个例子中:
-d
表示在后台运行容器。--name mysql-container
给容器命名。-v /mnt/data/mysql:/var/lib/mysql
将宿主机的/mnt/data/mysql
目录映射到容器内的/var/lib/mysql
。-e MYSQL_ROOT_PASSWORD=my-secret-pw
设置 MySQL root 用户的密码。mysql:latest
指定从 Docker Hub 中拉取最新的 MySQL 镜像并启动容器。
注意事项
- 确保宿主机路径和容器内部路径都是正确的,并且宿主机上的路径是可写的。
- 如果你是在不同的机器上重复使用相同的宿主机路径,请确保权限设置正确,以避免权限问题。
- 如果你在停止并删除容器后仍然想保留数据,只需要保证宿主机的数据卷目录不被删除即可。
- 在生产环境中,建议通过配置文件或环境变量来传递敏感信息,而不是直接在命令行中指定。