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

sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
首先安裝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和端口訪問了。