将.NET Core部署在Docker(包含VS中Docker支持,发布,上传,解压,Build,运行)

12 篇文章 0 订阅
9 篇文章 0 订阅

原文:netcore程序部署到docker

 

1.基础准备 

1. ubuntu 18.04

 2. docker version 18.09    安装 https://blog.csdn.net/qq_36379495/article/details/92837897

3. netcore 2.1 

4 管理docker 中文件 https://www.cnblogs.com/pcy0/p/ftp-server-for-docker.html

5 部署3.1 https://www.cnblogs.com/zhoumeng0736/archive/2020/01/04/12149856.html

 2.简介

 自从netcore支持跨平台之后,以及现在很多公司都是采用容器化部署,今天在比较空闲的时候学习了一下。

 3.使用 

 3.1 创建netcore 项目  ,选择api程序完成创建

 

 

3.2 添加dockerfile

项目右键=》添加=》docker支持,添加成功之后会生成一个dockerfile文件,打开该文件,系统自动生成了一堆代码,但是在发布的时候发现不可用,因此从网上找了下面这种方式进行发布,把dockerfile属性改为始终复制,发布文件的时候直接把dockerfile文件也一块发布,如下图配置的dockerfile文件:

在发布目录下创建一个文本文档Dockerfile.txt ,或者在Linux系统创建一个文件Dockerfile
内容:

# 声明使用的基础镜像
FROM microsoft/aspnetcore:latest 
# 设置工作目录
WORKDIR /app
# 将本地应用拷贝到 容器 /app/ 目录下 "./"代表的就是/app 因为dockerfile文件和程序文件都在发布文件夹下 所以两个目录是一样的
COPY ./ ./
# 设置导出端口
EXPOSE 5000/tcp
# 指定应用入口点 NetCore.dll代表的是主程序文件
ENTRYPOINT ["dotnet", "NetCore.dll"]

 版本2

FROM microsoft/dotnet:latest #所需依赖
WORKDIR /web #容器中系统工作空间
#拷贝当前文件夹下的文件到容器中系统的工作空间(注意:“.”后面有空格)
COPY . ./ 

EXPOSE 80   #对外提供的端口号
 EXPOSE 443

#容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
ENTRYPOINT ["dotnet", "testDocker.dll"]

版本3 -项目使用版本

# 添加基础镜像
FROM docker.io/microsoft/dotnet:2.2.0-aspnetcore-runtime
#容器中系统的工作空间
WORKDIR /app
#拷贝当前文件夹下的文件到容器中系统的工作空间
COPY . /app
 
#设置Docker容器对外暴露的端口
EXPOSE 80
#容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
ENTRYPOINT ["dotnet","WalkingTec.Mvvm.Demo.dll"]

3.3 发布

跟以往发布net程序一样选择文件系统进行发布:

 

3.4 安装asp.net core镜像

sudo docker pull microsoft/dotnet

 因为我们在dockerfile中要求的from镜像是microsoft/aspnetcore:latest,所以下载的时候我们直接pullmicrosoft/dotnet,如果下载慢的话 可以配置国内镜像站,这里我用的阿里云的镜像

sudo vi /etc/apt/sources.list

镜像下载完成之后输入sudo docker images 检查一下是否下载成功,下图中箭头所指就是我们下载的镜像,到此需要准备工作已经完成。

sudo docker images

 

3.5 把文件上传到liunx指定文件夹当中

 本人所用sudo rz 把文件上传到liunx当中(如果您的linux系统没有安装,在终端输入:

sudo apt-get install lrzsz 进行自动安装),图中所示,刚才所发布的文件,全部上传到了liunx系统上的web文件夹当中

sudo apt-get install lrzsz
sudo rz

 

3.6 build 镜像

在build的时候注意,命令最后一定要有个".", 并且镜像名称也不允许出现大写,如果想带上版本号的话 可以输入命令:

sudo docker build -t web:v0.1 .

  ,如果不输入默认显示tag的latest

 

build之后就可以查看镜像列表:sudo docker images,下图中web  就是我们刚才所生成的镜像文件:

sudo docker images

 

3.7 运行build的镜像

sudo docker run -d -t -p 5000:80 web  #运行镜像

sudo docker ps  #查看正在运行的容器

sudo docker ps -a #查看所有容器信息

通过命令运行

docker run --name=aspnetcoredocker -p 7777:80 -d  aspnetcoredocker

--name:指定容器名称

-d参数表示容器在后台运行,我们不需要进入到容器。

-p参数表示端口映射,“-p 5000:80”表示将容器的80端口映射到本地5000端口。

-v参数表示目录映射,将服务器的/home/www目录挂到容器的/app目录。

出现一长串字符串,便是表示运行成功:

startdocker.sh文件快捷部署方式

#!/bin/bash
#zip -r /web/garbage_classification/bak/pcadmin`date +%Y%m%d`bak.zip ./ #备份
#unzip -o Web.zip #解压
docker stop walkingtec.mvvm.demo && docker rm walkingtec.mvvm.demo && docker rmi walkingtec.mvvm.demo #停止并删除容器并删除原镜像
docker build -t walkingtec.mvvm.demo . #构建镜像
docker run --name=walkingtec.mvvm.demo -v /web/dockerdemo/upload:/app/wwwroot/Upload --privileged=true -p 80:80 -d --restart=always walkingtec.mvvm.demo  #
docker ps #

