发布至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 }')