打包应用和构建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: ...
随机推荐
- 基于swoole的聊天室模型
client.html: <!doctype html><html><head> <meta charset="utf-8"> &l ...
- bn两个参数的计算以及layer norm、instance norm、group norm
bn一般就在conv之后并且后面再接relu 1.如果输入feature map channel是6,bn的gamma beta个数是多少个? 6个. 2.bn的缺点: BN会受到batchsize大 ...
- python中numpy.sum()函数
讲解清晰,转载自:https://blog.csdn.net/rifengxxc/article/details/75008427 众所周知,sum不传参的时候,是所有元素的总和.这里就不说了. 1 ...
- Ubuntu安装后配置
配置源将所有源配置为华科(mirrors.hust.edu.cn)或者中科大源(mirrors.ustc.edu.cn)使用vi编辑,使用命令 :%s/ubuntu源地址.com/mirrors.hu ...
- jQuery----奇偶选择器和索引选择器
奇偶选择器: $( " #uu>li:odd").css( " backgroundColor "," red " ); 获取id为u ...
- Disruptor时序调用
接下来,我会对disruptor的设计和源码上进行讲解,先来一篇时序图,简单理解下disruptor的工作过程
- phpqrcode生成动态二维码简单实例
这是一个利用phpqrcode生成动态二维码简单实例,比微信官方提供的接口还要好用.二维码是动态的,不用生成图片,可自定义二维码大小,间隙,跳转地址等. 参数设置: include_once 'php ...
- TMS Xdata Server
Xdata 在TMS中扮演的桥的角色,一年前仔细看过TMS 的源码,当时对流程很清晰,随着时间慢慢的过去,现在该忘记的都忘记了.所以用此文章来记录自己对Xdata还剩下的一点点的记忆... 光有xda ...
- linux下pcf8563驱动时钟使用
环境: HelperA64开发板 Linux3.10内核 时间:2019.01.17 目标:PCF8563实时时钟驱动的使用 问题:因为pcf8563的驱动是linux内核自带的,网上也有很多分析的方 ...
- 函数的返回值是void
#include <stdio.h> void sub(int x,int y,int z){ z=y-x; } void main() { int a=1,b=2,c=3; sub(10 ...