使用Docker部署.NET Core站点

 

如果你对docker比较熟,请直接看第2部分


开始前说下docker的几个概念:

a.镜像 image
b.容器 container
c.注册中心 registry

镜像与容器的关系,相当于类与实例的关系,一个类可以创建多个实例。一个操作系统的镜像可以不断地用于安装操作系统。

注册中心里有仓库,用于存储、拉取镜像的地方,本例中没有用到。除了用registry还可以用导入导出的方式进行移植,不过这种方法已经不推荐了。

 

docker具有隔离性强、可移植、安全、可进行版本控制等特点。

 

1.Docker安装
这里使用的操作系统是CentOS7 ,其它系统可点开参考官方安装说明

1.1移除原有的包

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine -y

 

1.2安装相关工具              

yum install yum-utils device-mapper-persistent-data lvm2 -y

国内的服务器使用国内源,速度比较快  
官方源 https://download.docker.com/linux/centos/docker-ce.repo

这里拉取的是docker ce版,即社区版;它还有ee版,即企业版。

yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

 

1.3安装docker

yum install docker-ce docker-ce-cli containerd.io -y

 

1.4 开启,并运行一下官方测试镜像看正不正常

systemctl start docker
docker run hello-world

 

1.5 docker基本管理

systemctl start docker #开启
systemctl stop docker #关闭
systemctl restart docker #重启
systemctl enable docker #设为开机启动
systemctl status docker #查看状态
docker version #查看版本


2..Net Core 站点容器化
这里演示的方式是在windows下编译,发布到linux上的方式。也可以直接在linux上编译发布项目。


2.1创建网站

在windows下建一个.NET Core站点WebApp1,这里用的是.NET Core 2.2版本

 

2.2添加一个Dockerfile文件
在vs项目上点右键>添加>Docker支持>选Linux。也可以手动直接创建一个Dockerfile文件
修改Dockerfile文件如下:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app

COPY . .

EXPOSE 8081

ENTRYPOINT ["dotnet", "WebApp1.dll"]


EXPOSE 8081,暴露端口8081,项目里监听端口被我改成8081了,.NET Core2.1默认监听5000端口,2.2是80端口。
一定要跟项目中的端口一致,否则部署完访问不了。不知道端口多少的话可以在发布完后先运行下dotnet WebApp1.dll 就能看到端口了,或者进入容器查看。
其它具体解释看本文最后。

 

2.3让Dockerfile发布完能输出到发布目录
VS中在Dockerfile上点右键>属性,属性选项卡中,复制到输出目录 选择 如果较新则复制 。
这样发布时就会把这个文件输出到发布目录。

 

2.4发布网站

 

3.在CentOS7中操作

3.1在CentOS7上创建一个目录

mkdir WebApp1


把发布后的文件传到WebApp1文件夹下,然后进入WebApp1

cd WebApp1

 

3.2创建镜像

通过DockerFile创建镜像webapp1imag(镜像名不能用大写字母),后面的"."表示告诉docker创建镜像时在当前目录寻找DockerFile

docker build -t webapp1image .

 

3.3运行
基于镜像 webapp1image 把docker里的端口映射到主机(左边8081是主机的端口,右边是docker,左边的端口可随意变化)

docker run webapp1image -p 8081:8081


这时正常可访问http://IP:8081,按ctrl+c退出,退出后网站不能访问

 

 

3.4后台运行容器
基于webapp1image运行一个容器,别名WebApp1,-d表示在后台运行

docker run --name=WebApp1 -p 8081:8081  -d webapp1image

如果网站有上传功能,上传的文件存储在wwwroot/Upload文件夹中,那么应该用-v把它映射到主机上。应把Docker视为只读的,不应在里面存储文件。
那么应该这样:

docker run --name=WebApp1 -p 8081:8081 -v /Upload:/app/wwwroot/Upload -d webapp1image

访问http://IP:8081

#这时可用别名停止、开启、删除

docker stop WebApp1
docker start WebApp1
docker rm WebApp1

 

3.5再创建个WebApp1a容器 映射到主机的7081端口

docker run --name=WebApp1a -p 7081:8081 -d webapp1image

此时另一个端口http://IP:7081也可以访问

 

#如果访问不了,请看下日志,看下报什么错
a.查看CONTAINER ID(容器id)

docker ps -ls

b.根据容器id查看相应容器日志

docker logs 容器id

#进入容器
docker exec -it 容器id bash

容器id 可以用上面的别名代替,容器id很长,可以只输入前几位

运行ls即可看到被拷到doker里的文件

 

4.本文用到的Dockerfile说明
#----------------------DockerFile---------------------------
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base #使用2.2版的运行时作为基础镜像,根据项目的目标框架,首次会自动下载
WORKDIR /app #docker内的工作目录

COPY . . #将当前目录拷贝到docker的当前目录中

EXPOSE 8081 #暴露端口,2.1默认5000,2.2默认80端口
EXPOSE 443  #可以加多个端口


ENTRYPOINT ["dotnet", "WebApp1.dll"] #改成自己的 WebApp1.dll为发布完的Dll,比如项目是WebApp1.csproj,生成的dll一般就是WebApp1.dll
#----------------------DockerFile---------------------------
 

类别:OperationMaintenance   阅读(0)   评论(0)    发表时间:2019-08-17 10:07  星期六

评论区

发表评论

        姓名:
邮箱|网站:
        内容:

  (可按Ctrl+Enter提交)