300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 打包应用和构建Docker镜像(docker在windows上)

打包应用和构建Docker镜像(docker在windows上)

时间:2018-08-10 19:21:59

相关推荐

打包应用和构建Docker镜像(docker在windows上)

在构建Docker时编译应用

一般有两种方法在构建镜像时进行打包应用。第一种方法就是使用基本的镜像,该镜像包括应用平台和构建工具,因此在Dockerfile中,复制源代码到镜像中并在构建镜像时编译app.

1. 案例1:

(1)Dockerfile内容如下

PS E:\DockeronWindows\> cat .\Dockerfile

FROM microsoft/dotnet:1.1-sdk-nanoserver

WORKDIR /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.68kB

Step 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\Core.csproj...

Generating MSBuild file C:\src\obj\Core.csproj.nuget.g.props.

Generating MSBuild file C:\src\obj\Core.csproj.nuget.g.targets.

Restore completed in 10.8 sec for C:\src\Core.csproj.

Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core

Copyright (C) Microsoft Corporation. All rights reserved.

Core -> C:\src\bin\Debug\netcoreapp1.1\Core.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-nanoserver

WORKDIR /dotnetapp

COPY ./src/bin/Debug/netcoreapp1.1/publish .

CMD ["dotnet", "Core.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 builder

WORKDIR /src

COPY src/ .

RUN dotnet restore; dotnet publish

# final image stage

FROM microsoft/dotnet:1.1-runtime-nanoserver

WORKDIR /dotnetapp

COPY --from=builder /src/bin/Debug/netcoreapp1.1/publish .

CMD ["dotnet", "Core.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 '{{ .works.nat.IPAddress }}' 3472

172.26.204.5

(5)可以通过本机的浏览器进行访问

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。