使用 docker 来部署 ASP.NET core 程序
暂不介绍 docker 是个什么东西? 不知道的自己百度.
第一步安装 docker:
我的 docker 是装在 centos7 系统上, Windows 上我的也用过, 但是在 Windows 上动不动就给我死掉. 最后换了 Linux 系统.
具体在 Linux 上如何安装 docker 参考下面的链接.
https://www.cnblogs.com/yufeng218/p/8370670.html
第二步拉取 dotnet 最新镜像:
docker pull microsoft/dotnet
然后等待拉去镜像. 如果是自己电脑的虚拟机的话, 会有点慢. 然后百度 docker 更改镜像库地址.
然后拉去完成后 使用这个命令
docker images
来查看当前的拉去后镜像.
拉去制定版本的的 dotnet 镜像或者拉去 ASP.NET core 运行时., 自己去百度 (懒得打字)
当前的 dotnet 镜像已经拉去好了. 我们来尝试运行一下, 输入一下命令
docker run -it 540aa875e6c2
上面命令的 540aa875e6c2 是我虚拟机上 dotnet 镜像的 ImageId, 请各位输入的自己机器上的. 使用 dokcer images 会显示镜像 id 的.
然后你会看到进入了一个这么个东西
- [root@iz2zefw4l0vyl0r786jwc1z ~]# docker run -it 540aa875e6c2
- root@d286c33bedd5:/# ^C
- root@d286c33bedd5:/#
最常用的输入 dotent -version 看看版本, 还有其他命令.
到这里我们的拉去基础镜像就完成了.
在这里你会问, 为什么要拉取 dotnet 镜像?
答: 不拉去基础镜像的你的. net core 根本用不了啊. 不能运行啊.
第三步上传. net core 程序 到 Linux 服务器.
随便百度一个 ftp 工具, 上传到 Linux 你想要的任何位置.
如果有人问, 我想制定一个目录上传怎么办?
答: 两个办法, 1 你去看看 Linux 创建目录的命令, 2; 大部分 ftp 工具都自带创建目录按钮, 点一下就行了.
第四步制作你自己程序的 docker 镜像.
要制作 docker 镜像, 就离不开一个叫 Dockerfile 东西. 这个东西是什么呢? 我在这里也不想介绍. 还是自己去百度看看把.
进入到上传. net core 程序的目录.
输入命令
vi Dockerfile
没有后缀, 大小写一直
输入或者粘贴一下文本
- FROM microsoft/dotnet:latest
- COPY . /App
- WORKDIR /App
- EXPOSE 80
- ENTRYPOINT ["dotnet", "webApplication4.dll"]
下面说一下我遇到的坑.
首先 copy 后面一个 点, 代表当前存放我们的程序的 dll 文件的目录. 后面 / App 是把当前目录重的文件拷贝到 docker 容器之中的那个目录. 这个目录要与上面的 WOKDIR 目录一致.
EXPOSE 用来指定端口, 使容器内的应用可以通过端口和外界交互.
ENTRYPOINT 进入容器执行程序的命令.
第五步打包镜像
输入命令
docker build -t 你给这个镜像取个名字 .
然会就会执行成功.
第六步启动镜像
输入一下命令来启动我们刚才打包的镜像
docker run --name 容器名称 -p 5000:80 -d 镜像名称或者镜像 id
然后使用
docker ps
命令, 来查看, 我们的镜像是否启动成功.
如果启动不成功, 你需要输入一下命令
docker logs 容器名称
来查看日志.
在说下我遇到的几个重点把. 如果你看过 doker run 的命令 你会发现 -p 要制定端口, 可是我们有在 Dockerfile 中写了程序通信的端口啊?
答: 如果你用我上面的那个 run 的命令, 你 Dockerfile 中写的 EXPOSE 就不会其作用了. 会强制使用 -p 绑定的端口.
第七步使用 Nginx 来转发我们的请求到容器
如何在 CentOS 安装 nginx 在不说了, 百度解决
找到 nginx 目录. 在 CentOS 上面 nginx 安装默认目录都是 /etc/nginx
在 nginx 目录找到默认的配置文件. 根据 Nginx 版本的不同,. 默认文件的目录也不同.
自己找找.
找到的话, 把里面 servier 节点里面的所有内容注释了.
新建一个 netcore.conf 的配置文件
赋值粘贴一下内容
- server {
- listen 80;
- location / {
- proxy_pass http://127.0.0.1:5001;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection keep-alive;
- proxy_set_header Host $host;
- proxy_cache_bypass $http_upgrade;
- }
- }
把里面的 地址改成你自己的端口. 如果访问的话初选 502. 百度 Linux 关闭 selinux.
来源: http://www.bubuko.com/infodetail-2865249.html