aspnetcore 2.1 發佈到樹莓派3linux的艱辛路程

發佈至docker for windows.linux

提示:docker

image operating system "windows" cannot be used on this platformshell

解決:windows

網上查了,說是運行環境不對,要在win虛擬機上執行,都是把docker的環境切換成windows。網絡

不過咱們若是在建立項目的時候,選擇docker文件是「linux」版本,就不須要windows版本,因此咱們保持docker默認的linux版本,只須要確保新建項目時生成的DockerFile,不是基於windows就好。app

 

因爲是樹莓派,這裏準備把aspnetcore2.1項目,發佈爲 linux-arm 方式。測試

# 首先,定位到要發佈的項目根目錄,也就是csproj文件所在位置,按住shift鍵右擊,選擇在此處打開命令行/powershell,兩個選項差很少這個看系統設定。
# 以 linux-arm 方式發佈
dotnet publish -c Release -r linux-arm

以後,咱們將目光放到樹莓派上,我用的是三代,也就是ARMv7,因此core sdk是無法裝的,只能使用runtime的方式,因此最簡單的DockerFile以下:ui

# 添加基礎鏡像:docker會從網絡下載這個鏡像
FROM microsoft/dotnet:2.1-sdk-stretch-arm32v7 AS build
MAINTAINER suntai
#容器中系統的工做空間
WORKDIR /app
#拷貝當前文件夾下的文件到容器中系統的工做空間(注意:「.」後面有空格)
COPY . /app

#設置程序要偵聽的端口
EXPOSE 80
# 下面這裏是dotnetcore runtimez執行方式
ENTRYPOINT ["./WebCoreHost"]

以後就能夠經過樹莓派開啓ssl,用sftp從微軟平臺傳文件到樹莓派的linux平臺了。固然要傳輸的目錄就是剛纔生成的目錄,則你可能要拷貝的目錄就是this

bin\Release\netcoreapp2.1\linux-arm\publish\

先直接運行下試試,進入咱們程序所在位置。spa

# 咱們先把程序入口點設置爲可運行,固然你能夠設置權限爲755,也能夠用+x方式
sudo chmod +x ./WebCoreHost
# 而後咱們基於runtime執行
./WebCoreHost
# aspnetcore runtime會執行程序,若是什麼都無論的話,是啓用5000端口。

固然,以後若是你想結束程序測試,或者端口被佔了,能夠kill掉程序

# 顯示佔用端口的程序
sudo netstat -ltp
# 結束指定程序,好比說程序標識是233
sudo kill 233

在樹莓派上建立容器並運行程序,注意句點的位置,表示操做當前目錄(linux docker for aspnetcore)

# 將當前目錄添加到爲docker鏡像,起一個別名叫作aspnetapp。
docker build
-t aspnetapp .
# 以關閉後自動銷燬的方式,啓動一個容器,偵聽外部的8000端口,並轉發至程序內部的80端口 docker run
--rm -it -p 8000:80 aspnetapp

提高當前操做用戶操做Docker的權限,不須要sudo,也能解決 permission denied

# 若是尚未 docker group 就添加一個
sudo groupadd docker

# 將用戶加入該 group 內。而後退出並從新登陸就生效啦 sudo gpasswd -a ${USER} docker

# 重啓 docker 服務 sudo service docker restart

# 切換當前會話到新 group 或者重啓 X 會話 newgrp - docker

經常使用的Docker容器和鏡像操做

# 停用所有正在運行的容器
docker stop $(docker ps -q)

# 刪除所有容器
docker rm $(docker ps -aq)

# 一條命令實現停用並刪除容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)

# 刪除全部鏡像
docker rmi $(docker images -q)

# 中止並刪除none鏡像
docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')
相關文章
相關標籤/搜索