我的.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 容器對外暴露的端口。
EXPOSE指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個端口的服務。
再然后是 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