zoukankan      html  css  js  c++  java
  • .net core 程序 通过Docker 部署到 Centos8

    最近在学习Docker ,顺便把学习日记记录一下。

    先说一下环境配置,我是在Windows10 用自带Hyper-v创建了linux虚拟机,系统是Centos8。

    在Centos8 设置镜像仓库并安装Docker:

    设置仓库:

     sudo yum install -y yum-utils device-mapper-persistent-data lvm2

    稳定仓库:

     sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

    安装docker(因为docker最新版本没有可用的containerd.io,我安装的docker版本是18.09.1):

    sudo yum install docker-ce-18.09.1 docker-ce-cli containerd.io

    启动docker:

    sudo systemctl start docker

    运行docker(判断是否成功):

    sudo docker run hello-world

    配置好环境后,开始创建程序

    新建.net core 3.1 web应用程序 CoreWebTest1 ,选择linux 支持

    根目录下有个Dockerfile

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
    WORKDIR /src
    COPY ["CoreWebTest01/CoreWebTest01.csproj", "CoreWebTest01/"]
    RUN dotnet restore "CoreWebTest01/CoreWebTest01.csproj"
    COPY . .
    WORKDIR "/src/CoreWebTest01"
    RUN dotnet build "CoreWebTest01.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "CoreWebTest01.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "CoreWebTest01.dll"]

    把整个程序打包 CoreWebTest1.zip

    使用xshell 6 连接linux ,找到docker 目录

    cd /var/lib/docker

    创建项目目录 mkdir CoreWebTest01 ,进入该目录 cd CoreWebTest01 

    把程序文件传输到linux

    输入rz ,选择CoreWebTest01.zip

    传输完解压文件 unzip CoreWebTest01.zip

    解压完查看当前目录,输入ls ,看到已经.net 项目文件已经解压到当前目录

    把 CoreWebTest01 文件夹下的Dockerfile 移动到当前目录

    mv CoreWebTest01/Dockerfile .

    进入CoreWebTest01目录,先执行Dockerfile文件中这两句

    cd CoreWebTest01

    dotnet build "CoreWebTest01.csproj" -c Release -o /app/build
    dotnet publish "CoreWebTest01.csproj" -c Release -o /app/publish

    执行完再回到上级目录 cd ..

    开始构建docker镜像

    docker build -t webtest01 .

    构建完 输入 docker images ,可以看到有 webtest01 的镜像

    然后发布镜像

    docker run -d -P webtest01 (-d 表示后台运行容器, -P 表示随机映射端口)

    输入 docker ps -a ,可以看到当前有哪些运行的镜像

    其中还有对应的端口号(如果发布完看不到对应端口,可能是防火墙的原因,先关闭防火墙)

    在浏览器输入对应ip:port ,就可以访问网站了

     

    成功通过Docker发布.net core  程序后我在想,Dockerfile 文件那么多行,能否简化一下呢,答案是可以的

    修改Dockerfile 如下

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    WORKDIR /webtest2
    COPY . .
    EXPOSE 8080
    ENTRYPOINT ["dotnet", "CoreWebTest01.dll"]

    Dockerfile 指定暴露端口是8080,稍后发布镜像时也同步映射8080端口到docker

    注,如果觉得 mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim 下载太慢,可以换成 mcr.azk8s.cn/dotnet/core/aspnet:3.1-buster-slim

    设置Dockerfile属性为始终复制

    发布.net core 程序,发布时选择依赖框架,可移植

    发布完,打包发布文件,同样方式传到linux

    进入发布文件根目录

    docker build -t webtest2 .

     docker run -d -p 8080:80 webtest2

    这里小写-p 8080:80 表示把8080 外部端口映射到 Docker 80 端口

    最后浏览器输入ip:8080 ,可以正常访问网站

    以上,是通过Docker 发布.net core 程序到Centos 的方法

  • 相关阅读:
    在ConcurrentModificationException异常上的联想
    记录一下自己爬虎牙LOL主播的爬虫思路
    ajax解决跨域问题
    解决多线程下数据库操作问题
    浅谈时间复杂度
    想一下,最大公约数怎么求
    IO流与IO缓冲
    循环移位
    3Sum探讨(Java)
    Two Sum(两个数的相加)
  • 原文地址:https://www.cnblogs.com/redo/p/12595420.html
Copyright © 2011-2022 走看看