将 .net core 通过容器docker 部署到 linux 记录

1.  add docker to linux  执行 

  (官方脚本 安装)  curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun   

或  

   (国内 daocloud 一键安装命令) curl -sSL https://get.daocloud.io/docker | sh

如果通过以上方法提示nokey 什么的 尝试以下方式

#docker 使用腾讯云源
sed -i 's/download.docker.com/mirrors.cloud.tencent.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
 

安装完后默认是没有启动的 .需要启动执行以下命令

 systemctl enable docker --now      (--now 现在启动)

查询docker是否运行了

    systemctl status docker   

 

 

 

 

 开启防火墙, 开启http/https     开启转发服务(不开外网访问不了,为是容器需要)      开放5000的端口

systemctl enable firewalld --now \
&& firewall-cmd --permanent --add-service=http \
&& firewall-cmd --permanent --add-service=https \
&& firewall-cmd --permanent --add-masquerade \
&&firewall-cmd --permanent --add-port=5000/tcp \
&& firewall-cmd --reload
 
 
以下为docker配置文件信息(直接建一个名为Dockerfile的txt文件,文件名不能后有后缀,把以下内容放进去,然后放到你发布的项目根目录下) 

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

WORKDIR /coretest
ENV ASPNETCORE_URLS http://+:5000 #net 运行时使用的端口号不指定默认启动时将绑定80端口

ENTRYPOINT ["dotnet", "testCore.dll"]

 

生成镜像

    docker build -t webapi .

   webapi 指生成的docker 镜像名,  后面的 . 指当前目录

查询当前已生成的镜像

      docker images

 

生成镜像到一个容器,并运行它
docker run --restart=always -v /usr/share/ip2location:/usr/share/ip2location -v /usr/share/nginx/WebApi:/webapi --name=webapi -i -t -p 127.0.0.1:5000:5000 -p 127.0.0.1:5001:5001 -d webapi 
   --restart=always  如果出了问题自动重启
   -v /usr/share/ip2location:/usr/share/ip2location  映射路径    -v 本机主程序路径(或其它需要用到的路径):容器的工作目录路径<配置文件里配置的Workdir>( 映射到容器里哪个路径)  (多个直接空格和拼接 如上面的例子) 
  --name=webapi   webapi是容器名. 可以随便取一个
   -i -t    常规标配 
   -d webapi   webapi 是上面生成的镜像名
  -p 127.0.0.1:5000:5000   端口映射   对外端口:容器端口(即配置文件里那个) (5000是http 的默认端口  5001 是https 的所以两个都做了映射) (127.0.0.1: 可以去掉 让它监听所有地址的请求,如果加了这个则需要 做反向代理来访问127.0.0.1的端口)
 
 
查询所有生成好的容器
 docker ps -a 
 
删除容器
docker rm 容器名或上面查出的容器ID
 
 
 ------------------------以下为反向代理的.不是必须的.上面如果是监听所有地址的端口不做这个也可以访问--------------------
1. 将nginx 拷到 /etc/ 目录下
2. 配置好nginx sites-available目录和 sites-enabled 目录都要放. 可以在一个目录里做好然后 在另一个目录做一个快捷方式 (以下为建快捷方式的语句:  ln -s /etc/nginx/sites-available/web-proxy.conf /etc/nginx/sites-enabled )
3. mkdir /var/log/nginx  创建 nginx 日志目录
然后执行以下命令运行nginx
docker run -d --name=nginx --restart=always --network=host -v /etc/nginx:/etc/nginx -v /usr/share/nginx:/usr/share/nginx -v /var/log/nginx:/var/log/nginx -v /var/run:/var/run nginx:stable-alpine
 
nginx 配置 (我这边用的.    /etc/nginx/sites-available/web-proxy.conf)

server {
listen 80;

server_name 公网的地址;

location / {

#Proxy Settings
proxy_pass http://127.0.0.1:5000; #这里是映射的内网的地址
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass_header Server;
proxy_redirect off;
proxy_set_header X-Scheme $scheme;
proxy_pass_request_headers on;

add_header Static Nginx-Proxy;
}
}

 
如果以上配置好 容器启动还是有问题 可以看看  /etc/nginx/nginx.conf  这个配置文件中的  user 是否不正确. 它配置的是运行角色(身份信息, 建议不要用 root 去执行.) 不配置正确可能会一直重启
 

 

 ----如果需要将服务器设为代理服务器 需要卸载 监控程序(一般服务器都有) 

 以下为腾讯云 监控软件 的卸载

sh /usr/local/qcloud/YunJing/uninst.sh && \
sh /usr/local/qcloud/stargate/admin/uninstall.sh && \
sh /usr/local/qcloud/monitor/barad/admin/uninstall.sh

 

如果 docker运行失败处理步骤(以下为个人处理方式 ,不保证是最优的)

    1. 注释dockerFile里的 ENTRYPOINT ["dotnet", "dockertest.dll"] 即 #ENTRYPOINT ["dotnet", "dockertest.dll"]

    2. 重新生成images 然后创建新docker运行

   3. 使用命令 sudo docker exec -it docker id或dockername /bin/bash   进入docker内部(注意把程序生成debugger版本的)  然后直接dotnet 你的程序集.dll  就会看到程序具体的异常信息如下图 

      进入docker后的显示 (最后几行sa@xxxx 的是我的服务器的) root@xxxx 这个是进入docker后的.也可以使用dotnet --info查看 docker里dotnet的信息

 

 

 

 

 

 

 
 
posted @ 2021-02-05 15:56  望着天的蜗牛  阅读(175)  评论(0编辑  收藏  举报