手机版

docker部署Asp.net核心应用程序的完整步骤

时间:2021-08-24 来源:互联网 编辑:宝哥软件园 浏览:

1 容器概念

在使用Docker之前,我们应该先简单了解一下容器的概念。MSDN有一个虚拟机和容器的对比图,显示了虚拟机和容器之间的区别。如下所示,虚拟机包括应用程序、必要的库或二进制文件以及完整的客户操作系统。每个虚拟机都有一个独立的内核,所以我们完全可以把一个虚拟机当成一个真正的物理机。容器包括应用程序及其所有依赖项。它们与其他容器共享操作系统内核。容器在主机操作系统上作为独立的进程运行。我们可以把容器想象成一个应用程序沙箱。

我们经常会遇到“我可以在我的机器上运行”的问题,然后我们在部署到其他机器上的时候会遇到各种坑,这大多是因为其他设备上的应用缺乏环境或者依赖造成的。使用容器技术可以很好地解决这个问题。容器是一个“应用程序沙箱”,它包含应用程序所需的环境和所有依赖关系。只要有这个沙盒,应用就可以在任何环境下正常运行。容器技术的典型特征是“一次打包,到处跑”。

Docker是一个使用go语言开发的开源应用容器引擎,它允许开发人员将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,并且还实现了虚拟化。让我们首先了解Docker中的三个核心概念:

1图像(图像)

Image是一个轻量级的、可执行的、独立的软件包,它包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

2集装箱(集装箱)

容器是镜像的运行时实例,当执行镜像时,它是在内存中运行的容器。如果图像在面向对象中被视为一个类,那么容器就是一个对象。使用类通过new获取对象,并使用image通过docker运行image名称/image id创建容器。

3仓库(仓库)

仓库是存放图像的地方。docker hub是docker提供的官方仓库,类似于githhub,通过push将图像推送到仓库,通过pull命令拉取图像。当然,我们也可以使用其他仓库或者自己建一个仓库。

2安装docker

1 Windows安装docker

docker在Linux系统上运行,在Windows系统上使用docker的时候默认使用Hyper-V功能,所以我们在Windows系统上安装docker之前必须先打开Hyper-V功能。打开【控制面板】,找到【启动或关闭Windows功能】,勾选【Hyper-V】,点击【确定】安装Hyper-V.

安装Hyper-V后,去docker官网下载Windows版的docker。docker需要登录才能下载。我们可以创建一个帐户。记住这个账号,以后我们会经常使用。码头下载地址。下载完成后,双击安装包,就可以一路下一步了。安装后,您需要重新启动计算机,打开命令行,并输入docker run hello-world。如果出现以下界面,表示docker安装成功。docker运行hello-world命令将首先在本地找到一个名为hello-world的图像。如果本地不存在此映像,它将从docker hub中提取hello-world映像并运行它。

2 Centos安装docker

Linux系统安装常用软件非常方便,可以通过执行以下命令来安装docker

#删除旧版本的sudoyum删除Docker \ Docker-client \ Docker-client-latest \ Docker-common \ Docker-latest \ Docker-latest-log rotate \ Docker-engine #安装一些必要的工具yum Install-yyum-utils-device-mapper-persistent-data LVM 2 #添加软件源信息sudo yum-config-manager-Add-repo http://mirrors.aliyun.com/Docker-ce/Linux/centos/Docker-ce . repo #更新yum cache yum makecache fast#安装dockeryum -y安装docker-ce#如果出现以下界面,则表示docker安装成功

3 Docker基本使用

1 使用官方docker实例

,可以查看官方教程了解更多关于docker的使用。在这里,我们将在两分钟内展示微软提供的docker栗子。执行命令dockerrun-p 8000:80-name aspnet core _ sample MCR . Microsoft.com/dotnet/core/samples 3360 aspnetapp,-p8000336080表示服务器的8000端口与容器的80端口映射,访问服务器的8000端口时会访问容器的80端口。- name设置镜像的名称

打开浏览器,访问虚拟机的8000端口如下,表示我们的容器已经成功启动!

我们使用docker图像和Docker Containers检查本地容器和图像,结果如下:

2 Docker常用命令

事实上,在我们的实际开发中可以使用的docker命令并不多。这里,我们简单总结一下最常用的docker命令。

# #检查docker版本和信息#检查docker-cli版本docker-version #检查docker版本docker信息# # Docker镜像相关命令#拉镜像Docker拉[imgName:tag]#] #运行镜像。容器docker run[imgname : tag/imgid]#查看所有图像docker images#删除图像在执行rmi命令之前,必须删除图像docker mi[imgname 3360 tag/imgid]#查看所有容器的所有容器。不带-a,查询所有正在运行的容器,docker容器ls -a #查看docker正在运行并停止的容器,docker ps -a #启动容器,docker启动[ctnName/cID]#停止容器,docker停止[ctnName/cID]#删除容器。在执行rm命令之前,必须停止容器。Docker RM [ctn name/cid] # #清理图像和容器#删除所有图像和容器docker kill $(docker PS-q);docker RM $(docker PS-a-q);Docker rmi $(docker images -q -a)#删除所有容器docker kill $(docker PS-q);Docker RM $(Docker PS-a-q)# Clear image Docker PS-a | grep ' existing ' | Awk ' { print $ 1 } ' | xargs Docker Stop Docker PS-a | grep ' existing ' | Awk ' { print $ 1 } ' | xargs dockerrm dockermages | grep one | Awk ' { print $ 3 } ' | xargs dockermi有时我们需要与容器交互,因此我们可以使用docker exec -it [name/id] common命令。例如,如果我们启动一个mysql容器mysqlx1,执行docker exec -it mysqlx1 mysql -p来表达与容器mysqlx1的交互,并执行命令[mysql -p]进行登录,如下所示。Ctrl p q退出容器并返回服务器目录。

