net 8 docker 发布 docker .net framework_net 8 docker 发布

 

 dotnet WebApiLinuxDemo.dll --urls=http://*:5006

注意:dockerfile文件一定要放到根目录下

安装环境:

  虚拟机cent os 7;

  docker;

  net 5.0 api项目

部署步骤:

  •   net core API项目搭建

  创建项目时勾选docker支持选项或后续添加;

net 8 docker 发布 docker .net framework_net 8 docker 发布_02

  此时生成的dockerfile文件内容(注:直接将代码放到docker里部署下面的自动生成的dockerfile文件内容是没问题的;若发布后部署下面内容需要改动,否则有问题)

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["TestAPI/TestAPI.csproj", "TestAPI/"]
RUN dotnet restore "TestAPI/TestAPI.csproj"
COPY . .
WORKDIR "/src/TestAPI"
RUN dotnet build "TestAPI.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "TestAPI.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestAPI.dll"]

  发布后部署时dockerfile改为

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base  
WORKDIR /app  
COPY . .  
EXPOSE 80
ENTRYPOINT ["dotnet", "TestAPI.dll"]
  •   Linux系统安装docker环境

  安装之前现卸载系统上原有的Docker

yum remove docker \
>                   docker-client \
>                   docker-client-latest \
>                   docker-common \
>                   docker-latest \
>                   docker-latest-logrotate \
>                   docker-logrotate \
>                   docker-engine

  安装需要的安装包yum-utils

[root@instance-h9cwbr8m ~]# yum install -y yum-utils
Loaded plugins: langpacks, versionlock
Excluding 1 update due to versionlock (use "yum versionlock status" to show it)
Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version
Nothing to do
[root@instance-h9cwbr8m ~]#

  设置镜像仓库地址

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo   ##此地址为官方的仓库地址,在国内建议不要用

  阿里云的镜像仓库地址

yum-config-manager \
  --add-repo \
   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  安装docker相关的引擎

  先更新yum软件包索引

yum makecache fase

  docker社区、ee企业版 ce为社区版 官方推荐使用ce版,默认安装最新的docker
  版本,也可以指定版本安装

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

  启动docker

systemctl  start  docker

  使用docker version 查看dockers是否启动

docker version

  使用hello-world镜像测试docker

docker run hello-world

  以下为执行结果

 

net 8 docker 发布 docker .net framework_net 8 docker 发布_03

 docker run运行思维导图

 

net 8 docker 发布 docker .net framework_microsoft_04

 

 

 

   查看本机存在那些docker镜像

docker  images

net 8 docker 发布 docker .net framework_docker_05

   可以看到刚才在执行docker run hello-world的时候,已经将hello-world镜像拉去到本地镜像中了

  了解 卸载docker

yum  remove docker-ce docker-ce-cli containerd.io

  删除资源

rm -rf  /var/lib/docker

  /var/lib/docker 为docker默认的工作路径!

  •    Linux下安装net5.0 SDK及Runtime

   安装5.0SDK

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-5.0 -y

   安装5.0Runtime

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

  验证

dotnet --info

 

net 8 docker 发布 docker .net framework_net 8 docker 发布_06

  •   步入正轨开始将API项目部署到dockek

    准备工作:

      发布后的文件放置Linux系统文件夹内,如图(现在只关注发布后的文件,当然也可以直接部署源代码文件)

net 8 docker 发布 docker .net framework_centos_07

      这里需要注意一些坑:

net 8 docker 发布 docker .net framework_microsoft_08

      构建镜像

        在构造之前,先测试下当前dll是否有效

 

net 8 docker 发布 docker .net framework_net 8 docker 发布_09

   如果提示dotnet命令不可使用,请参考请参考官网配置.net core sdk 安装  查看版本,测试是否安装成功。

net 8 docker 发布 docker .net framework_docker_10

   访问正常,关闭网站,开始构建镜像:

    进入当前程序目录

cd a/b  代表进入a文件夹里的b文件夹

net 8 docker 发布 docker .net framework_docker_11

     输入构建命令

docker build -t test-demo .

     build 命令参数:

-t  --指定镜像名称 (只能小写)
 .   --表示build上下文为当前目录,默认情况docker会使用上下文的根目录找到Dockerfile文件

     创建并启动容器

[root@localhost publish]# docker run --name myfirstApi -d -p 5000:80 test-demo

    run命令参数:

-d --表示在后台以守护态(daemonized)形式运行容器
 -p --外部端口与内部容器端口映射。
 --name 指定容器的名称。当然可以不指定,默认会为我们创建
 最后一个参数 test-demo 就是我们刚创建的镜像名称

    检查docker容器列表

[root@localhost publish]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                  NAMES
4064ae15311e        test-demo           "dotnet TestAPI.dll"   3 seconds ago       Up 3 seconds        0.0.0.0:5000->80/tcp   myfirstApi

    测试

net 8 docker 发布 docker .net framework_docker_12

     拓展:

      利用刚才相同的发布文件,继续生成一个不同端口号的服务

      命令重复以上步骤:

进入发布文件的目录
 
cd publish

生成镜像(注意 . 不能丢)

 docker build -t publish-demo .

启动容器

 docker run --name mysecondApi -d -p 5005:80 publish-demo

net 8 docker 发布 docker .net framework_net 8 docker 发布_13

      结果

net 8 docker 发布 docker .net framework_docker_14

    遇到的坑:

docker 安装报Error: moby-containerd conflicts with containerd.io-1.4.4-3.1.el7.x86_64
curl https://packages.microsoft.com/config/rhel/7/prod.repo > ./microsoft-prod.repo
sudo cp ./microsoft-prod.repo /etc/yum.repos.d/
yum update -y

    可以解决。