• 使用Docker部署.Net Core项目


    Docker理论基础

    Docker工作需要容器和镜像,它们是docker的基石

    什么是容器

    什么是镜像

    • 镜像是一个模板,是运行一个应用程序所需的文件

    • 容器是由镜像所创建的,用以隔离不同的镜像中的应用程序,这样应用于应用之间就不会相互干扰

    常用docker命令

    • docker image ls / docker images:查询所有的镜像
    • docker pull:从Docker Hub中下载镜像
      • docker rmi:删除镜像
        • 删除所有镜像:docker rmi -f $(docker images -q)
    • docker build:创建自定义镜像
    • docker run:创建并允许一个容器
    • docker create:创建容器
    • docker ps:查询所有容器
    • docker start:启动镜像
    • docker stop:停止镜像
    • docker logs:查询容器的运行日志记录
    • docker cp:将文件复制到容器中
    • docker diff:查看容器文件的变化
    • docker exec:在容器中运行命令
    • docker tag:为镜像分配标记(命名)
    • docker login/logout:从镜像仓库中登陆或注销
    • docker commit:将修改的容器创建为镜像
    • docker push:将镜像发布到仓库中
    • docker inspect:查看容器的详细配置

    编写Dockerfile创建自定义容器

    dockerfile只需要简单理解为描述docker镜像规则的描述文件

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1
    COPY dist /app
    WORKDIR /app
    #指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
    EXPOSE 80/tcp
    ENTRYPOINT ["dotnet", "ExampleApp.dll"]
    

    1. 打包asp.net core项目

    2. 将包压缩并发送到linux服务器中,并解压

    3. 压缩后文件如下:

    4. 执行创建自定义容器命令docker build [打包文件的路径] [-t 指定生成容器的名称] [-f 指定要执行的dockerfile名称]
      ps:在docker里面镜像的名称不能有大写,只能用小写

    容器创建

    上面我们进行了镜像的创建,下面学习容器的创建

    1. 创建容器docker create -p 外部端口:容器内部端口 -name 容器名 所要创建的容器(镜像名)

      Ps:注意 这里有两个坑 :
      一、部署asp.net core项目时,我们kestrel默认监听的是5000端口,并且只对允许使用localhost访问(即只有本机能访问),我们可以在program中如图中设置,外部计算机才能正常访问:
      二、在项目部署到docker中时,在dockerfile中我们虽然声明监听的端口是80,但是我们kestrel监听的确是5000端口,此时,我们在宿主机映射端口时候,应该以kestrel监听的端口为准,否则将无法成功访问网页

    2. 启动容器 docker start 容器名

    3. 创建容器并运行 docker run [-d(表示后台运行)] [-p 宿主机端口:容器服务端口] [--rm(表示容器stop时,自动删除容器)] --nmae 容器名 镜像名

    4. 停止容器运行 docker stop 容器名docker kill 容器名(建议少用)

    5. 查看容器运行日志 docker logs [-f(表示实时查看日志)] 容器名称

    操作正在运行容器

    1. 复制文件到容器内部之中 docker cp [宿主机文件绝对路径] [容器名]:[容器内部所复制到的路径]

    2. 查看容器文件夹变更docker diff [容器名]
      A表示:一个文件或文件夹被添加到容器中
      C表示:这个文件夹或文件夹已经被修改了
      D表示:这个文件或者文件下已经从容器中删除

    3. 对容器内部操作docker exec [容器名] [所要执行的命令]
      ps:执行exec命令是docker容器在运行的状态

      进入容器内部操作docker exec [-it交互式命令 i表示当前终端进入容器内部 t会显示当前用户和所在路径等信息] [容器名] [指定使用的shell如:/bin/bash]

    4. 将运行中的容器保存为本地镜像docker commit [容器名] [镜像名:标签]

    将docker镜像打包到DockerHub仓库

    1. 首先要在DockerHub上注册账号,如我注册了一个账号名为jochen1109的账号

    2. 重要:镜像的名字必须为账号名/自定义容器名的组合,我们可以使用docker tag [原镜像名:标签] [新镜像名:标签]来复制一个新的镜像的名称和tag

    3. 通过命令行控制台登录dockerhub: docker login [-u 用户名]
      (提示输入密码,校验成功即可登录)

    4. 推送本地镜像到dockerHub(与git十分相似) docker push [镜像名]

      ps:每次推送,docker仓库都会去检查你当前推送的项目在已上传的内容中是否有重复项,如有则直接引用,而不是说覆盖或者创建,以此来节约空间和减少网络传输,使得我们使用效益最大化
      此时仓库中可以看到:

    5. 拉取镜像docker pull 仓库镜像名

  • 相关阅读:
    Atitti. 语法树AST、后缀表达式、DAG、三地址代码
    Atitit.antlr实现词法分析
    Atitit.antlr实现词法分析
    Atitit.词法分析的理论原理 part2
    Atitit.词法分析的理论原理 part2
    atitit.词法分析原理 词法分析器 (Lexer)
    atitit.词法分析原理 词法分析器 (Lexer)
    Atitti.数据操作crud js sdk dataServiceV3设计说明
    Atitti.数据操作crud js sdk dataServiceV3设计说明
    Atitit.http代理的实现 代码java php c# python
  • 原文地址:https://www.cnblogs.com/deehuang/p/14165971.html
Copyright © 2020-2023  润新知