执行命令(进入到具体目录中):sudo sh startdocker.sh

3.8 测试可正常访问

 

4.小结

在整个发布流程中涉及一些需要提前准备的例如docker环境,linux系统等还请自行配置。

 

三 安装DOCKER

 #安装Docker

yum install docker

#启动docker服务

systemctl  start docker.service

#配置开机启动

systemctl  enable docker.service

配置docker加速

配置docker加速最快的方法直接修改/etc/docker/daemon.json下的配置信息

/etc/docker/daemon.json

{

 "registry-mirrors": ["https://d8b3zdiw.mirror.aliyuncs.com"]

}

然后在终端重启docker服务

sudo systemctl daemon-reload

sudo systemctl restart docker

Linux相关命令及docker配置

第一次接触linux,很蒙圈,这里记录一下基础的命令,及docker需要用到的一些配置,以便以后查阅

Linux命令

  • 查看目录: ls
  • 创建目录: mkdir (目录名)
  • 删除文件:rm (文件或目录名)
  • 删除目录(包括其中的子目录和文件):rm -rf (文件或目录名)
  • 切换到root 用户: sudo -i 或sudo su -
  • 退出root 用户: exit
  • 显示当前目录: pwd
  • 复制文件/目录:cp 源文件或目录/目标文件或目 cp -r 复制文件夹 包括子目录和文件
  • 重命名文件/目录: mv (文件或目录名)
  • 进入目录:cd

文件权限设置:
chmod 777 home1 777是读、写、执行权限

 

XShell上传文件到Linux服务器上

在学习Linux过程中,我们常常需要将本地文件上传到Linux主机上,这里简单记录下使用Xsheel工具进行文件传输

1:首先连接上一台Linux主机

2:输入rz命令,看是否已经安装了lrzsz,如果没有安装则执行  yum   -y  install  lrzsz命令进行安装。

3:安装成功后,输入rpm命令确认是否正确安装

4: 使用 rz -y命令进行文件上传,此时会弹出上传的窗口:

5:选择要上传的文件,点击确定即可将本地文件上传到Linux上,如图表示成功上传文件

6:使用ls命令可以看到文件已经上传到了当前目录下

 

Linux的压缩/解压缩文件处理 zip & unzip

Linux的压缩/解压缩命令详解及实例

压缩服务器上当前目录的内容为xxx.zip文件

zip -r xxx.zip ./*

解压zip文件到当前目录

unzip filename.zip

另:有些服务器没有安装zip包执行不了zip命令,但基本上都可以用tar命令的,实例如下:

tar -zcvf /home/zdzlibs.tar.gz /home/zdz/java/zdzlibs/

 

zip命令详解

1.zip -r myfile.zip ./*
将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件

2.unzip
unzip -o -d /home/sunny myfile.zip
把myfile.zip文件解压到 /home/sunny/
-o:不提示的情况下覆盖文件;
-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;

 

Linux文件夹文件创建、删除

Linux删除文件夹命令

     linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。
直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字

 

 

 

删除目录、文件 rm(remove)

功能说明:删除文件或目录。
语  法:rm [-dfirv][--help][--version][文件或目录...]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。 
参  数:
 -d或–directory  直接把欲删除的目录的硬连接数据删成0,删除该目录。 
 -f或–force  强制删除文件或目录。 
 -i或–interactive  删除既有文件或目录之前先询问用户。 
 -r或-R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。 
 -v或–verbose  显示指令执行过程。 

 


1 删除文件夹
de>rm -rf  fileNamede>

 

-删除文件夹实例:
rm -rf /var/log/httpd/access

将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的

2 删除文件
de>rm -f  fileNamede>
使用 rm -rf 的时候一定要格外小心,linux没有回收站的

 

Linux添加文件命令

 

创建目录:mkdir(make directories)

功能说明:建立目录 
语  法:mkdir [-p][--help][--version][-m <目录属性>][目录名称]
补充说明:mkdir可建立目录并同时设置目录的权限。
参  数:
  -m<目录属性>或–mode<目录属性>   建立目录时同时设置目录的权限。
  -p或–parents   若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
例:mkdir  test
创建文件 touch

功能说明:改变文件或目录时间。
语  法:touch [-acfm][-d <日期时间>][-r <参考文件或目 录>][-t <日期时间>] [--help]   [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时 间][文件或目录...] 
补充说明:使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。
参  数:
 -a或–time=atime或–time=access或–time=use  只更改存取时间。 
 -c或–no-create  不建立任何文件。 
 -d<时间日期>  使用指定的日期时间,而非现在的时间。 
 -f  此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。 
 -m或–time=mtime或–time=modify  只更改变动时间。 
 -r<参考文件或目录>  把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。 
 -t<日期时间>  使用指定的日期时间,而非现在的时间。
例:touch test.txt (注:Linux下没有文件后缀名区分文件类型之说,系统文件类型只有可执行文件和不可执行文件)

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值