Docker一个优秀的应用容器

南荣相如谈编程 2021-01-23 01:25:13
docker 容器 一个 应用 优秀


1 什么是Docker?

Docker是一个用于开发,发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

2 为什么需要Docker?

2.1 解决环境配置麻烦

一般我们写程序,会有开发环境,测试环境,生产环境,很多bug都是环境问题。

过去部署的思路,在开发环境打包,想跑到Window环境下运行。我们得先在Window下载好.NET Framework,IIS等,配置好对应的环境变量,将包丢到iis的webapps文件夹下,才能跑起来。

现在Docker的思路,可以将我们的想要的环境构建成一个镜像,然后我们可以推送到网上去。想要用这个环境的时候,在网上拉取一份就好了。

2.2 解决应用之间隔离

大家一定遇到过在多个应用部署在同一台服务器上,有一个应用出现了问题,导致CPU占100%,其他应用也都受到影响。还有就是比如有些应用用NET技术,有些应用用Php技术,这些不同应用各种的依赖软件都安装在同一个服务器上,可能就会造成各种冲突/无法兼容。

2.3 Docker与虚拟机

image

对于虚拟机,主机服务器从下至上有三个基础层:基础架构,主机操作系统和虚拟机监控程序,最重要的是每个虚拟机都有自己的操作系统和所有必要的库。对于Docker,主机服务器仅具有基础结构和操作系统,最重要的是容器引擎,该容器引擎使容器保持隔离状态,但共享基本的OS服务。

因为容器需要的资源要少得多(例如,它们不需要完整的操作系统),所以它们易于部署并且启动迅速。这样可以提高密度,这意味着可以在同一硬件单元上运行更多服务,从而降低成本。

作为在同一内核上运行的副作用,与VM相比,您获得的隔离更少。

3 如何使用Docker?

首先,安装Docker ,参考官方文档。

然后,创建Docker.WebApi01项目

确保已选择“启用 Docker 支持”复选框,选择所需的容器类型(Windows 或 Linux)。

image

接着,我们打开Dockerfile文件, 请参阅Dockerfile引用,了解其中的命令:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["Docker.WebApi01/Docker.WebApi01.csproj", "Docker.WebApi01/"]
RUN dotnet restore "Docker.WebApi01/Docker.WebApi01.csproj"
COPY . .
WORKDIR "/src/Docker.WebApi01"
RUN dotnet build "Docker.WebApi01.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Docker.WebApi01.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Docker.WebApi01.dll"]

上面代码含义说明:

  • FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base:指定基础镜像文件mcr.microsoft.com/dotnet/aspnet,标记为5.0-buster-slim,别名为base。
  • WORKDIR /app:设置工作目录为/app
  • EXPOSE 80:将容器 80 端口暴露出来, 允许外部连接这个端口。
  • COPY ["Docker.WebApi01/Docker.WebApi01.csproj", "Docker.WebApi01/"]:将 Docker.WebApi01/Docker.WebApi01.csproj 复制到 Docker.WebApi01/目录下。
  • RUN dotnet restore "Docker.WebApi01/Docker.WebApi01.csproj":恢复 Docker.WebApi01.csproj 项目的依赖项和工具。
  • RUN dotnet build "Docker.WebApi01.csproj" -c Release -o /app/build:生成 Docker.WebApi01.csproj 项目及其所有依赖项。
  • RUN dotnet publish "Docker.WebApi01.csproj" -c Release -o /app/publish:将应用程序及其依赖项发布到文件夹以部署到托管系统。

接着,调试

在工具栏的调试下拉列表中选择“Docker”,然后开始调试应用。 你可能会看到提示信任证书的消息;选择信任证书以继续。

“输出” 窗口中的“容器工具” 选项显示正在进行的操作。 第一次时,可能需要一些时间来下载基本映像,但在后续运行时速度要快得多。

最后,构建及运行

docker build -t dockerwebapi01 -f ./Docker.WebApi01/Dockerfile .
docker run --rm -it -p 49181:443 dockerwebapi01

注意这里有一个坑直接在Dockerfile目录下执行会报以下错误:

=> ERROR [build 3/7] COPY [Docker.WebApi01/Docker.WebApi01.csproj, Docker.WebApi01/]

遇到这个问题有两个解决方案,其一是把Dockerfile文件放到sln同一个目录下,然后执行docker build,另一个是本文采用的方法,在sln目录下执行,需要指定Dockerfile路径

我们在浏览器上输入: https://localhost:49181/WeatherForecast 看看效果

版权声明
本文为[南荣相如谈编程]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/zcqiand/p/14315406.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云