Ubuntu 16.04.5 Docker 部署 .net core 2.1 webapi 项目

1. 使用 vs 2017 创建 .net core 2.1 webapi 项目

1.1)新建项目 ,选择 ASP.NET Core Web 应用程序,然后 点击 确定

1.2)选择 .NET Core 版本 为 2.1 的,项目类型 选择 API,然后 点击 确定,就成功创建了一个 webapi项目

2. 发布 webapi 项目

2.1)在 项目右键,选择 发布,在弹出的界面,左侧选择 文件夹, 然后 点击 高级

2.2)按照图片 配置好 项目的发布信息,然后 点击 保存

2.3)确定好发布文件存放路径,然后 点击 发布

3. Docker 部署 参考资料

3.1)新建 sources.list 文件,执行 Dockerfile 时,将会替换 Ubuntu 本机的更新源,更新下载包会快点

deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib

3.2)设置 Dockerfile 的如下属性,保证其能复制到发布目录

如果发布目录没有复制到该文件 复制到输出目录:选择 始终复制

3.3)在 项目 根目录下 新建 Dockerfile 文件,添加 相关脚本

FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . /app
ENV ASPNETCORE_ENVIRONMENT="Production" ASPNETCORE_URLS="http://*:80"
# 加速Docker镜像编译之更换软件源
# 或者执行 RUN sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/mirrors\.aliyun\.com\/ubuntu\//g' /etc/apt/sources.list
COPY sources.list /etc/apt/
RUN apt update && apt -y install libgdiplus && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

EXPOSE 80
ENTRYPOINT ["dotnet", "DockerWebApiTest.dll"]

3.4)设置 Dockerfile 的如下属性,保证其能复制到发布目录

如果发布目录没有复制到该文件 复制到输出目录:选择 始终复制

3.5)在项目根目录下 新建 容器构建 脚本 Build.sh,添加相关脚本

#!/bin/bash

echo clear none docker image
# 停止容器
docker stop $(docker ps -a | grep "Exited" | awk '{print $1}')
# 删除容器
docker rm $(docker ps -a | grep "Exited" | awk '{print $1}')
# 删除镜像
docker rmi $(docker images | grep "none" | awk '{print $3}')
echo clear success

echo Linux Docker build
# 构建命令要要指定的 Dockerfile 文件所在
# 下面的命令是指 Dockerfile 在当前目录找
docker build -t dockerwebapitest .
echo docker build success

echo stop container

docker container stop dockerwebapitest

echo stop container success

echo remove container

docker container rm dockerwebapitest

echo remove container success

echo docker run

# -d 后台运行
# -p 8888:80 生成一个外部8888端口,对应容器的80端口 也就是Dockerfile 暴露的端口 EXPOSE 80
# --restart=always 开机自动启动容器 无论退出状态是如何,都重启容器
docker run -d --restart=always --name="dockerwebapitest" -p 8888:80 dockerwebapitest

echo docker run success

3.6)设置 Build.sh 的如下属性,保证其能复制到发布目录

如果发布目录没有复制到该文件 复制到输出目录:选择 始终复制

4.使用 FileZilla 上传发布文件到 Ubuntu,并执行 部署文件 Build.sh

4.1)查看 Ubuntu 的 IP 地址

4.2)使用 FileZilla 连接 Ubuntu ,前提是 确保 Ubuntu 安装了 ssh,并开启 ssh 服务,如果没有 可以参考参考资料

4.3)点击 连接 提示输入 Ubuntu 的用户登录密码,然后 点击确定

4.4)这样就顺利 连接成功了

4.5)在左侧 的 本地站点 找到 webapi 的发布目录,在右侧的 远程站点 /home/joe/ 下 新建 文件夹 lsp

4.6)将 左侧的 publish 文件夹 拖动上传 到右侧 新建的 lsp 文件夹下

4.7)准备执行 Bulid.sh,但 步骤 4.6 上传了文件,Build.sh 文件并没有 执行的 权限,

所以先进入到 Build.sh 文件所在目录,然后后 修改 Build.sh 的 权限

4.8)修改 Build.sh 文件模式 为 Unix (在Windows建立的文件文本模式为dos)

先执行 vim ./Build.sh

输入 : 进入vim的命令行模式(前提是安装了vim)

输入 set ff 回车查看 文件文本模式是否显示fileformat=dos

输入 : 再次进入命令行模式

输入 set ff=unix 然后回车

输入 : 进入命令行模式

输入 wq 保存退出

4.9)执行 Build.sh 文件,发布项目

执行

./Build.sh

如下图所示,我们就将 webapi 项目 在容器跑起来了

4.10)用 搜狗浏览器 访问 webapi ,测试是否能访问

但是 用用 IE 浏览器访问,返回的 是 有 执行结果的 json 文件,不知道是不是代码写的有问题

使用 Microsoft Edge 却访问不了,目前还不知道是什么原因,不知道有没路过大神可以解释下,菜鸟这里先谢过

其他浏览器还没测试过

5. 代码地址 https://github.com/harrylsp/DockerWebApiTest

Guess you like

Origin blog.csdn.net/qq1326702940/article/details/82392200