在Linux中使用全Docker方式来部署Asp.net Core mvc网站

使用Docker来部署服务已经流行一段时间了,现在微软也在自己的产品集成了Docker的应用,可以说Docker在微服务中是无处不在了,你也值得一学,这个周末我就带你飞一次,体验一把Docker的实战。

在安装过程中,你总是可以使用命令来查看你安装的镜像与启动的容器是否正常,如下两个命令

1. Docker 安装启动
yum -y install docker-io
service docker start
chkconfig docker on

2. 安装.net Core镜像
docker pull microsoft/dotnet

3. 安装mysql镜像,启动你的镜像
docker pull mysql
chcon -Rt svirt_sandbox_file_t /docker/mysql/data
启动镜像,也提供加端口与不加端口方式启动,遇上面一样,加端口是为了外面的客户端可以连接,不加的话仅仅提供给网站容器使用
docker run --name mysql -v /docker/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker run --name mysql -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql

4. 自制网站的镜像,基于上面的镜像来做
首先你的修改数据库连接,上面已经帮你获取mysql的IP,然后发布你的网站上传到linux上,放哪里都可以,只是用它来做镜像,做完了就可以删除,记住为了能使得网站对外访问,你需要在Program.cs中加上
.UseUrls("http://*:5000")

假如你放到一个叫publish的目录
cd publish
vi Dockerfile
然后将下面的配置写入Dockerfile文件
#基于 microsoft/dotnet 来构建我们的镜像
FROM microsoft/dotnet:latest

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

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

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

#使用dotnet asyons.com.dll来运行应用程序,asyons.com.dll是你网站的启动dll,你需要改成你自己的名字
CMD ["dotnet", "asyons.com.dll", "--server.urls", "http://*:5000"]

然后开始bulid,注意asyons是我起的名字,还有后面的.符号不要丢掉了,代表当前目录
docker build -t asyons .

现在你可以启动了,加端口意味你可以在外面访问这个容器,也可以不加,不加的话,仅仅供其他容器使用,在外边将无法访问,比如我的nginx镜像与网站在同一个服务器,我就选择不加
docker run --name asyons -d asyons
docker run --name asyons -p 5000:5000 -d asyons

5. 安装配置nginx镜像
docker pull nginx
chcon -Rt svirt_sandbox_file_t /docker/nginx/conf
nginx.conf文件自己去弄一个,然后获取网站容器的IP,然后将这个IP配置到下面的节点上实现反向代理
docker inspect --format='{{.NetworkSettings.IPAddress}}' asyons
location / {
    proxy_pass http://172.17.0.4:5000;
}
启动容器,这个端口是必须的,不然就没法对外访问了
docker run --name nginx -p 80:80 -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

总结:大功告成了,你可以直接用服务器的IP访问你刚刚做好的网站,无需端口,默认80,我是在虚拟机中完成的,直接使用虚拟机的IP访问就可以,一切顺利。这个是一个简单的,单机的,生产环境的部署方式,里面的参数命令未一一介绍,这个你需要去hub.docker.com上去看详细文档。

Posted by 何敏 on 2017-04-15 15:10:33