纸壳CMS可以运行在Docker上,接下来看看如何自动构建纸壳CMS的Docker Image。我们希望的是在代码提交到GitHub以后,容器镜像服务可以自动构建Docker Image,构建好以后,就可以直接拿这个Docker Image来运行了。

Dockerfile

最重要的,就是Dockerfile中的定义了。先上代码:

FROM microsoft/aspnetcore-build:2.0 AS builder
WORKDIR /build

# Copy all files
COPY . ./

# Release ZKEACMS.WebHost
WORKDIR /build/src/ZKEACMS.WebHost
RUN dotnet publish -c Release -o ./bin/Release/PublishOutput

# Release ZKEACMS.Article
WORKDIR /build/src/ZKEACMS.Article
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.Article

# Release ZKEACMS.FormGenerator
WORKDIR /build/src/ZKEACMS.FormGenerator
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.FormGenerator

# Release ZKEACMS.Message
WORKDIR /build/src/ZKEACMS.Message
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.Message

# Release ZKEACMS.Product
WORKDIR /build/src/ZKEACMS.Product
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.Product

# Release ZKEACMS.Redirection
WORKDIR /build/src/ZKEACMS.Redirection
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.Redirection

# Release ZKEACMS.SectionWidget
WORKDIR /build/src/ZKEACMS.SectionWidget
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.SectionWidget

# Release ZKEACMS.Shop
WORKDIR /build/src/ZKEACMS.Shop
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.Shop

#Release ZKEACMS.Sitemap
WORKDIR /build/src/ZKEACMS.Sitemap
RUN dotnet publish -c Release -o ../ZKEACMS.WebHost/bin/Release/PublishOutput/wwwroot/Plugins/ZKEACMS.Sitemap

# Tidy plugins
WORKDIR /build/PluginPublisher
RUN dotnet restore
RUN dotnet build
RUN dotnet run

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /zkeacms
COPY --from=builder /build/src/ZKEACMS.WebHost/bin/Release/PublishOutput .
EXPOSE 80 ENTRYPOINT ["dotnet", "ZKEACMS.WebHost.dll"]

简单解释一下,首先,需要使用microsoft/aspnetcore-build来发布纸壳CMS,因为microsoft/aspnetcore只是runtime,并不能release。

  1. 定义编译环境builder
  2. 将源代码复制到编译环境中的build目录
  3. 发布ZKEACMS主程序
  4. 发布ZKEACMS的插件到对应目录
  5. 定义运行环境为 microsoft/aspnetcore:2.0
  6. 将发布好的内容从编译环境中复制到运行环境中

整个Dockerfile的定义很简单,如果您已经有安装了docker,将代码保存到项目的根目录,文件名为Dockerfile,就可以直接使用docker build来生成docker image了。

docker build -t zkeacms .

自动构建

已经定义好了Dockerfile,并可以在docker的环境中编译,发布,那现在就可以使用容器镜像服务来自动构建了。

Docker Hub

使用Docker Hub,创建一个自动构建的仓库,连接到GitHub中的项目,可以轻松实现自动构建

选择一个你的项目

在创建好你的仓库以后,简单设置一下分支和Dockerfile的路径,就可以了

阿里云容器镜像服务

如果你觉得Docker Hub太慢了,在国内,你可以使用阿里云的容器镜像服务。https://dev.aliyun.com/search.html

新建一个镜像仓库就行了:

在设置好以后,你会发现在你的项目设置中,会多了Webhooks或者Integrations & services


  • Terminor - 2017年12月04日 22:37

    这个方便了

    回复