Edition 0 Updated to asp. Net core 0



Yüklə 11,82 Mb.
Pdf görüntüsü
səhifə78/288
tarix12.07.2023
ölçüsü11,82 Mb.
#136458
1   ...   74   75   76   77   78   79   80   81   ...   288
NET-Microservices-Architecture-for-Containerized-NET-Applications

/app


Line #27:
Copy the 
/app
directory from stage 
publish
to the current directory. 

Line #28:
Define the command to run when the container is started. 
Now let’s explore some optimizations to improve the whole process performance that, in the case of 
eShopOnContainers, means about 22 minutes or more to build the complete solution in Linux 
containers. 
You’ll take advantage of Docker’s layer cache feature, which is quite simple: if the base image and the 
commands are the same as some previously executed, it can just use the resulting layer without the 
need to execute the commands, thus saving some time. 
So, let’s focus on the 
build
stage, lines 5-6 are mostly the same, but lines 7-17 are different for every 
service from eShopOnContainers, so they have to execute every single time, however if you changed 
lines 7-16 to: 
COPY
. . 
Then it would be just the same for every service, it would copy the whole solution and would create a 
larger layer but: 
1.
The copy process would only be executed the first time (and when rebuilding if a file is changed) 
and would use the cache for all other services and 
2.
Since the la
rger image occurs in an intermediate stage, it doesn’t affect the final image size.
The next significant optimization involves the 
restore
command executed in line 17, which is also 
different for every service of eShopOnContainers. If you change that line to just: 


82 
CHAPTER 4 | Development process for Docker-based applications 
RUN
dotnet restore 
It would restore the packages for the whole solution, but then again, it would do it just once, instead 
of the 15 times with the current strategy. 
However, 
dotnet restore
only runs if there’s a single project or solution file in the folder, so 
achieving this is a bit more complicated and the way to solve it, without getting into too many details, 
is this: 
1.
Add the following lines to 
.dockerignore


*.sln
, to ignore all solution files in the main folder tree 

!eShopOnContainers-ServicesAndWebApps.sln
, to include only this solution file. 
2.
Include the 
/ignoreprojectextensions:.dcproj
argument to 
dotnet restore
, so it also 
ignores the docker-compose project and only restores the packages for the 
eShopOnContainers-ServicesAndWebApps solution. 
For the final optimization, it just happens that line 20 is redundant, as line 23 also builds the 
application and comes, in essence, right after line 20, so there goes another time-consuming 
command. 
The resulting file is then: 
1

Yüklə 11,82 Mb.

Dostları ilə paylaş:
1   ...   74   75   76   77   78   79   80   81   ...   288




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin