最直接的方法是:
具有一个Jekyll容器会持续运行并通过Nginx重定向(
jekyll serve
)服务站点的静态方面。另一种方法是在Jekyll docker映像中运行build命令,并通过docker共享输出
还有另一种方法是在Nginx容器中生成站点。
前两种解决方案的缺点是它们创建了一个只能使用的Jekyll docker实例。一次,然后持续。在1.的情况下,服务可以由Nginx直接处理。在3.的情况下,Jekyll和Nginx之间没有分隔。这将很有用,因为Nginx还负责将流量路由到其他Docker实例。
问题是,有没有一种方法可以让Jekyll用Dockerfile填充Docker卷,从而可以由Nginx安装?逐步:
docker-compose build
:构建站点并填充静态站点卷docker-compose up -d
:Nginx安装静态站点卷并为它服务这种方法甚至有意义吗?
#1 楼
docker-compose
只是docker
周围的修饰包装,它为您提供了定期给docker build
或docker run
的所有选项的漂亮文字表示。另外,当然,它将多个docker映像/容器捆绑在一起。也就是说,除了调用docker
之外,没有任何规定可以运行其他任何内容。我看不到如何使用
docker-compose build
来填充卷。根据定义,卷不位于docker映像/容器内部,而位于(主机系统上)外部。 docker build
从不写入主机系统,并且您无法在docker build
期间装入卷。 docker-compose build
基本上只为您运行docker build
,也无法在主机上运行或编写任何内容。因此,不,
docker-compose build
将无法创建静态文件。您可以制作compose文件,以便它运行生成器(在docker容器内,写入命名卷),并在另一个容器中运行服务器(nginx或其他),并安装相同的命名卷(这将是我相信您的情况2)。然后,使用
docker-compose up
,将启动这两个容器。第一个将填充您的静态文件。第二个将服务。第一个会徘徊而后什么也不做,您可以忽略,但是这肯定是丑陋的。不幸的是,您无法使用docker-compose up --rm
之类的东西来自动创建不必要的jekyll容器。因此,最好的选择是自己启动jekyll容器(
docker run --rm jekyll:xyz -v ...:...
),--rm
将在完成后将其移除。然后用实际服务器docker-compose up
。
评论
我实际上不得不做一个小变通方法。首先运行Jekyll(SSG),然后通过busybox容器将其输出的HTML站点复制到命名卷中,然后装入该卷。我应该如何以及在何处发布相关代码?
–莫里茨
18年2月11日在8:12
@Moritz,很高兴您能正常工作。您可以在此处进行自我解答,也可以只编辑问题。
– AnoE
18年2月11日在9:46