预计阅读时间: 6分钟
事实证明,以下开发模式对于使用Docker构建应用程序的人很有帮助。如果您发现了我们应该添加的内容,请 告诉我们。
在启动容器或服务时,小镜像可以更快地通过网络,并且可以更快地加载到内存中。有一些经验法则可以保持镜像尺寸小:
openjdk
镜像,而不是从通用ubuntu
镜像开始并openjdk
作为Dockerfile的一部分进行安装maven
镜像构建Java应用程序,然后重置为tomcat
镜像并将Java工件复制到正确的位置以部署您的应用程序,所有这些都在同一个Dockerfile中。这意味着您的最终镜像不包含构建所引入的所有库和依赖项,而只包含运行它们所需的工件和环境
如果您需要使用不包含多级构建的Docker版本,请尝试通过最小化RUN
Dockerfile 中单独命令的数量来减少镜像中的图层数。您可以通过将多个命令合并为RUN
一行并使用shell的机制将它们组合在一起来实现此目的。考虑以下两个片段。第一个在镜像中创建两个图层,而第二个图层仅创建一个图层
RUN apt-get -y update
RUN apt-get install -y python
RUN apt-get -y update && apt-get install -y python
prod
或者test
,例如),稳定性或在不同环境中部署应用程序时有用的其他信息。不要依赖自动创建的latest
标签。docker stack deploy
处理任何镜像,而不是使用 docker pull
。这样,您的部署不会尝试从已关闭的节点中提取。此外,当新节点添加到群组中时,会自动提取镜像在群组服务的节点之间共享数据存在限制。如果您使用Docker for AWS或 Docker for Azure,您可以使用Cloudstor插件在您的swarm服务节点之间共享数据。您还可以将应用程序数据写入支持同时更新的单独数据库中。
当您检查对源代码管理的更改或创建拉取请求时,请使用 Docker Cloud或其他CI / CD管道自动构建和标记Docker镜像并对其进行测试。Docker Cloud还可以将经过测试的应用直接部署到生产环境中
通过要求您的开发,测试和安全团队在将镜像部署到生产环境之前对其进行签名,可以进一步了解Docker EE。这样,您可以确保在将镜像部署到生产环境之前,它已经过测试并由开发,质量和安全团队签署。
发展 | 生产 |
---|---|
使用bind mounts为您的容器提供对源代码的访问权限。 | 使用卷来存储容器数据。 |
使用Docker for Mac或Docker for Windows。 | 如果可能,请使用Docker EE,并使用用户映射以更好地隔离Docker进程与主机进程。 |
不要担心时间漂移。 | 始终在Docker主机上和每个容器进程内运行NTP客户端,并将它们全部同步到同一个NTP服务器。如果使用swarm服务,还要确保每个Docker节点将其时钟与容器同步到同一时间源。 |