我有一个目前在我的ubuntu服务器上运行的docker容器。
容器基本上是在运行nginx和mysql,但是目前它没有使用卷,所以如果我销毁容器,我的数据就会消失。
使用以下内容更新了DockerFile:
VOLUME ["/var/lib/mysql", "/opt/nginx/www"]
我想在我的主机上创建以下文件夹,如:
/home/ubuntu/container_data/container1/mysql
/home/ubuntu/container_data/container1/www
如何启动容器并使用我在上面为mysql和我的nginx / www文件创建的2个文件夹。
我很困惑VOLUME命令在DockerFile中的作用,以及启动容器时-v命令的作用。它们有什么关系?真的希望有人可以帮我解释一下。
另外,我是否可以使用已经运行的容器来执行此操作,或者我是否必须停止并销毁我当前使用卷设置的容器b / c?
答案 0 :(得分:2)
如何启动容器并使用我在上面为mysql和我的nginx / www文件创建的2个文件夹。
docker run -v /home/ubuntu/container_data/container1/mysql:/var/lib/mysql -v /home/ubuntu/container_data/container1/www:/opt/nginx/www image_name
上面的命令会在运行时将主机目录作为数据卷挂载到容器中。 -v
标志的模式是:
-v /path/on/host:/path/in/container
我很困惑VOLUME命令在DockerFile中的作用,以及启动容器时-v命令的作用。它们有什么关系?真的希望有人能为我解释一下。
我认为在Dockerfile中声明一个卷在功能上等同于使用-v
CLI标志,如下所示:(更正欢迎)
docker run -v /data image_name
VOLUME /data
创建容器时会创建卷的装入点。 More info from Docker docs
在使用export command销毁文件之前,您可以从现有容器中检索文件。
答案 1 :(得分:1)
我很困惑VOLUME命令在DockerFile中执行的操作,以及 启动容器时-v命令的作用。他们怎么样 有关?真的希望有人能为我解释一下。
Dockerfile中的VOLUME
命令只是将目录标记为“不是容器文件系统的一部分”,这样它的内容将不会包含在生成的图像中,也不会在运行时{{1 }}。它还使该目录可用于以docker commit
参数启动的其他容器。
--volumes-from
命令行选项在给定简单路径名时执行与-v
命令相同的操作。给定VOLUME
参数时,在hostpath:containerpath
容器内安装指定的hostpath
。在任何一种情况下,都可以通过containerpath.
将卷提供给其他容器。
在--volumes-from
中没有必要使用VOLUME
指令才能使用Dockerfile
命令行选项,但在任何情况下,您通常都会清楚地标识数据目录
对于您的两个目录:
-v
你会:
/home/ubuntu/container_data/container1/mysql
/home/ubuntu/container_data/container1/www