使用docker-compose部署ASP.NET Core网站

ASP.NET Core已经发布到2.2版本,离大版本发布3.0也很近了。.NET Core是跨平台,它既可以部署在windows的IIS上,也可以部署在Linux、Mac上,对于生产环境,现在越来越多的投向了Linux,由于其强大的生态。今天我们要介绍如何在CentOS 7.5上部署ASP.NET Core网站。

如果你了解docker,而不了解docker compose,那我强烈建议你往下看!!!它同样是docker官方推出,也很简单,比你想象的还要简单,你只要花一点时间看看官网,或者先百度,大致了解一下这个工具,你可能就会喜欢上它,尤其如果你是一个开发人员。

我们从一个简单的部署开始,就几个步骤而已,我假定过自己不懂docker compose,就根据这个安装文档,一步一步执行,也成功的完成了网站的部署,我想你也可以的!!!

  • - CentOS 安装几个包
  • - 安装 Docker
  • - 安装 Docker Compose
  • - 下载 Docker 镜像
  • - Dockerfile
  • - docker-compose.yml
  • - 启动网站

1. CentOS 安装几个包
我是刚刚创建了一个CentOS 7.5的虚拟机,如果你是用阿里云的服务器,这个安装是不需要

$ sudo yum -y install net-tools wget telnet


2. 安装 Docker
a). 安装需要的包

$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2


b). 设置下载源

$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo


c). 安装

$ sudo yum install docker-ce docker-ce-cli containerd.io


d). 启动与开机启动

$ sudo systemctl start docker
$ sudo chkconfig docker on


官方安装文档:https://docs.docker.com/install/linux/docker-ce/centos/

3. 安装 Docker Compose
有些人听说过docker,可能不了解docker compose,它是对docker的一个扩张,同样是官方提供的,不管在测试环境,还是在小规模的生产环境,我都不会建议你直接用docker来部署网站,那就太笨了。我建议使用docker compose,它太方便好用了,而且容易管理。大规模的生产环境网站,建议使用kubernetes
a). 下载

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


b). 设置执行权限

sudo chmod +x /usr/local/bin/docker-compose


官方安装文档:https://docs.docker.com/compose/install/

4. 下载 Docker 镜像
这里下载2个Docker镜像,一个mysql,一个asp.net core运行时镜像,如果你只是跑个demo,并不需要数据库,那么mysql可以不下载。docker images命令是查看下载的镜像

$ docker pull mysql
$ docker pull mcr.microsoft.com/dotnet/core/aspnet
$ docker images


5. Dockerfile
这是一个Dockerfile文件的内容,将它复制保存到你网站的发布的根目录,你仅仅需要修改最后一行dll的名字,保持与你网站的那个根目录下的dll名字一致即可

#基于 microsoft/dotnet 来构建我们的镜像
FROM mcr.microsoft.com/dotnet/core/aspnet

#拷贝项目publish文件夹中的所有文件到docker容器中的publish文件夹中
COPY . /publish

#设置工作目录为 /publish 文件夹,即容器启动默认的文件夹
WORKDIR /publish

#设置Docker容器对外暴露80端口
EXPOSE 80/tcp

#使用dotnet www.hrefs.cn.dll来运行应用程序,www.hrefs.cn.dll是你网站的启动dll
CMD ["dotnet", "www.hrefs.cn.dll"]


如下图,发布目录下面多了一个Dockerfile文件,其他与你平时发布没有什么区别


6. docker-compose.yml
这是个关键的文件,它存放在你发布命令执行的根目录,见第7步的截图。这个配置指定了将启动两个容器,一个mysql,一个whrefs,名字只是个标识符,你也可以起别的名字

version: '3'
services:
mysql:
image: "mysql:latest"
ports:
- "3306:3306"
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- /docker/mysql/data:/var/lib/mysql
- /docker/mysql/conf:/etc/mysql/conf.d
whrefs:
image: whrefs:latest
build: ./whrefs
restart: always
container_name: whrefs
ports:
- "80:80"
depends_on:
- mysql


7. 启动网站,停止网站
在启动网站之前,先看看CentOS上的文件目录结构,下图可以看见一个docker-compose.yml配置文件,就是第6步的内容。还有一个目录whrefs,它是网站发布的所有文件,如第5步截图包含的内容,目录名whrefs与docker-compose.yml中的whrefs是对应的,必须一致,容器名可以不一致。第一次执行docker-compose up -d会创建镜像、容器,会有一大串输出,我这里没用提供截图,用户自己可以看见。之后的停止,启动,输出就很少了,如下图:


注:执行docker-compose命令,必须在docker-compose.yml所有的当前目录,也就是说,你输入ll命令,必须得见到docker-compose.yml文件,如上图那样

再看看我们创建的镜像与容器,我们创建了一个镜像whrefs,还有2个镜像是之前下载的。我们创建了2个容器,一个msyql容器(数据库),一个whrefs容器(网站)。


启动、停止

docker-compose up -d
docker-compose stop


appsettings.json连接数据库使用docker-compose.yml中的服务名,即mysql,不是容器名字,是services节点下面的子节点名字,在这里,我把服务名与容器名命名成一样了,用户可以命名不同名字。数据库连接在这里不能使用IP地址,或者localhost,因为你并不知道它IP是多少,这个IP是动态的
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Mysql": "data source=mysql;database=hrefs;uid=root;pwd=123456;CharSet=utf8;port=3306;"
}
}


输入地址:http://172.20.10.4,就可以打开网站了
Posted by 何敏
on 2019/04/16 07:14:23
Copyright ©2018 程序员网址导航 粤ICP备14091834号