将 .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
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;
}
}
----如果需要将服务器设为代理服务器 需要卸载 监控程序(一般服务器都有)
以下为腾讯云 监控软件 的卸载
sh /usr/local/qcloud/YunJing/uninst.sh && \sh /usr/local/qcloud/stargate/admin/uninstall.sh && \
sh /usr/local/qcloud/monitor/barad/admin/uninstall.sh