打包应用和构建Docker镜像(docker在windows上)
在构建Docker时编译应用
一般有两种方法在构建镜像时进行打包应用。第一种方法就是使用基本的镜像,该镜像包括应用平台和构建工具,因此在Dockerfile中,复制源代码到镜像中并在构建镜像时编译app.
1. 案例1:
(1)Dockerfile内容如下
PS E:\DockeronWindows\> cat .\Dockerfile
FROM microsoft/dotnet:1.1-sdk-nanoserverWORKDIR /src
COPY src/ .RUN dotnet restore; dotnet build
CMD ["dotnet", "run"]
(2)进行构建
PS E:\DockeronWindows\Chapter02\ch02-dotnet-helloworld> docker image build --tag dockeronwindows/ch02-dotnet-helloworld .
Sending build context to Docker daemon 7.68kBStep 1/5 : FROM microsoft/dotnet:1.1-sdk-nanoserver
1.1-sdk-nanoserver: Pulling from microsoft/dotnet
bce2fbc256ea: Already exists
58518d668160: Pulling fs layer
fc38482307fa: Pulling fs layer
576bbc86ac65: Pulling fs layer
7ad73ad8deab: Pulling fs layer
ab1b680e44fb: Pulling fs layer
5f89579d77cc: Pulling fs layer
39f2f6871254: Pulling fs layer
19e7bac74ddd: Pulling fs layer
ab1b680e44fb: Waiting
5f89579d77cc: Waiting
39f2f6871254: Waiting
19e7bac74ddd: Waiting
7ad73ad8deab: Waiting
576bbc86ac65: Verifying Checksum
576bbc86ac65: Download complete
fc38482307fa: Verifying Checksum
fc38482307fa: Download complete
7ad73ad8deab: Verifying Checksum
7ad73ad8deab: Download complete
58518d668160: Verifying Checksum
58518d668160: Download complete
5f89579d77cc: Download complete
39f2f6871254: Download complete
58518d668160: Pull complete
fc38482307fa: Pull complete
576bbc86ac65: Pull complete
7ad73ad8deab: Pull complete
ab1b680e44fb: Verifying Checksum
ab1b680e44fb: Download complete
ab1b680e44fb: Pull complete
5f89579d77cc: Pull complete
39f2f6871254: Pull complete
19e7bac74ddd: Verifying Checksum
19e7bac74ddd: Download complete
19e7bac74ddd: Pull complete
Digest: sha256:784d5f6ceef9a22d0ae224ea0e81869d2ef1348fa6611f6390da992b0661adc0
Status: Downloaded newer image for microsoft/dotnet:1.1-sdk-nanoserver
---> cade360c069b
Step 2/5 : WORKDIR /src
Removing intermediate container 581b35c929dc
---> df0351fc439b
Step 3/5 : COPY src/ .
---> 1769be54acaa
Step 4/5 : RUN dotnet restore; dotnet build
---> Running in 97b2eb76f163
Restoring packages for C:\src\HelloWorld.NetCore.csproj...
Generating MSBuild file C:\src\obj\HelloWorld.NetCore.csproj.nuget.g.props.
Generating MSBuild file C:\src\obj\HelloWorld.NetCore.csproj.nuget.g.targets.
Restore completed in 10.8 sec for C:\src\HelloWorld.NetCore.csproj.
Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.HelloWorld.NetCore -> C:\src\bin\Debug\netcoreapp1.1\HelloWorld.NetCore.dll
Build succeeded.
0 Warning(s)
0 Error(s)Time Elapsed 00:00:02.63
Removing intermediate container 97b2eb76f163
---> 48609d781e5b
Step 5/5 : CMD ["dotnet", "run"]
---> Running in 8906b368d1ed
Removing intermediate container 8906b368d1ed
---> f061c5025519
Successfully built f061c5025519
Successfully tagged dockeronwindows/ch02-dotnet-helloworld:latest
2. 第二种方法就是在构建镜像之前进行编译文件。
(1)Dockerfile文件内容如下
PS E:\DockeronWindows\Chapter02\ch02-dotnet-helloworld> cat .\Dockerfile.slim
FROM microsoft/dotnet:1.1-runtime-nanoserverWORKDIR /dotnetapp
COPY ./src/bin/Debug/netcoreapp1.1/publish .CMD ["dotnet", "HelloWorld.NetCore.dll"]
(2)简单的编译应用和构建Docker镜像看起来如下:
dotnet restore src; dotnet publish src
docker image build --file Dockerfile.slim --tag dockeronwindows/ch02-dotnet-helloworld:slim .
编译截图:
构建镜像截图:

(3)可以看到,在编译前和编译后进行构建镜像,两个容器之间的大小差异,主要是在构建镜像时进行编译,容器需要安装构建工具。

