文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

在过去的几个月里,我们使用docker完成了相当多的开发工作。有一部分技巧我们始终在一遍遍的使用。在这里我分享三个给一起使用docker的开发人员。

移除所有容器

在开发过程中必定会遇到有一大堆没有运行的容器或是一堆没有用的容器在运行的情况。我们最终总是需要清除所有的容器来一个新的开始。下面是我们怎么做的:

docker ps -a -q | awk '{print $1}' | xargs --no-run-if-empty docker rm -f

它相当清晰明了——它列出了所有容器然后用它们的ID移除每一个容器。这儿有点特殊情形,如果你在Window下使用UNIX命令行工具(例如你可以使用MinGW)你仍然可以这样使用它。另外在Windows上,你能够使用:

第 1 段(可获 2 积分)

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm -f %i

将Docker的Unix套接字(Socket)挂载为一个卷

好吧,我们使用Docker的方式比标准用例先进一些,但令人吃惊的是,我们最后还是频繁使用了这一点。这是因为我们总是不得不在一个Docker容器的内部创建一个Docker容器。实现这一点的最好方式是,将Docker守护进程(Daemon)的Unix Socket作为一个卷挂载到主机上与容器相同的位置。这意味着你在运行 docker run时增加下面的语句:

-v /var/run/docker.sock:/var/run/docker.sock 

现在,在容器内部,假设你有一个Docker客户端(无论是命令行的,还是Java的)连接到那个Unix Socket。它实际上是在与主机上的Docker Daemon通信。这意味着如果你利用这个卷在容器内部创建一个容器,新容器会使用运行在主机上的Deamon创建(也就是说它会是拥有这个卷的容器的兄弟容器)!这一点很有用!

第 2 段(可获 2 积分)

考虑用 Terraform 代替 Compose

Terraform 很棒的一点是很容易建立基础设施。对于我们来说,当我们运行云应用时,基础设施是指AWS;当我们在本地运行时,基础设施是指Docker。我们有多个容器来运行我们的应用——在开发的时候,我们将所有容器在本地运行;在云上,我们将容器运行在多个EC2实例上,每个实例部署了越来越多的容器。这与Terraform很对路。我们可以仅仅使用Docker生产者(Provider)配置资源来运行本地的设置,而且我们能够将其与AWS生产者共用来运行我们云上的设置。注意Terraform是用于基础设施设置的,因此你在做较高层次的事情——你会发现为了使用Terraform,你需要利用其他工具做一些准备。比如说,你不能用Dockerfile——你需要首先制作自己定制的镜像,然后才能利用Terraform来调用它们。

第 3 段(可获 2 积分)

文章评论