我们在 「Ubuntu 下部署 .NET 应用教程」一文中讲解了如何在 Linux 环境下部署 .Net 环境和进行了一个具体应用的部署。
目前将应用部署容器化早已是大趋势,Docker 这样的容器化技术极大地简化了程序的部署工作。不再需要浪费时间在一个服务器上配置你程序所需的环境依赖文件,你只需要创建一个 Docker 镜像,里面包含你程序运行所需的一切,然后在任何 Docker 宿主机上作为容器启动起来就行了。本文就来说说如何在 Docker 环境下部署 .Net 应用。
开始之前,首先你需要在机器上安装好 Docker。Docker 安装也是非常简单的,这里就不再累述了。如果你还不会安装可以搜索公众号上相关文章或者直接参考官方文档:https://docs.docker.com/install/
安装完成后要检验是否安装成功,可以执行:
1 | $ docker --version |
接下来,我们就来看看如何在 Docker 下部署 .Net 应用。Docker 部署应用的方式多种多样,这里我们主要讲如何通过 Dockerfile 和 Docker-Compose 进行部署。
通过 Dockerfile 进行 .Net 应用部署
Dockerfile 是由一系列命令和参数构成的脚本,一个 Dockerfile 里面包含了构建整个 Docker 映像的完整命令,我们会通过这些命令创建一个适合 .Net 应用部署的新镜像。
这里我们使用 「Ubuntu 下部署 .NET 应用教程」一文中提到的 NETCoreBBS 项目来演示。编写 Dockerfile 前我们需要做如下一些准备工作:
1 | # 建立一个用于 Docker 工作的目录 |
接下来编写一个适用于 .Net 应用镜像的 Dockerfile。
1 | $ vim Dockerfile |
这里我们简单说说以上几条 Dockerfile 中的指令的作用:
- FROM microsoft/dotnet:latest
第一个指令必须为 FROM。 此指令用于初始化新的镜像生成阶段,并为剩余指令设置基础映像。 本示例的基础映像是微软发布的 microsoft/dotnet ,这个镜像将确保容器包含运行 ASP.NET Core
应用所需的一切基础环境。
- COPY publish /app
复制 publish 目录下编译好的项目源码到 Docker 镜像里的 /app 目录。
- WORKDIR /app
WORKDIR 指令 为 Dockerfile 中的任何 RUN,CMD,ENTRYPOINT,COPY 和 ADD 指令设置工作目录。如果 WORKDIR 不存在它将被创建,Dockerfile 中之后的命令都会在这个 /app 文件夹内执行。
- EXPOSE 8000/tcp
默认情况下,Docker 容器不会暴露任何网络端口到外部。这里通过 EXPOSE 将内部端口映射到外部 8000 端口。
- ENV ASPNETCORE_URLS http://*:8000
ENV 指令将在容器里设置环境变量。ASPNETCORE_URLS 这个变量告诉 ASP.NET Core
应该绑定到哪个网卡的哪个端口上。
- ENTRYPOINT [“dotnet”, “NetCoreBBS.dll”]
Dockerfile 的最后一行通常都会设置一个入口程序,这里用 dotnet NetCoreBBS.dll
命令启动程序。
Dockerfile 编写完成后,我们就可以开始构建镜像了。Docker 是通过 docker build
指令执行 Dockerfile 中的一系列命令来完成自动构建镜像的。
1 | $ docker build -t aspnetcore . |
运行 docker images
命令可列出全部镜像。
1 | $ docker images |
镜像创建完成后,我们就可以通过这个镜像来创建一个运行有 .NET 应用的容器了。
1 | $ docker run -it -p 8000:8000 aspnetcore |
-it 参数的作用是让 Docker 以交互模式运行这个容器。当你想要停止这个容器的时候可按 Ctrl+C 结束。
如果你要让容器在后台运行可使用 -d
参数:
1 | $ docker run -d --name bbs -p 8000:8000 aspnetcore |
通过 Docker-Compose 进行 .Net 应用部署
Docker-Compose 是 Docker 官方提供的编排工具,负责快速的部署分布式应用。Docker-Compose 是通过 docker-compose.yml 配置文件进行应用部署的。
Docker-Compose 并不是 Docker 软件包中自带的工具。要使用 Docker-Compose 需要独立的安装,Docker-Compose 的安装也非常的简单,你可以通过以下指令来完成安装:
1 | $ pip install docker-compose |
通过 Docker-Compose 方式部署容器大大的简化了操作步骤,一共只需要下面两步:
- 编写 docker-compose.yml 文件
1 | $ vim docker-compose.yml |
配置参数含义和 Dockerfile 中类似,这里就不再累述了。 如果你先更加了解 Dockerfile 或 docker-compose.yml 语法可参考官方文档。
- 启动容器
1 | $ docker-compose up -d |
最后打开浏览器访问 http://IP:8000/
,成功出现以下页面就表示部署成功了。
到此,我们就演示了如何在 Docker 上搭建了一个完整的 .NET 应用。
参考文档
http://www.google.com
http://t.cn/Rn2X39F
https://deepzz.com/post/docker-compose-file.html
https://deepzz.com/post/dockerfile-reference.html