使用Docker發布Asp.Net Core程序到Linux


 

CentOS安裝Docker

  按照docker官方文檔來,如果有之前安裝過舊版,先卸載舊版,沒有的話,可跳過。

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
View Code

  首先安裝docker依賴包

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

  添加docker源到yum包管理器

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

  可選項設置都跳過,直接安裝

sudo yum install docker-ce docker-ce-cli containerd.io

  啟動docker,並設置為開機啟動

sudo systemctl start docker
sudo systemctl enable docker

 

  之前寫了一個demo,在aspnetcore2.2中使用swagger,但是當時並沒有啟動docker支持,而且很早之前就上傳到這台服務器了,其實就是本地虛擬機ヽ(ー_ー)ノ。但是沒關系,可以直接在服務器里面來寫這個Dockerfile,因為懶得再用VS添加docker支持,其實道理都是一樣的,重要的是這個Dockerfile。

添加Dockerfile

  在服務器進入到程序發布的路徑,比如我是放在/home/wwwroot/swagger_demo/,進來之后用命令創建一個Dockerfile文件:sudo vi Dockerfile,內容如下:

FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY . .
EXPOSE 24438
ENTRYPOINT ["dotnet", "swaggerDemo.dll"]

  我這里是開放了24438端口,這個swaggerDemo應用在創建的時候就是這個端口,所以就用了這個端口。一般一台服務器如果只部署一個應用的話,默認開放80端口就好了。我也不知為什么,我就是喜歡用別的端口 ,╮(╯▽╰)╭

創建鏡像

  在有Dockerfile的這個目錄下執行命令,注意命令最后是一個點。

sudo docker build -t swaggerdemo .

  創建鏡像過程中提示了一個warning,大家都懂的,程序員從來不接受威脅,況且終端提示Successfully build,所以繼續下一步。┓( ´∀` )┏

啟動容器

sudo docker run --name=swaggerdemo -p 24438:24438 -d swaggerdemo

  仍然有這個警告,但是容器是啟動成功了,可以通過sudo docker ps查看運行中的容器。在服務器打開Firefox(沒錯,虛擬機中安裝了圖形化界面),訪問24438端口,程序正常。

 

解決IPv4 forwarding

  雖然docker容器啟動成功了,但是只能在服務器訪問,外網訪問不了。看來這個warning簡直就是error啊,要解決這個警告,在/etc/目錄下找到這個文件sysctl.conf,結果打開一看,

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.

  然而/sysctl.d/目錄里面全是快捷方式,最后在/usr/lib/sysctl.d/目錄找到了這個文件00-system.conf,在里面加上這一句:

net.ipv4.ip_forward = 1

  然后重啟網絡和docker

systemctl restart network && systemctl restart docker

  重新啟動容器之后,在本地就可以通過服務器ip和端口訪問了。

 


免責聲明!

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



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