我们目前正在使用 Docker 进行开发,并且正在研究如何使用 Docker 在其他环境(如暂存和生产环境)中运行我们的软件。
我们现在要做的是使用 Jenkins 编译我们的 Java 软件,然后 - 在同一个 Jenkins 构建中 - 还使用 docker-compose 构建一个 Java 软件将在其中运行的 Docker 镜像。
现在,在构建 Docker 映像后,我们需要将该映像移至要运行软件的(远程)Docker 主机。此远程 Docker 主机与 Jenkins 运行的主机不同。我相信我们可以按照以下公认的答案来做到这一点这个问题。
但是,一旦将镜像复制到 Docker 主机,我们如何启动该镜像docker-compose
?我们复制的镜像只是镜像,而不是docker-compose.yml
文件Dockerfile
。
答案1
例如,可以亲自设置私有 Docker 注册表或使用 Dockerhub 上的私有存储库。这也意味着 Dockerhub 本身可以进行映像构建(在其服务器或您自己的服务器上),然后在成功后将其提交到带有“最新”标签的存储库 - 在我看来非常有用。
答案2
您可以在 Docker 主机上配置 docker 守护进程以监听 TCP 端口而不是套接字/var/run/docker.sock
。您只需在该主机上运行 dockerd 并使用一个额外参数即可:
-H tcp://<IP>:<PORT>
查看文档了解详情。
-H
一旦拥有了它,您就可以通过提供指向 Docker 主机和端口的相同标志,告诉 Jenkins 节点上的 docker-compose 通过 TCP 连接到远程守护进程,而不是使用本地套接字。
这样,任何 docker 容器都会在该机器上启动。
答案3
如果您在 Linux 上运行,则根本无需直接在容器中安装 Docker。您可以直接绑定安装 docker 二进制文件(通常在 /usr/bin/docker)。请注意,绑定安装套接字不会为您提供全新的 Docker,而是从容器内部访问现有的 Docker 守护进程。如果您想将 Docker 二进制文件嵌入到映像中,您可以创建一个名为 laoyumi/docker 或类似名称的映像,然后“快速”在另一个映像中访问它,您只需从 laoyumi/docker 启动 Dockerfile 即可。