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 翻译: ...
随机推荐
- 取多个name值相同的input里面的值
html 中是允许多个具有相同name属性的元素的,例如服务器端读取的常规做法是: string name = Request.Params["txtName"]; 得到的将是一串 ...
- Timer类注意事项
Java的一个Timer对象可以执行多个Timertask任务,但是一个Timer对象本身只有一个线程,如果向他提交多个task,并且某个task相当耗时的话,其他的task即使到了执行时间,仍然会等 ...
- ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)
adb是什么? adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...
- 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中“不规矩”的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧,调整一下思维便能重用 ...
- apache log4j-1.2.15的使用
1.这个log4j的下载 下载 http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.15/apache-log4j-1.2.15.zip 2. ...
- 阶&原根
求阶的方法: 根据性质2,直接对ϕ(m)求出因子即可,从小到大依次判断是不是符合ad = 1(mod m)(d是ϕ(m)的因子) 求最小的原根的方法: 根据性质8,对ϕ(m)求出素因子,从1开始不断测 ...
- 编程三基:cpu:算法,总线(io):一切皆文件;内存:运行空间
编程三基:cpu:算法,总线:一切皆文件:内存:数据.运行空间 原文找不到了.
- PHP使用in_array函数检查数组中是否存在某个值
PHP使用 in_array() 函数检查数组中是否存在某个值,如果存在则返回 TRUE ,否则返回 FALSE. bool in_array( mixed needle, array array [ ...
- 关于SQL注入中编码问题的疑问
提到SQL注入的绕过,编码是其中最普通的一种方法,最常用的URL编码.之前一直有个疑问,编码与未编码到底有哪些地方存在区别? 以下是本人自己对URL编码的一些见解,可能有错误的地方欢迎大佬们指正. 什 ...
- scp出现ssh port 22: Connection refused 问题解决具体步骤
[root(0)@sys11 09:20:29 /home/work/Code_release/bj]# scp ./release.sh root@192.168.161.151:/Users/a ...