我的.net core 版本爲3.1,centos 版本爲7.0
在Centos下安裝Docker
這裏參考此篇文章:Docker從入門到實踐-在centos下安裝Docker
如果下載慢就更換yum的軟件源:
配置文件路徑爲: /etc/yum.repos.d/docker-ce.repo
安裝完成後進行測試:docker run hello-world
輸出如圖所示的內容就表示安裝成功:
.NET Core 配置
這裏的重點是需要一個 Dockerfile
文件,無需後綴文件名。
這個文件可以通過在創建項目的時候勾選 啓用Docker支持 的選項生成,也可以自己在項目的根目錄中新建一個,如圖所示:
如何寫一個 Dockerfile
文件是本次文章內容重點。
Dockerfile格式
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
#FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
EXPOSE 80
EXPOSE 443
RUN apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
RUN cd /usr/local/src
RUN mkdir DockerAsPose
WORKDIR /usr/local/src/DockerAsPose
COPY . .
ENTRYPOINT ["dotnet", "PPTDemo.dll"]
第一條 FROM
指令是拉取一個基礎鏡像,這裏可以使用微軟提供的官方鏡像。據說還有一個體積更小的。這條命令必須放在第一行。
然後是 EXPOSE
指令,這是告訴Docker 容器對外暴露的端口。
再然後是 RUN
指令,這裏可以執行你想要執行的命令,比如安裝某個依賴庫。(我這裏安裝的是 libgdiplus
,是圖形處理方面的。
直到 COPY
指令前都是在指定地方創建一個目錄,COPY . .
是將當前所有文件複製到你創建的工作目錄中。
最後就是 ENTRYPOINT
指令 就是告訴程序的入口點是哪個。這裏的 PPTDemo.dll就是你程序發佈後生成的dll文件。
最終發佈
在發佈以前,你可以像以前一樣通過文件夾的形式發佈項目,最後會得到一堆dll文件以及你的 web.config
,Dockerfile
等文件。
這個時候你需要把你的發佈文件夾內的所有內容上傳到服務器的相關目錄,可以通過 xftp 的方式上傳。
上傳完以後就是剩下最後一步,將程序部署到Docker**中,這裏我們需要以下2個命令來完成這部分操作:
#1.以下命令是構建一個鏡像,鏡像名稱可以爲XX.XXX.XX的格式,最後一定要以"."結尾
docker build -t test.iamge.docker .
#2.以下命令是讓鏡像在一個指定容器中運行,前面是容器名稱,後面是鏡像名稱,-p 是指定容器的運行端口
docker run --name=testdockercontainer -p 5000:80 -d test.iamge.docker
運行完以後就可以通過 curl
命令查看你的程序了。curl http://localhost:5000
,
如果以後每次需要更新程序的話,需要重新執行以下命令:
- 停止容器
- 刪除容器
- 刪除鏡像
- 構建鏡像
- 在指定容器中運行鏡像
爲了減少麻煩,以上命令可以放到一個可執行文件中,以後每次就執行這個文件。build.sh
#!/bin/bash
cd ./my-publish
docker stop mycontainer
docker rm mycontainer
docker rmi my.api:v1
docker build -t my.api:v1 .
docker run --name=mycontainer -p 5000:80 -d my.api:v1
相關命令
docker ps
列出所有正在運行的容器docker stop 容器名稱或ID
停止某個容器docker ps -a
列出所有容器(包括已停止的容器)docker images
列出所有鏡像docker rm 容器名稱或ID
刪除某個容器docker rmi 鏡像名稱或ID
刪除某個鏡像firewall-cmd --zone=public --add-port=5899/tcp --permanent
打開防火牆的指定端口firewall-cmd --query-port=80/tcp
查詢防火牆指定端口是否打開:set ff
vim 打開後查看文件的格式:set ff=unix
vim打開文件後,設置文件格式爲unix