1.准備一個https://hub.docker.com賬號,申請一個免費的鏡像倉庫(免費賬戶可以申請一個)
創建docker遠程鏡像庫
2.新建一個mvc的項目
給這個項目加上Dockerfile文件(AzureDemo/AzureDemo/..中添加)
FROM dukecheng/aspnetcore:aspnetcore-runtime-2.2.0 ARG source WORKDIR /app EXPOSE 80 COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "AzureDemo.dll"]
在sln同級添加三個文件
azure_build.sh
workspace=`pwd` docker run --rm -v ~/.cache:/root/.cache -v ~/.config:/root/.config -v ~/.gnupg:/root/.gnupg -v ~/.local:/root/.local -v ~/.npm:/root/.npm -v `pwd`/SanBlog:/data digitallyseamless/nodejs-bower-grunt bash -c "bower install && npm install" docker run --rm -v ~/.dotnet:/root/.dotnet -v ~/.nuget:/root/.nuget -v ${workspace}:/src --workdir /src dukecheng/aspnetcore:aspnetcore-sdk-2.2.100-preview3-009430 bash -c "dotnet restore ./AzureDemo.sln && rm -rf ./AzureDemo/AzureDemo/obj/Docker/publish && dotnet publish ./AzureDemo/AzureDemo.csproj -c Release -o ./obj/Docker/publish"
azuredemo.base.yml
# Docker image # Build a Docker image to deploy, run, or push to a container registry. # Add steps that use Docker Compose, tag images, push to a registry, run an image, and more: # https://docs.microsoft.com/azure/devops/pipelines/languages/docker pool: vmImage: 'Ubuntu 16.04' variables: imageName: 'your-container-image-name:$(build.buildId)' steps: - script: docker build -f Dockerfile -t $(imageName) . displayName: 'docker build' azuredemo.base.yml version: '3' services: azuredemoweb: image: shitong/shitong:${IM_TAG-latest} networks: - appnet volumes: - /var/log:/var/log - /data/azure:/app/data redis: image: redis networks: - appnet ports: - 7379:6379 volumes: - /data/redis:/data - /var/log:/var/log mongo: image: mongo volumes: - /data/mongodb/db:/data/db - /data/mongodb/backup:/data/backup - /var/log:/var/log networks: - appnet ports: - 27017:27017 networks: appnet:
這塊的azuredemoweb節點下的image:shitong/shitong:${IM_TAG-latest}
shitong/shitong就是我們第一步所建的hub.docker.com上的鏡像文件庫
azuredemo.Development.yml
version: '3' services: azuredemoweb: environment: - ASPNETCORE_ENVIRONMENT=Development ports: - 8080:80
項目結構
3.准備Azure DevOps帳號 用來托管代碼,使用pipeline自動打包docker鏡像
把我們第二步准備的項目push到Azure DevOps
該准備的都准備好了
接下來就是重點了
之后就會變成這樣
下面會有四個步驟:
(1).還原nuget等依賴包 發布項目
(2).打包成docker鏡像
(3).推送docker鏡像到docker hub
(4).服務器pull docker鏡像 遠程部署 運行項目
cd /data/deploy/ && export IM_TAG=azuredemo_$(Build.BuildId) && docker pull shitong/shitong:${IM_TAG} && docker-compose -f azuredemo.base.yml -f azuredemo.Development.yml config > docker-stack.yml && docker stack deploy --with-registry-auth -c docker-stack.yml myapp
最后保存
4.遠程服務器
首先要在遠程服務器安裝docker
具體可以參考官網
https://docs.docker.com/install/linux/docker-ce/ubuntu/
這里安利一個教我docker的大佬的博客,可以查看/學習下基本的命令
https://www.52hhx.com/index/articleDetail/73
騰訊雲的上機實驗
https://cloud.tencent.com/developer/labs/search?keyword=docker
創建文件夾和azuredemo.base.yml,azuredemo.Develoment.yml
內容直接拷貝第一步項目里的
之后再把azuredemo.base.yml里的一些路徑創建出來
最后在Azure DevOps測試