發佈至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 }')