.NET Core 如何部署到Docker(菜鸟篇)

摘要:
Docker从入门到实践-在Centos下安装Docker。如果下载速度慢,请替换yum软件源代码:可以通过在创建项目时选中启用Docker支持的选项来生成此文件。EXPOSE命令声明运行时容器提供服务端口。在COPY命令在指定位置创建目录之前,COPY将所有当前文件复制到您创建的工作目录。

我的.net core 版本为3.1,centos 版本为7.0

在Centos下安装Docker

这里参考此篇文章:Docker从入门到实践-在centos下安装Docker
如果下载慢就更换yum的软件源:
配置文件路径为: /etc/yum.repos.d/docker-ce.repo


安装完成后进行测试:docker run hello-world
输出如图所示的内容就表示安装成功:
微信截图_20201203134759.png

.NET Core 配置

这里的重点是需要一个 Dockerfile 文件,无需后缀文件名。
这个文件可以通过在创建项目的时候勾选 启用Docker支持 的选项生成,也可以自己在项目的根目录中新建一个,如图所示:
微信截图_20201203135034.png
如何写一个 Dockerfile 文件是本次文章内容重点。

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/core/aspnet:3.1

#FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
EXPOSE 80
EXPOSE 443

RUN apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

RUN cd /usr/local/src

RUN mkdir DockerAsPose

WORKDIR /usr/local/src/DockerAsPose

COPY . .

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

第一条 FROM 指令是拉取一个基础镜像,这里可以使用微软提供的官方镜像。据说还有一个体积更小的。这条命令必须放在第一行
然后是 EXPOSE 指令,这是告诉Docker 容器对外暴露的端口。

EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务


再然后是 RUN 指令,这里可以执行你想要执行的命令,比如安装某个依赖库。(我这里安装的是 libgdiplus,是图形处理方面的。
直到 COPY 指令前都是在指定地方创建一个目录,COPY . . 是将当前所有文件复制到你创建的工作目录中。


最后就是 ENTRYPOINT 指令 就是告诉程序的入口点是哪个。这里的 PPTDemo.dll就是你程序发布后生成的dll文件。

最终发布

在发布以前,你可以像以前一样通过文件夹的形式发布项目,最后会得到一堆dll文件以及你的 web.configDockerfile等文件。微信截图_20201203141501.png


这个时候你需要把你的发布文件夹内的所有内容上传到服务器的相关目录,可以通过 xftp 的方式上传。

上传完以后就是剩下最后一步,将程序部署到
Docker**中,这里我们需要以下2个命令来完成这部分操作:

#1.以下命令是构建一个镜像,镜像名称可以为XX.XXX.XX的格式,最后一定要以"."结尾
docker build -t test.iamge.docker .
#2.以下命令是让镜像在一个指定容器中运行,前面是容器名称,后面是镜像名称,-p 是指定容器的运行端口
docker run --name=testdockercontainer -p 5000:80 -d  test.iamge.docker

运行完以后就可以通过 curl 命令查看你的程序了。curl http://localhost:5000
如果以后每次需要更新程序的话,需要重新执行以下命令:

  1. 停止容器
  2. 删除容器
  3. 删除镜像
  4. 构建镜像
  5. 在指定容器中运行镜像


为了减少麻烦,以上命令可以放到一个可执行文件中,以后每次就执行这个文件。
build.sh

#!/bin/bash
cd ./my-publish
docker stop mycontainer
docker rm mycontainer
docker rmi my.api:v1
docker build -t my.api:v1 .
docker run --name=mycontainer -p 5000:80 -d  my.api:v1

相关命令

docker ps 列出所有正在运行的容器
docker stop 容器名称或ID 停止某个容器
docker ps -a 列出所有容器(包括已停止的容器)
docker images 列出所有镜像
docker rm 容器名称或ID 删除某个容器
docker rmi 镜像名称或ID 删除某个镜像
firewall-cmd --zone=public --add-port=5899/tcp --permanent 打开防火墙的指定端口
firewall-cmd --query-port=80/tcp 查询防火墙指定端口是否打开
:set ff vim 打开后查看文件的格式
:set ff=unix vim打开文件后,设置文件格式为unix

参考资料

免责声明:文章转载自《.NET Core 如何部署到Docker(菜鸟篇)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows子系统配置,cmder配置, pycharm配置django开发环境【转】DataSource高级应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【android】读取/res/raw目录下的文件

1。获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/res/ raw目录下,可以在 Activity 中通过 Context.getResources().openRawResource(R.raw.sample); 方法获取输入流。 注意:如果资源文件是文本文件则需要考虑文件的编码和换行符。建议使用UTF-8和Uni...

WinDbg调试分析 asp.net站点 CPU100%问题

 公司为了节省成本,最近有一批服务器降了配置,CPU从8核降到了2核。本身是小站点,访问量也不高,CPU总是会飙到100%而且可以一直持续几个小时,直接强制结束进程可以维持几个小时,几个小时后又一样,运维那边总是受到cpu的警告短信很是苦恼,按理来说就算降低了配置也不至于会让CPU一直100%。    以下就分享本次使用 WinDbg 找出 CPU 100...

Ambari安装

    adp环境配置文档adp环境配置文档 1 一,环境的基础配置同Apache hadoop类似(可参考) 1 二,不同配置之处 1 2.1 同步时钟 1 三. Hdp服务器配置 2 3.1 资源库的配置 2 3.2安装mysql 2 3.3安装配置Ambari 3 3.4重启Ambari-server 4 3.5启动图界面 4 3.5.1在物理主机浏...

android dlopen调用so库

转自:http://hi.baidu.com/mcu99/blog/item/216f1fce17e1c00b92457edd.html 以下程序在Ubuntu操作系统上,gcc编译通过。但是当我想把它们移到Android下运行时,则出现错误,问题出在什么地方尚不得而知。(补充:该问题已经解决,详见http://hi.baidu.com/mcu99/blo...

windbg是如何搜索符号文件的?

来个样例 我的符号目录设置是: 用我们在windows下调试必须用到的ntdll.dll模块来讲下windbg加载符号文件的过程。windbg加载符号文件时,会首先根据配置的符号目录信息,在本地符号目录中查找对应的符号文件。一个典型的搜索过程如下:F:Debug_SymbolSymbols32F:Debug_SymbolSymbols32pingme.tx...

文件加锁(基于FileChannel)

      JDK1.4引入了文件加锁机制。它允许我们同步访问某个作为共享资源的文件。不过,竞争同一文件的两个线程可能在不同的Java虚拟机上,或者一个是Java线程,另一个是操作系统中的其他的某个本地线程。文件加锁对其他的操作系统进程是可见的,因为Java的文件加锁直接映射到了本地操作系统的枷锁工具。       通过对FileChannel调用tryL...