docker - 决定何时使用 'docker run' 与 'docker start' 以及使用给定图像的最新版本的策略

标签 docker

我正在对接我们的一些服务。对于我们的开发环境,我想让我们的开发人员尽可能简单,所以我正在编写一些脚本来管理 dockerized 组件。我希望开发人员能够启动和停止这些服务,就像它们是非 dockerized 一样。我不希望他们担心创建和运行容器与停止和启动以及已经创建的容器。我在想这可以使用 Fig 来处理。要创建容器(如果它不存在)并启动服务,我会使用 fig up --no-recreate。要停止服务,我会使用 fig stop

我还想确保开发人员正在运行使用最新镜像构建的容器。换句话说,有些东西会检查我们的 Docker 注册表中是否有更高版本的镜像。如果是这样,该图像将被下载并运行以从该图像创建一个新容器。目前,我似乎必须使用 docker 命令列出注册表的内容(docker search)并将其与现有的本地容器(docker ps -a) 添加一些 greping 和 awking 或使用 Docker API 来实现相同的目的。

任何持久性数据都将写入已挂载的卷,因此数据应在创建新容器后继续存在。

这似乎是一种常见的模式,所以我想知道其他人是否考虑过这种情况。

最佳答案

这就是我现在决定为我们的 Neo4j Docker 镜像做的事情:

我围绕 docker run 编写了一个 shell 脚本,它接受端口的命令行参数、主机上的数据库持久性目录、主机上的日志文件持久性目录。它执行一个 docker run 命令,如下所示:

docker run --rm -it -p ${port}:7474 -v ${graphdir}:/var/lib/neo4j/data/graph.db -v ${logdir}:/var/log/neo4j  my/neo4j

默认端口为 7474,graphdir 为 $PWD/graph.db,logdir 为 $PWD/log。

--rm 在退出时移除容器,但是数据库和日志保存在主机的文件系统上。所以周围没有容器。

-it 允许容器和在其中运行的 Neo4j 服务接收信号,以便服务可以正常关闭(Neo4j 服务器在 SIGINT 上正常关闭)并通过点击退出容器^C 或如果开发人员将其置于后台,则向其发送 SIGINT。无需单独的启动/停止命令。

虽然我当然不会在生产环境中这样做,但我认为这对于开发环境来说很好。

关于docker - 决定何时使用 'docker run' 与 'docker start' 以及使用给定图像的最新版本的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26891712/

相关文章:

docker - Kubernetes pod 正在运行,但 docker ps 不提供任何输出

linux - Docker-Machine 命令超时 TLS 握手,但 Dock Swarmer 工作正常

r - 如何使用正确的 R 和包版本构建 Docker 镜像,然后用它们打开 Rstudio?

bash - 如何使用脚本修改容器中的文件

java - Dockerfile 中的 Maven + Java 应用程序

Docker 多阶段构建无法识别已安装的应用程序

macos - 在 mac os x 上使用 boot2docker 运行 docker?

asp.net - 如何访问在 Docker 中发布的 ASP.NET Swagger API?

docker - 错误 : Version in "./docker-compose.yml" is unsupported

docker - 如何订购 docker 容器启动?