使用Docker容器

时间:2014-12-20 05:19:25

标签: docker

我正在尝试了解如何使用Docker,现在已经在Ubuntu 14.04盒子上安装了Docker。我希望能够轻松地在堆栈组合之间切换。典型的堆栈

  • Ubuntu + MariaDB + Apache + PHP
  • CentOS + ditto
  • Ubuntu + MongoDB + Nginx + PHP

从我到目前为止阅读的文档来看,我相信我可以通过两种方式做到这一点

  1. 为每个加载单独的容器 - 对于Ubuntu为1,对于MariadB为1,对于Apache + PHP为1,并将它们连接在一起
  2. 为整批定义一个容器 - 即每个发行版+ db + server一个容器......
  3. 我还没有得到的是 - 当我使用这样的系统并且数据库受到更改时,我希望能够在下次重用相同配置时将这些更改生效。这需要我将容器保存为tar存档,然后在需要时加载它?在这种情况下,至少有那些容易被用户修改为容器的容器是否有意义?

    最后 - 假设我已经完整堆栈并运行(无论是作为单独的链接容器还是作为一个巨型容器)。现在我浏览到所有安装的IP地址。基础Ubuntu框没有安装Web服务器。我是否会自动到达在Docker容器内运行的Apache实例,或者我是否需要告诉系统需要这样做?

    我是Docker新手,所以我的一些问题可能很天真。不过我会非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

关于此事,我的2美分是您应该使用单独的链接容器 - 这只是 Docker方式。一个容器通常托管一个应用程序(例如数据库或Web服务器)。

当您使用需要持久性数据的应用程序(例如数据库)时,可以采用的方法是在docker容器上安装卷。这可以通过 docker run 命令的 -v 标志来实现。

docker run -v /some/local/dir:/some/dir/in/container my/mariadb

这意味着容器文件夹 / some / dir / in / container 中的数据将映射到主机系统的本地文件夹,因此当您重新启动容器时,数据仍然可用。还可以使用其他最佳实践,例如数据卷和 - volumes-from 标志。所有这些都在docker docsdocker run reference

中进行了描述

如果您启动带有Web服务器的容器(在您的情况下为Apache),则EXPOSE指令可用于公开,例如容器上的端口80。要将其链接到主机系统,需要通过 -p -P 进行端口链接。 -p 标志可以像这样使用:

docker run -p 80:80 my/apache

上面的命令将主机上的端口80链接到容器上的端口80。您还可以使用 -p 标志绑定到特定主机接口(例如127.0.0.1)。有关端口映射的更多信息,请参见docker docs以及Linking Containers部分。

答案 1 :(得分:1)

  
    
      

为上述每个容器装入单独的容器并将它们连接在一起

    
  

这将导致3个Dockerfiles,每个都有一个EXPOSE命令,这样,当你的容器启动时,在你的计算机上,如果你启动 http://localhost/1234(这是一个例子)你将访问第一个容器(MariaDB + Apache + PHP),并使用 http://localhost/2345您将获得CentOS + ditto,依此类推。

看看

https://docs.docker.com/reference/builder/#expose

并查看

docker inspect --format' {{.NetworkSettings.IPAddress}}'容器