Centos 7 ASP.NET Core 1.0 Docker部署
先决条件
64位,内核3.10以上,查看当前的内核版本,打开一个终端使用uname -r显示您的内核版本
安装
sudo yum update
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
安装docker
sudo yum install docker-engine
启动docker
sudo service docker start
验证docker已正常安装
安装.net core 镜像
https://hub.docker.com/r/microsoft/dotnet/
新建文件Dockerfile ,并修改内容
文件内容
#基于`mcrosoft/dotnet:1.0.0-core` 来构建我们的镜像
FROM microsoft/dotnet:1.0.0-core
#拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中
COPY . /publish
#设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
WORKDIR /publish
#设置Docker容器对外暴露60000端口
EXPOSE 60000
#使用`dotnet MyApp.TestCore.dll`来运行应用程序
CMD ["dotnet", "MyApp.TestCore.dll"]
构建镜像
docker build -t my-dotnet-app .
注意最后有个.
如果创建失败,需要vpn才可以,这一步我试了几次总有超时,就找了个vpn再次构建就成功了
运行
docker run --name my-dotnet-app -d -p 60000:60000 my-dotnet-app
测试站点
失败了,报curl: (56) Recv failure: Connection reset by peer
修改程序如下:添加UseConfiguration
var configuration = new ConfigurationBuilder()
.AddCommandLine(args)
.Build();
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseConfiguration(configuration)
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
发布程序
修改Dockerfile 文件如下
FROM microsoft/dotnet:1.0.0-core
COPY . /publish
WORKDIR /publish
EXPOSE 5003
CMD ["dotnet", "MyApp.TestCore.dll","--server.urls", "http://*:5003"]
重新构建镜像
sudo docker build -t dotnetapp .
运行并查看
sudo docker run --name dotnetapp -d -p 5003:5003 dotnetapp
测试站点
api返回数据,成功
防火墙开放端口
$ sudo firewall-cmd --zone=public --add-port=5003/tcp --permanent
$ sudo firewall-cmd --reload
说下遇到的问题:
1.构建镜像时由于网络原因,试了好几次都没有成功,需要找个vpn
2.curl: (56) Recv failure: Connection reset by peer 这个错误,.net core默认创建的站点绑定的是localhost这个需要修改站点绑定方式,通过添加
UseConfiguration或UseUrls方式修改默认站点的绑定