想在我运行的Docker容器中使用卷

时间:2015-02-24 22:07:57

标签: ubuntu docker

我有一个目前在我的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?

2 个答案:

答案 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