3. 多阶段的构建和编译
(1)Dockerfile.multistage文件内容如下
PS E:\DockeronWindows\Chapter02\ch02-dotnet-helloworld> cat .\Dockerfile.multistage
# build stage
FROM microsoft/dotnet:1.1-sdk-nanoserver AS builderWORKDIR /src
COPY src/ .RUN dotnet restore; dotnet publish
# final image stage
FROM microsoft/dotnet:1.1-runtime-nanoserverWORKDIR /dotnetapp
COPY --from=builder /src/bin/Debug/netcoreapp1.1/publish .CMD ["dotnet", "HelloWorld.NetCore.dll"]
(2)第(1)步主要是把1,2阶段进行合并了,先执行编译,然后运行第2个容器执行。
4. Dockerfile指令
(1)构建镜像 ,Dockerfile内容如下
PS E:\DockeronWindows\Chapter02\ch02-static-website> cat .\Dockerfile
# escape=`
FROM microsoft/iis
SHELL ["powershell"]ARG ENV_NAME=DEV
EXPOSE 80
COPY template.html C:\template.html
RUN (Get-Content -Raw -Path C:\template.html) `
-replace '{hostname}', [Environment]::MachineName `
-replace '{environment}', [Environment]::GetEnvironmentVariable('ENV_NAME') `
| Set-Content -Path C:\inetpub\wwwroot\index.html
(2)进行构建
docker image build --build-arg ENV_NAME=TEST --tag dockeronwindows/ch02-static-website .
(3)运行容器
> docker container run --detach --publish 80 dockeronwindows/ch02-static-website
3472a4f0efdb7f4215d49c44dcbfc81eae0426c1fc56ad75be86f63a5abf9b0e
(4)检查容器的IP地址
> docker container inspect --format '{{ .NetworkSettings.Networks.nat.IPAddress }}' 3472
172.26.204.5
(5)可以通过本机的浏览器进行访问

打包应用和构建Docker镜像(docker在windows上)的更多相关文章
- 添加ssh服务构建新镜像-docker commit 方式01
添加ssh服务构建新镜像-docker commit 方式 1:docker commit构建自定义镜像---一般不推荐使用这种方式构建新镜像 1:ubuntu基础镜像下载 ubuntu@ubuntu ...
- Docker构建YApi镜像, Docker安装YApi, Docker部署YApi
概述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验,开发 ...
- 创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作
实例解析Docker如何通过commit,Dockerfile两种方式自定义Dcoker镜像,对自定义镜像的pull,push,rmi等常用操作,通过实例创建一个Python数据分析开发环境的Dock ...
- 通过重新上传修改后的docker镜像来在kubeapps上实现k8s上部署的nginx版本更新,回退等
docker操作:制作自定义镜像 # docker下载官方nginx镜像 docker pull nginx # 基于该镜像运行一个容器 docker run -it -d --name nginx_ ...
- Linux 含有ext 分区的镜像无法再Windows上拷贝的解决办法
首先,参考http://www.cnblogs.com/chenfulin5/p/6649801.html 通过上面这个链接,做一个镜像出来. // 1. 制作一个镜像文件,里面包含200M左右的空间 ...
- 多阶段构建Golang程序Docker镜像
Docker简介 Docker是基于Linux容器技术(LXC),使用Go语言实现的开源项目,诞生于2013年,遵循Apache2.0协议.Docker自开源后,受到广泛的关注和讨论. Docker在 ...
- Docker:镜像构建与进入容器总结
构建镜像总结 docker构建镜像有两种方法: 1.使用docker commit + 容器 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] ...
- 在sun jdk 8镜像基础上构建maven 3的docker镜像
2019独角兽企业重金招聘Python工程师标准>>> 在https://my.oschina.net/ytqvip/blog/1595054文章的sun jdk 8镜像基础上构建m ...
- Docker镜像、容器剖析
我们通常所说的docker是什么? 在这里英文本意为“搬运工”这里指的的docker搬运点的是集装箱,集装箱装的是够任意类型的APP,开发者通过Docker可以将app变成一种标准化,可移植的.自管理 ...
- docker镜像管理(二)
docker镜像 docker镜像含有启动容器所需要的文件系统和内容,因此,其用于创建并启动docker容器 docker镜像采用分层构建机制,最底层为bootfs,其之为rootfs bootfs: ...
随机推荐
- Day6 jQuery
元素的操作 dom对象和jQuery对象 dom对象:原生js获取节点 jQuery对象:通过jQuery获取节点对象 //dom对象 var oP = document.getElementById ...
- http协议cookie结构分析
Http协议中Cookie详细介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失 ...
- 404 Note Found 队-Beta2
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- Nginx与浏览器缓存
Nginx与浏览器缓存 一.浏览器对缓存的处理:Internet选项 ★ 控制请求服务器策略:是忽略资源的缓存策略的情况下额外强制请求服务器的意思. ★ 检查存储的页面较新版本 1.每次访问网页时 ...
- python-greenlet模块(协程)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from greenlet import greenlet def test1(): print(12) ...
- OpenGL 球体世界
一.类似公自转 二.核心代码 //图形渲染 void RenderScene() { //清楚缓存区:颜色缓存区.深度缓存区.模版缓存区 glClear(GL_COLOR_BUFFER_BIT|GL_ ...
- jQuery 学习笔记:jQuery 代码结构
jQuery 学习笔记:jQuery 代码结构 这是我学习 jQuery 过程中整理的笔记,这一部分主要包括 jQuery 的代码最外层的结构,写出来整理自己的学习成果,有错误欢迎指出. jQuery ...
- 通过脚手架创建Vue项目
第一步 准备工作 1.下载安装Node.js 验证是否安装的方法,在命令行输入node -v 2.安装Vue 在命令行输入npm install -g @vue/cli 查看Vue版本号 npm vu ...
- Hive--可执行SQL的Hadoop数据仓库管理工具
Hive是一个基于HDFS的数据仓库软件,可理解为数据库管理工具:Hive的功能主要有: 1. 支持使用SQL对分布式存储的大型数据集进行读.写.管理,将SQL转化成MapReduce任务执行: 2. ...
- A1084
输入:只能输入A-Z(不区分大小写),0-9和下划线: 第一行输入应输入字符串,第二行输入实际输入字符串. 输出:按大写输出缺少的字符,每个字符输出一次. 注意: 1.由于不区分大小写,则需要将小写字 ...