Asp.NetCore轻松学-使用Docker进行容器化托管

没有 docker 部署的程序是不完整的,在写了 IIS/Centos/Supervisor 3篇托管介绍文章后,终于来到了容器化部署,博客园里面有关于 docker 部署的文章比比皆是,作为硬核实战派,这里做的一定是一套打完带走的功法。本文使用的学习机器是由 Azure 倾情提供的 30 天试用版本,大家都可以申请的哈。

1. 为什么要使用 docker 1.1 docker 介绍

docker 带来的好处是显而易见的,使用 docker 可以在同一台服务器上部署多个版本的应用,彼此间不会引起冲突,更快的迁移过程,当需要增加服务实例的时候,只需要下载 docker 镜像即可部署运行,无需担心环境初始化等一系列前置工作,目前使用 docker 基于阿里云弹性计算的应用已经非常广泛,docker 容器内部就是一个独立的虚拟机,在容器中,你可以做一切你想做的工作,比如测试、代码编译,基于容器的版本回滚也非常的方便;有人说,使用了 docker 而没有使用容器编排的话是没有意义的;朋友们,不要听人云亦云, docker 的存在,本意并非面向大型应用,现在大量的微服务化就已经证明了 docker 是一个小巧、灵活的载体,所以,在单体应用中使用 docker 也是非常有必要的。

1.2 应用举例

举个例子,某外包公司为某企业开发了一款基于图像识别的程序套件,最初部署上线是使用 .NET Core 1.0 ,而由于技术迭代和业务的发展,甲方要求该套件必须升级到 .NET Core 2.0+,而该套件程序目前运行于正式环境中,且不能停机,这就是传说中的给飞行中的飞机换引擎;首先,在当前正式环境安装 .NET Core 2.0 风险较大,谁也不能保证没有兼容性问题;其次,使用另外一台服务做 .NET Core 2.0 的升级方案,但是该方案的缺点是需要增加服务器、且需要调整反向代理配置;开发方结合现实,给出 docker 部署升级的方案,通过容器化部署,对现有生产环境几乎就是零影响,且无需增加服务器和修改反向代理配置。

2 Centos 服务器安装前置条件 2.1 安装 docker-ce

参考:https://docs.docker.com/install/linux/docker-ce/centos/

$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2

Asp.NetCore轻松学-使用Docker进行容器化托管

添加包源

sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

Asp.NetCore轻松学-使用Docker进行容器化托管

开始安装 docker-ce

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

安装完成,输入

docker --version

Asp.NetCore轻松学-使用Docker进行容器化托管

表示安装成功,但是仅仅是安装成功,截至目前, docker 还没有启动,我们还需要手动启动 docker 服务,输入下面的命令

sudo systemctl start docker

*测试运行

sudo docker run hello-world

Asp.NetCore轻松学-使用Docker进行容器化托管

看上图红框处的两个消息,当输入命令 sudo docker run hello-world,docker 检查到本地仓库没有名称为:hello-world 的镜像,马上从官方仓库中拉取了该镜像,然后执行,hellow-world 执行后输出信息在红框 2 处,表示您安装的 docker 程序已经安装成功并成功使用容器运行。

2.2 使用安装脚本安装 docker

好消息是,当你对上面的一堆命令非常茫然的时候,docker 官方提供了一份安装脚本,可以一键安装 docker ,地址在:https://github.com/docker/docker-install,注意使用该脚本的权限,并且始终验证脚本的合法性

3. 开始使用 Dockerfile 3.1 为 .NET Core 应用程序编写 Dockerfile 文件

为了将 .NET Core 应用程序进行容器化,我们需要为程序编写一个 Dockerfile 文件,正如其名称一样,该文件的名字也需要命名为 Dockerfile,,然后将其放入程序根目录下,还是以之前的 Deploy.Linux 程序为例子,在 Deploy.Linux 根目录下创建 Dockerfile

我们有两种创建 Dockerfile 文件的方式

通过开发工具 visual studio 右键点击项目:添加-> Docker 支持

Asp.NetCore轻松学-使用Docker进行容器化托管

或者手动创建该文件,一个标准的 Dockerfile 如下

FROM microsoft/dotnet:2.2-sdk #这是第一个指令,必须是 FROM 这里指定基础构建镜像 WORKDIR /app #工作目录,即程序运行根目录 COPY *.csproj ./ #复制文件到容器中 RUN dotnet restore #下载项目依赖项 COPY . ./ #将剩余文件复制到容器中 RUN dotnet publish "Deploy.Linux.csproj" -c Release -o /app #发布容器中的项目到 容器中 /app 目录 ENTRYPOINT ["dotnet", "Deploy.Linux.dll"] #运行镜像入口命令和可执行文件名称 3.2 构建镜像

创建完 Dockerfile 文件后,将项目文件 copy 到服务器上,定位到目录 Deploye.Linux ,执行以下命令

sudo docker build -t demo .

注意:上面这条命令后面的小数点不是笔误,是必须的!

看到输出结果提示:Successfully tagged demo:latest 表示镜像构建成功

Asp.NetCore轻松学-使用Docker进行容器化托管

输入命令查看仓库中的镜像,可以看到 demo 镜像已经安静的躺在那里等待我们去开发了

sudo docker images

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppffz.html