.net core 部署 docker (CentOS7)
最近研究 docker 在 Linux 下部署 .net core 项目, 在过程中踩了很多坑, 网上的资料对我帮助确实大, 但有些问题未指明出来.
特地整理一份在发布文档
本文使用的是 root 账号操作, 如果不是 root 账号, 命令前需要增加 sudo
1, 安装 dotnet
https://dotnet.microsoft.com/download
以安装运行时 2.2 版本为例
- https://dotnet.microsoft.com/download/linux-package-manager/centos/runtime-current
- rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
- yum update
- install aspnetcore-runtime-2.2
查看 dotnet 版本
dotnet --info
2, 安装 Docker
yuminstalldocker
查看 docker 版本信息
docker version
3, 启动 docker
systemctl start docker.service
4, 配置开机启动
systemctlenabledocker.service
5, 配置 docker 加速器
本方使用的是阿里云镜像加速器, 参考
https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.549.19e611be46gAPY
容器镜像服务 -> 镜像加速器
- mkdir -p /etc/docker
- tee /etc/docker/daemon.JSON <<-'EOF'
- {
- "registry-mirrors": ["你的镜像加速地址"]
- }
- EOF
重启 docker 服务
- systemctl daemon-reload
- systemctl restart docker
6,.net core 创建 Dockerfile
- # 基于 `microsoft/dotnet:2.1-aspnetcore-runtime` 来构建镜像, 自行更改为你自己的
- FROM microsoft/dotnet:2.1-aspnetcore-runtime
- # 拷贝项目 publish 文件夹中的所有文件到 docker 容器中的 publish 文件夹中 , publish 可自行更改名称
- COPY . /publish
- # 设置工作目录为 `/publish` 文件夹, 即容器启动默认的文件夹
- WORKDIR /publish
- # 设置 Docker 容器对外暴露 5000 端口, 防火墙需要开放此端口, 必须和 dotnet xx.dll 运行时的端口保持一致
- EXPOSE 5000
- # 使用 `dotnet xx.dll` 来运行应用程序
- ENTRYPOINT ["dotnet", "ToolManager.dll"]
7, 发布项目
<喎"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cD48c3Ryb25nPjihor2rt6KyvLXEzsS8/r+9sbi1vSDE3Leib3O1xM+1zbPOxLz+vNDW0Dwvc3Ryb25nPjwvcD4KPHA+tLS9qCBkb2NrZXKjqNfUtqjS5cP7s8ajqc7EvP680DwvcD4KPHA+yrnTw3dpblNDULmkvt/Jz7SrzsS8/rW9bGludXi3/s7xxve1xNa4tqjOxLz+vNA8L3A+CjxwPjwvcD4KPHA+PHN0cm9uZz45oaLJ+rPJvrXP8Twvc3Ryb25nPjwvcD4KPHA+Y2Qgtb0guNWyxbXEzsS8/rzQz8I8L3A+CjxwPmRvY2tlciBidWlsZCAtdL61z/HD+7PGIC4gICCjqNei0uKjutfuuvO/1bjxuvPD5tPQ0ru49i6jqaGjPC9wPgo8cD48L3A+CjxwPsq+wP2juiBkb2NrZXIgYnVpbGQgLXRkZW1vLW5ldGNvcmUgLjwvcD4KPHA+PC9wPgo8cD48c3Ryb25nPjEwoaKy6b+0yfqzybXEvrXP8Twvc3Ryb25nPjwvcD4KPHA+ZG9ja2VyIGltYWdlczwvcD4KPHA+PC9wPgo8cD48c3Ryb25nPjExoaLUy9DQZG9ja2VyyN3G9zwvc3Ryb25nPjwvcD4KPHA+ZG9ja2VyIHJ1biAtLW5hbWUgyN3G98P7s8YgLWQgLXAgNTAwMDo1MDAwIL61z/HD+7PGPC9wPgo8cD7KvsD9o7ogZG9ja2VyIHJ1biAtLW5hbWUgZGVtb2NvcmUgLWQgLXAgNTQ5MDc6ODAgZGVtby1uZXRjb3JlPC9wPgo8cD5kZW1vY29yZSDI3cb3tcTD+7PGoaM8L3A+CjxwPi1kILrzzKi9+LPMoaM8L3A+CjxwPi1wyse9+NDQy97W97rNyN3G99auvOS2y7/atcTTs8nko6yjqC1wIMve1ve2y7/ao7rI3cb3tsu/2qOpPC9wPgo8cD5kb2NrZXIgcnVuIC0tbmFtZSBhZ2VudHNlcnZpY2UgLWQgLXAgODgxMDo4ODEwIGFnZW50c2VydmljZS1jb250YWluZXI6MS4wIDxzdHJvbmc+LS1yZXN0YXJ0PWFsd2F5czwvc3Ryb25nPjwvcD4KPHA+PC9wPgo8cD48c3Ryb25nPjEyoaK87NHpZG9ja2VyyN3G98rHt/HUy9DQs8m5pjwvc3Ryb25nPjwvcD4KPHA+ZG9ja2VyIHBzIC1hPC9wPgo8cD5kb2NrZXIgcHMgsum/tNX91NrUy9DQtcTI3cb3PC9wPgo8cD48L3A+CjxwPjxzdHJvbmc+yOe5+9Lss6OjrMq508PD/MHuPC9zdHJvbmc+PC9wPgo8cD5kb2NrZXIgcnVuIC1pdCC+tc/xw/uzxiBiYXNoPC9wPgo8cD6y6b+00uyzozwvcD4KPHA+PC9wPgo8cD7I57n7IMzhyr4gc2RrsOaxvrK7zaw8L3A+CjxwPsm+s/2+ybDmIHJwbSAtcWEg" grep dotnet*
更新对应的 sdk yum install dotnet-sdk-2.1
13, 防火墙开放端口
查看防火墙状态: systemctlstatusfirewalld
开启防火墙: systemctlstartfirewalld
开放端口: firewall-cmd--zone=public--add-port=[端口] /tcp--permanent
firewall-cmd--reload 重启防火墙
firewall-cmd--query-port=[端口] /tcp 查看端口是否开放
14, 访问
因为运行 docker 容器的时候 进行了 端口映射 所以外部访问端口 为 5000
https://192.168.1.1:5000
15, 停止和删除容器
- dockerstop (容器 id)
- sudo docker rm (容器 id)
16, 删除镜像
docker rmi (镜像 ID)
17, 查看 docker 日志
- docker logs -f -t --since="2017-05-31" --tail=10 alibaba-vica-netapi
- docker logs 6dc1e5f74c0
16, 停止和删除容器
- dockerstop (容器 id)
- sudo docker rm (容器 id)
17, 删除镜像
docker rmi (镜像 ID)
18, 创建容器
docker commit -p 容器 ID 快照名称
19, 保存本地 tar 备份
docker save -o ~/xxxx.tar 容器名称
20, 恢复 docker 备份
docker load -i docker-alibaba-server.tar
21, 进入 docker 容器内部
docker exec -it 容器 id /bin/bash
22, 退出容器
Ctrl + D 或 exit
遇到的问题
发布后访问时提示 连接被重置
原因由于程序中
并且
dockerfile 文件中
EXPOSE 5000 #端口必须跟里面的端口保持一致
来源: https://www.2cto.com/kf/201904/804509.html