.net core 部署 docker (CentOS7)


最近研究 docker 在Linux 下部署 .net core 項目,在過程中踩了很多坑,網上的資料對我幫助確實大,但有些問題未指明出來。

特地整理一份在發布文檔

 本文使用的是 root 賬號操作,如果不是root賬號,命令前需要增加 sudo 

 

1、安裝dotnet (這一步可以不需要)

https://dotnet.microsoft.com/download

 

以安裝運行時 2.1版本為例

https://dotnet.microsoft.com/download/linux-package-manager/centos/runtime-current

rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

yum update

yum -y install aspnetcore-runtime-2.1

 

查看 dotnet 版本

dotnet --info

 

2、安裝Docker CE 版

https://www.cnblogs.com/longjieboke/p/10734557.html

 

3、配置docker加速器

本方使用的是阿里雲鏡像加速器,參考

https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.549.19e611be46gAPY

容器鏡像服務 -> 鏡像加速器

mkdir -p /etc/docker 

tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["你的鏡像加速地址"]

}

EOF

重啟docker服務

systemctl daemon-reload

systemctl restart docker

 

4、.net core 創建 Dockerfile

 

由於默認生成的 Dockerfile 是包含編譯和發布。更改Dockerfile文件內容

 

#基於 `microsoft/dotnet:2.1-aspnetcore-runtime` 來構建鏡像,自行更改為你自己的

FROM microsoft/dotnet:2.1-aspnetcore-runtime

#拷貝項目publish文件夾中的所有文件到 docker容器中的publish文件夾中 , publish 可自行更改名稱

COPY . /publish

#設置工作目錄為 `/publish` 文件夾,即容器啟動默認的文件夾

WORKDIR /publish

#設置Docker容器對外暴露5000端口,防火牆需要開放此端口,必須和 dotnet xx.dll運行時的端口保持一致

EXPOSE 5000

#使用`dotnet xx.dll`來運行應用程序

ENTRYPOINT ["dotnet", "ToolManager.dll"]

 

5、發布項目

 

 

 

6、將發布的文件拷備到 能發os的系統文件夾中

創建 docker(自定義名稱)文件夾

使winSCP工具上傳文件到linux服務器的指定文件夾

 

7、生成鏡像

cd 到 剛才的文件夾下

docker build -t 鏡像名稱 .       (注意:最后空格后面有一個.)。

 

示例: docker build -t demo-netcore . 

 

8、查看生成的鏡像

docker images

 

9、運行docker容器

docker run --name 容器名稱 -d -p 5000:5000 鏡像名稱

示例: docker run --name democore -d -p 54907:80 demo-netcore

democore 容器的名稱。

-d 后台進程。

-p是進行宿主和容器之間端口的映射,(-p 宿主端口:容器端口)

docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0 --restart=always

 

10、檢驗docker容器是否運行成功

docker ps -a

docker ps 查看正在運行的容器

 

如果異常,使用命令

docker run -it 鏡像名稱 bash

查看異常

 

如果 提示 sdk版本不同

刪除舊版 yum remove -y aspnetcore*

更新 yum  -y install aspnetcore-runtime-2.1

 

11、防火牆開放端口

查看防火牆狀態:systemctl status firewalld

開啟防火牆:systemctl start firewalld

開放端口:firewall-cmd --zone=public --add-port=【端口】/tcp --permanent

firewall-cmd --reload   重啟防火牆

firewall-cmd --query-port=【端口】/tcp  查看端口是否開放

 

 

12、訪問

 

因為運行docker容器的時候 進行了 端口映射 所以外部訪問端口 為 5000

http://192.168.1.1:5000

 

13、停止和刪除容器

docker stop (容器id)

sudo docker rm (容器id)

 

14、刪除鏡像

docker rmi (鏡像ID)

 

15、查看docker日志

docker logs -f -t --since="2017-05-31" --tail=10 alibaba-vica-netapi

docker logs 6dc1e5f74c0 

 

16、停止和刪除容器

docker stop (容器id)

sudo docker rm (容器id)

 

17、刪除鏡像

docker rmi (鏡像ID)

 

18、創建容器

docker commit -p 容器ID 快照名稱

 

19、保存本地tar備份

docker save -o ~/xxxx.tar 容器名稱

 

20、恢復docker備份

docker load -i docker-alibaba-server.tar

 

21、進入 docker容器內部

docker exec -it 容器id /bin/bash

 

22、退出容器

Ctrl + D 或 exit

 

 

遇到的問題

發布后訪問時提示 連接被重置

 

 

 

 

原因由於程序中

 

 

並且

dockerfile 文件中

EXPOSE 5000 #端口必須跟里面的端口保持一致

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM