用Docker自动构建纸壳CMS
ZKEASOFT November 29, 2017
纸壳CMS可以运行在Docker上,接下来看看如何自动构建纸壳CMS的Docker Image。我们希望的是在代码提交到GitHub以后,容器镜像服务可以自动构建Docker Image,构建好以后,就可以直接拿这个Docker Image来运行了。
Dockerfile
最重要的,就是Dockerfile中的定义了。先上代码:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS builder
WORKDIR /build
# Copy all files
COPY . ./
RUN dotnet restore
ENV PATH="${PATH}:/root/.dotnet/tools"
RUN dotnet tool install --global ZKEACMS.Publisher
RUN dotnet tool install --global sqlite-exec
# Release ZKEACMS.WebHost
WORKDIR /build/src/ZKEACMS.WebHost
RUN publish-zkeacms
# Create database
RUN mkdir /build/src/ZKEACMS.WebHost/bin/Release/PublishOutput/App_Data
RUN sqlite-exec -d /build/src/ZKEACMS.WebHost/bin/Release/PublishOutput/Database.sqlite -f /build/Database/SQLite/ZKEACMS.sqlite.sql
RUN cp -f /build/Database/SQLite/appsettings.json /build/src/ZKEACMS.WebHost/bin/Release/PublishOutput/appsettings.json
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /zkeacms
COPY --from=builder /build/src/ZKEACMS.WebHost/bin/Release/PublishOutput .
EXPOSE 8080
RUN echo "cp -n Database.sqlite App_Data/Database.sqlite" > run.sh
RUN echo "dotnet ZKEACMS.WebHost.dll" >> run.sh
ENTRYPOINT ["sh", "run.sh"]
简单解释一下,首先,需要使用Dotnet SDK来发布纸壳CMS
- 定义编译环境builder
- 将源代码复制到编译环境中的build目录
- 执行 restore
- 定位到 ZKEACMS.WebHost 目录,执行发布命令 dotnet publish-zkeacms
- 定义运行环境为 microsoft/aspnetcore:3.0
- 将发布好的内容从编译环境中复制到运行环境中
整个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 - 12/4/2017 10:37 PM
这个方便了
回复