3 定制容器

大多数用户使用docker的核心目的是为了更方便地交付项目,也就是将我们的应用程序构建成一个映像,然后交付该映像。在这里,我们演示如何构建Aspnet核心项目的图像。

1.开发aspnet核心应用程序

我们创建了一个名为DockerDemo的ASP.NET核心MVC项目。为方便起见,不检查Https和Docker支持,如下所示:

只需修改主页并运行它。测试项目中没有bug。运行的主页如下:

2发布项目并添加Dockerfile

发布项目,然后在发布文件夹下添加Dockerfile文件。结构如下:

文件内容如下:

#拉运行时父映像,要运行aspnet core应用程序,必须使用runtime from Microsoft/dotnet :2.2-aspnetcore-runtime #来设置容器工作目录WORKDIR /DockerDemo#并将当前目录中的所有文件复制到工作目录copy中。/DockerDemo# Expose一个端口,允许外部访问EXPOSE 80#容器入口命令,即在容器启动时执行DOT NET DockerDemo.dll命令。入口点[' DOT . NET ',' Dockerdemo。DLL'] Dockerfile公共指令。简要描述。

Dockerfile常见说明:#FROM:通常,我们创建的图像基于另一个图像,因此我们需要使用FROM。当然,我们也可以完全从头创建#WORKDIR:来设置容器#MAINTAINER:的工作目录。这个图像#COPY:的维护者经常需要将源代码复制到容器中,这只能通过COPY来实现。# RUN 3360在这里,我们可以定义一些需要运行的文件。#ENTRYPOINT:比如npm install、dotnet restore、dotnet run,定义了容器的入口,通常是一些dotnet/node命令,比如dotnet xxx.dll#CMD:设置容器运行的默认命令和参数,也就是容器启动时要执行的命令。当容器运行时,您可以覆盖命令#EXPOSE:(由CMD定义),以公开端口# env3360,设置环境变量3,并创建镜像。

docker创建图像非常简单。您可以通过执行Docker Build-t dockerdemo :v 1.0来创建映像,其中dockerdemo:v1.0是映像的名称和版本标记,可以随意设置。然后通过docker images命令查看所有图像,如下所示:

4运行容器

使用命令dockerrun-d-p 8080:80336080 dockerdemo :v 1.0启动容器,-d表示在后台运行,-p 8080:80表示服务器的8080端口映射到容器的80端口,我们也可以使用服务器的其他端口,容器的端口就是Dockerfile中Expose的端口。执行docker容器ls查看容器,这里我们的容器已经启动,如下所示:

打开浏览器,进入【服务器IP:服务器端口】界面,访问容器,如下图:

此时,本地映像已创建,容器已成功运行。

5使用docker集线器存储和分发图像

Docker提供了一个用于存储和分发映像的远程存储库,它类似于github,只是github托管代码,而docker hub托管映像。创建映像后,我们可以将其推送到远程仓库,然后在其他设备上拉映像。借助docker hub,我们可以更方便地管理和分发图像。docker hub的使用非常简单,只需记住三个命令

#标记镜像,即设置远程映像名称和标签docker标签本地名称:本地标签docker用户/代表名称3360代表标签#并将映像文件推送到docker hub docker推用户名/代表名称3360代表标签#拉远程映像docker拉rep name 3360 rep tag #注意:local name是本地映像名称local tag是本地映像标签# repname远程仓库映像名称rep tag是远程仓库标签# username是我们的docker hub用户名。使用命令Docker Tag Docker Demo :v 1.0 wyyxx/ResDocker Demo :v 1.0进行标记,使用命令Docker Push wyyxx/ResDocker Demo :v 1.0将图像推送到远程仓库,打开图像仓库,登录后可以看到我们定制的图像,如下图所示。

然后使用另一个安装了docker的服务器,执行命令Docker Run-p 8080336080 wyxx/RESDocker Demo :v 1.0来拉取远程映像并启动它,打开浏览器并输入如下地址:

当我们拉远程映像并运行容器时,我们不需要提前部署环境(比如安装运行时),因为映像中已经设置了所有必要的环境和依赖资源,所以我们只需要使用docker run命令来运行它。这也是使用集装箱送货的便利性。

4 使用Docker的一点建议

“3C原理”:一个容器只运行一个应用程序

使用映像交付应用程序,而不是直接部署

如果您想在centos上部署aspnet核心应用程序。错误的方法是在docker中安装centos系统,在centos系统中部署环境,然后部署我们的netcore应用程序,最后生成部署的应用程序的映像。正确的方法是通过Dockerfile定义我们需要的环境和依赖关系,然后生成映像,通过映像进行分发和执行。

分层构建图像

或者上面在centos中部署netcore应用的栗子,在从零开始定制映像时,我们应该把centos作为一层映像,把环境运行时作为一层映像,最后把我们的应用作为一层映像,用Dockerfile的FROM命令拉父映像。这具有节省空间和重用图像的优点。如上所述,我们使用2.2版的运行时映像。当我们创建另一个web应用程序,然后自定义图像时,这两个应用程序图像可以共享同一个运行时图像。

不要将数据存储在容器中

容器可以随时销毁,销毁后容器内部的数据将不存在,所以最好不要将需要持久化的数据存储在容器中。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。

版权声明:docker部署Asp.net核心应用程序的完整步骤是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。