zoukankan      html  css  js  c++  java
  • 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来做持续集成。

  • 相关阅读:
    Azure IoT 技术研究系列4-Azure IoT Hub的配额及缩放级别
    Azure IoT 技术研究系列3-设备到云、云到设备通信
    Azure IoT 技术研究系列2-设备注册到Azure IoT Hub
    Azure IoT 技术研究系列1-入门篇
    消息队列技术之基本概念
    PAT甲级题分类汇编——线性
    AVR单片机教程——闪烁LED
    AVR单片机教程——点亮第一个LED
    AVR单片机教程——开发环境配置
    AVR单片机教程——开发板介绍
  • 原文地址:https://www.cnblogs.com/Yuuuuu/p/13714021.html
Copyright © 2011-2022 走看看