zoukankan      html  css  js  c++  java
  • .net core 部署 docker (CentOS7)

    最近研究 docker 在Linux 下部署 .net core 项目,在过程中踩了很多坑,网上的资料对我帮助确实大,但有些问题未指明出来。

    特地整理一份在发布文档

     本文使用的是 root 账号操作,如果不是root账号,命令前需要增加 sudo 

    1、安装dotnet (这一步可以不需要)

    https://dotnet.microsoft.com/download

    以安装运行时 2.1版本为例

    https://dotnet.microsoft.com/download/linux-package-manager/centos/runtime-current

    rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

    yum update

    yum -y install aspnetcore-runtime-2.1

    查看 dotnet 版本

    dotnet --info

    2、安装Docker CE 版

    https://www.cnblogs.com/longjieboke/p/10734557.html

    3、配置docker加速器

    本方使用的是阿里云镜像加速器,参考

    https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.549.19e611be46gAPY

    容器镜像服务 -> 镜像加速器

    mkdir -p /etc/docker 

    tee /etc/docker/daemon.json <<-'EOF'

    {

    "registry-mirrors": ["你的镜像加速地址"]

    }

    EOF

    重启docker服务

    systemctl daemon-reload

    systemctl restart docker

    4、.net core 创建 Dockerfile

     

    由于默认生成的 Dockerfile 是包含编译和发布。更改Dockerfile文件内容

    #基于 `microsoft/dotnet:2.1-aspnetcore-runtime` 来构建镜像,自行更改为你自己的

    FROM microsoft/dotnet:2.1-aspnetcore-runtime

    #拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中 , publish 可自行更改名称

    COPY . /publish

    #设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹

    WORKDIR /publish

    #设置Docker容器对外暴露5000端口,防火墙需要开放此端口,必须和 dotnet xx.dll运行时的端口保持一致

    EXPOSE 5000

    #使用`dotnet xx.dll`来运行应用程序

    ENTRYPOINT ["dotnet", "ToolManager.dll"]

    5、发布项目

     

    6、将发布的文件拷备到 能发os的系统文件夹中

    创建 docker(自定义名称)文件夹

    使winSCP工具上传文件到linux服务器的指定文件夹

    7、生成镜像

    cd 到 刚才的文件夹下

    docker build -t 镜像名称 .       (注意:最后空格后面有一个.)。

    示例: docker build -t demo-netcore . 

    8、查看生成的镜像

    docker images

    9、运行docker容器

    docker run --name 容器名称 -d -p 5000:5000 镜像名称

    示例: docker run --name democore -d -p 54907:80 demo-netcore

    democore 容器的名称。

    -d 后台进程。

    -p是进行宿主和容器之间端口的映射,(-p 宿主端口:容器端口)

    docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0 --restart=always

    10、检验docker容器是否运行成功

    docker ps -a

    docker ps 查看正在运行的容器

    如果异常,使用命令

    docker run -it 镜像名称 bash

    查看异常

    如果 提示 sdk版本不同

    删除旧版 yum remove -y aspnetcore*

    更新 yum  -y install aspnetcore-runtime-2.1

    11、防火墙开放端口

    查看防火墙状态:systemctl status firewalld

    开启防火墙:systemctl start firewalld

    开放端口:firewall-cmd --zone=public --add-port=【端口】/tcp --permanent

    firewall-cmd --reload   重启防火墙

    firewall-cmd --query-port=【端口】/tcp  查看端口是否开放

    12、访问

    因为运行docker容器的时候 进行了 端口映射 所以外部访问端口 为 5000

    http://192.168.1.1:5000

    13、停止和删除容器

    docker stop (容器id)

    sudo docker rm (容器id)

    14、删除镜像

    docker rmi (镜像ID)

    15、查看docker日志

    docker logs -f -t --since="2017-05-31" --tail=10 alibaba-vica-netapi

    docker logs 6dc1e5f74c0 

    16、停止和删除容器

    docker stop (容器id)

    sudo docker rm (容器id)

    17、删除镜像

    docker rmi (镜像ID)

    18、创建容器

    docker commit -p 容器ID 快照名称

    19、保存本地tar备份

    docker save -o ~/xxxx.tar 容器名称

    20、恢复docker备份

    docker load -i docker-alibaba-server.tar

    21、进入 docker容器内部

    docker exec -it 容器id /bin/bash

    22、退出容器

    Ctrl + D 或 exit

    遇到的问题

    发布后访问时提示 连接被重置

    原因由于程序中

     

    并且

    dockerfile 文件中

    EXPOSE 5000 #端口必须跟里面的端口保持一致

  • 相关阅读:
    js正则表达式
    js遍历对象属性
    C# 带Cookies发送请求
    C# Cookies设置和读取
    C# ref 和 out 的使用
    jq 禁用复选框 和输入框
    C++学习之嵌套类和局部类
    C++学习之this指针
    C++学习之运算符重载的总结
    Labview中引用,属性节点,局部变量之间的区别
  • 原文地址:https://www.cnblogs.com/longjieboke/p/10724587.html
Copyright © 2011-2022 走看看