zoukankan      html  css  js  c++  java
  • aspnetcore 2.1 发布到树莓派3linux的艰辛路程

    发布至docker for windows.

    提示:

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

    解决:

    网上查了,说是运行环境不对,要在win虚拟机上执行,都是把docker的环境切换成windows。

    不过我们如果在创建项目的时候,选择docker文件是“linux”版本,就不需要windows版本,所以我们保持docker默认的linux版本,只需要确保新建项目时生成的DockerFile,不是基于windows就好。

    由于是树莓派,这里准备把aspnetcore2.1项目,发布为 linux-arm 方式。

    # 首先,定位到要发布的项目根目录,也就是csproj文件所在位置,按住shift键右击,选择在此处打开命令行/powershell,两个选项差不多这个看系统设定。
    # 以 linux-arm 方式发布
    dotnet publish -c Release -r linux-arm

    之后,我们将目光放到树莓派上,我用的是三代,也就是ARMv7,所以core sdk是没法装的,只能使用runtime的方式,所以最简单的DockerFile如下:

    # 添加基础镜像: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平台了。当然要传输的目录就是刚才生成的目录,则你可能要拷贝的目录就是

    binRelease
    etcoreapp2.1linux-armpublish

    先直接运行下试试,进入我们程序所在位置。

    # 我们先把程序入口点设置为可运行,当然你可以设置权限为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 }')
  • 相关阅读:
    CF Round #569 Div2(contest1180)
    HY中考游记
    Luogu P2309 loidc,卖卖萌
    点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决?
    line-height:150%/1.5em与line-height:1.5的区别
    table使用display:block时会多出一条边框
    让360双核浏览器默认极速模式,避免采用兼容模式
    使用nodejs安装http-server
    行内元素内边距对左右下起作用,外边距只对左右起作用
    微信小程序示例
  • 原文地址:https://www.cnblogs.com/3Tai/p/9518527.html
Copyright © 2011-2022 走看看