Docker入门系列02
上篇用一个简单的示例,简单的介绍了 Dockerfile 的配置及其相关的命令。这一篇会在上篇的示例程序里,继续添加新代码及如何将单元测试也放入 Image 建立过程内。
首先,我们需要建一个新的类库,将业务相关的代码从原来的项目移到新类库里。创建类库的代码如下:
dotnet new classlib -o utils
dotnet restore utils/
dotnet sln add utils/utils.csproj
现在我们已经创建好了新的类库,那么现在coding……,我会在文章末尾放入项目地址。假设你十指如飞的敲好了代码。OK,虽然我们对自己的代码很自信,但为了体现我们对代码的负责的态度,还是需要写个单元测试的。OK,我们需要创建个单元测试项目,非常简单,代码如下:
dotnet new xunit -o test
现在coding单元测试用例,5分钟后代码写好了,现在本地运行下,命令如下:
dotnet test ./tests/
#以下是test运行结果
Build started, please wait...
Build completed.
Test run for /Users/gebilaowang/Development/dotnet-docker/dotnetapp/tests/bin/Debug/netcoreapp2.0/tests.dll(.NETCoreApp,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 15.5.0
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
[xUnit.net 00:00:00.7581900] Discovering: tests
[xUnit.net 00:00:00.8340440] Discovered: tests
[xUnit.net 00:00:00.8412310] Starting: tests
test text 1
test text 2
test text 3
test text.
[xUnit.net 00:00:01.0264220] Finished: tests
Total tests: 3. Passed: 3. Failed: 0. Skipped: 0.
Test Run Successful.
Test execution time: 1.8490 Seconds
到现阶段,单元测试相关的代码已经写好了,那么该进入主题了,修改 Dockerfile 内容如下:
FROM microsoft/dotnet:2.0-sdk AS build
# copy csproj and restore as distinct layer
WORKDIR /src
COPY *.sln .
COPY dotnetapp/*.csproj ./dotnetapp/
COPY tests/*.csproj ./tests/
COPY utils/*.csproj ./utils/
RUN dotnet restore
# copy and build everything else
COPY . .
RUN dotnet build
# create test
FROM build AS test
WORKDIR /src/tests
RUN dotnet test
# publish execution app
FROM build AS publish
WORKDIR /src/dotnetapp
RUN dotnet publish -c Release -o out
#
FROM microsoft/dotnet:2.0-runtime as runtime
WORKDIR /app
COPY --from=publish /src/dotnetapp/out ./
ENTRYPOINT [ "dotnet","dotnetapp.dll" ]
OK,现在可以创建新的 Image 了,键入 docker build -t dotnetapp:1.0-test .,这个过程相对第一次比较快,因为相关的基础镜像(BaseImage)之前已经下载到本地了。注意观察 Image 的过程,你会发现单元测试的输出结果。
OK,有关单元测试的内容已经介绍完了,是不是很简单。聪明的你,也许想到了是不是也可以将单元测试作为容器启动的入口程序,你可以自己动手试试。
Docker入门系列02的更多相关文章
- Docker入门系列(一):目标和安排
Docker入门系列(一) 这个系列的教程来源于docker的官方文档,此文档的目的在于一步一步学习docker的使用方法. 这一系列的教程有如下几篇文档: docker安装启动 构建第一个docke ...
- Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上
这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...
- Docker入门系列1:简介
可以实现快速部署. 比如一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要: 资源隔离: ...
- Docker入门系列3:使用
入门 首先强烈建议玩一遍官方的入门教程,Interactive commandline tutorial,下面是答案: 查看版本:docker version 搜索Image:docker searc ...
- Docker入门系列之五:15个 Docker 命令
在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...
- Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像
实现题目描述的这个需求有很多种办法,作为入门,让我们从最简单的办法开始. 首先使用命令docker ps确保当前没有正在运行的Docker实例. 运行命令docker run -it nginx: 然 ...
- Docker入门系列之一:在一个Docker容器里运行指定的web应用
实现题目描述的这个需求有很多种办法,作为入门,让我们从最简单的办法开始. 首先使用命令docker ps确保当前没有正在运行的Docker实例. 运行命令docker run -it nginx: 然 ...
- Docker入门系列2 安装
可以从 Docker 社区直接下载可用的模版或镜像. Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多. 其次,Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Do ...
- Docker入门系列之二:Docker术语
原文作者:Jeff Hale 原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-1c40ea269fa8 翻译: ...
随机推荐
- shell 脚本中后台执行命令 &
最近遇到一个问题, 执行脚本,脚本调用 一个命令,命令(deamon)是一个守护进程,为了调试,取消了守护进程模式.导致命令后边的其他命令(echo "456")都无法执行. de ...
- 一个较复杂的执行redis的lue脚本
- February 11 2017 Week 6 Saturday
Love means never having to say you're sorry. 爱就是永远不必说对不起. Yesterday I heard an interesting story fro ...
- mongodb常用基础命令
查看当前使用的数据库,也可以直接用dbdb.getName() 显示当前db状态db.stats() 当前db版本 db.version() 查看当前db的链接机器地址db.getMongo() 查看 ...
- 字符串拼接+和concat的区别
+和concat都可以用来拼接字符串,但在使用上有什么区别呢,先来看看这个例子. public static void main(String[] args) { // example1 String ...
- (二)给Centos配置网络以及使用xshell远程连接Centos
好吧,我对网络协议以及ip配置知识的匮乏,让我在这里折腾了将近一天才搞定.可以说基本上网上遇到的问题我都遇到了.在这里,记下正确的步骤来给Centos配置网络.希望以后少走弯路. 首先我要说明的是,我 ...
- spring的声明式的事物管理和编程事务管理的区别
一.Spring对编程式事务的支持 Spring中的事务分为物理事务和逻辑事务: 物理事务:就是底层数据库提供的事务支持,如JDBC或JTA提供的事务: 逻辑事务:是Spring管理的事务,不同于物理 ...
- hdu 3068 最长回文_Manacher模板
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/neng18/article/details/24269469 pid=3068" rel= ...
- ASP.NET Web API编程——版本控制
版本控制 版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通过VersionController ...
- mybatics之trim
1.<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=&quo ...