docker 部署.net core 3.1程序

docker 部署.net core 3.1程序


 

  公司部署网站一般是需要三台服务器,数据库服务器,应用服务器以及一台通讯服务器(环保行业需要稳定的数据接收服务,并进行入库),这种部署方式无疑给销售带来了麻烦,别人家都是1台服务器就够了,而我们却需要三台服务器,不占优势,并且,如果小木较小,也神请三台服务器很容易造成浪费,所以领导决定使用docker来做程序的部署,对程序进行隔离,小项目一台服务器搞定,并且所有项目都开始迁移到云上,这也是为什么上docker的背景了。

docker安装

安装所需的软件包,yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

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

使用命令来设置docker仓库(阿里源,官方源太慢了)

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

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

启动docker并设置开机启动

启动docker

sudo systemctl start docker

设置开机启动

sudo systemctl enable docker

设置镜像加速器

登录阿里云控制台,并搜索 容器镜像服务 并选择镜像加速器

 

 

按照步骤设置镜像加速器

docker使用

接下来就是使用docker部署我们的程序了,在我们的程序中添加Dockerfile

 

 

Dockerfile

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
#修复调用System.Drawing生成图片时确少 libgdiplus 的问题
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list 
RUN apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
WORKDIR /app
EXPOSE 5004
COPY . .
ENTRYPOINT ["dotnet", "TyFrame.WebApi.dll"]

FROM定制的镜像都是基于 FROM 的镜像,这里的asp.net core:3.1就是定制需要的基础镜像。后续的操作都是基于asp.net core:3.1。

RUN:用于执行后面跟着的命令行命令。这里是因为基础镜像中确少依赖 libgdiplus 需要安装否则无法生成验证码。

WORKDIR 工作目录。

EXPOSE 声明端口,帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射,在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

CPOY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径,COPY . . 意思是将本机的当前目录拷贝到容器中的工作目录中。

ENTRYPOINT 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

将编译好的发布文件复制到安装好docker的机器上,进入该目录执行如下命令进行构建镜像:

sudo docker build -t tyframeapi .

-t镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

如需要了解更多参数,https://docs.docker.com/engine/reference/commandline/build/

现在可以通过如下命令查看镜像列表:

 

 

 使用构建好的镜像启动容器

sudo docker run  --name tyframeapi -v /etc/localtime:/etc/localtime:ro -d -p 5001:5001  tyframeapi

--name为容器指定一个名称

-v挂载一个卷,-v /etc/localtime:/etc/localtime:ro 挂载本机的/etc/localtime到容器内的/etc/localtime :ro readonly

-d后台运行容器,并返回容器ID

-p指定端口映射,格式为:主机(宿主)端口:容器端口

tyframeapi指定容器装载的镜像

如需要了解更多参数,https://docs.docker.com/engine/reference/commandline/run/

通过docker ps –a查看容器运行情况

 

 

 看到STATUS 为UP状态访问该服务器的5001端口,网站可以正常访问,docker的安装和部署就完整完成了,由于很少使用Linux并且公司其他人使用的也不多,所以就采用了Jenkins来做持续集成。

 

posted @ 2020-09-22 18:27  Yu2  阅读(915)  评论(0编辑  收藏  举报