เชตเชฟเชจเซเชกเซ‹เช เช‡เชฎเซ‡เชœ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‹เช•เชฐ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

เช•เซ‡เชฎ เช›เซ‹ เชฌเชงเชพ! เชฎเชพเชฐเซเช‚ เชจเชพเชฎ เชเชจเซเชกเซเชฐเซ€ เช›เซ‡, เช…เชจเซ‡ เชนเซเช‚ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชŸเซ€เชฎเชฎเชพเช‚ Exness เช–เชพเชคเซ‡ DevOps เชเชจเซเชœเชฟเชจเชฟเชฏเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเซเช‚ เช›เซเช‚. เชฎเชพเชฐเซ€ เชฎเซเช–เซเชฏ เชชเซเชฐเชตเซƒเชคเซเชคเชฟ Linux เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎ (เชคเซเชฏเชพเชฐเชฌเชพเชฆ OS เชคเชฐเซ€เช•เซ‡ เช“เชณเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡) เชนเซ‡เช เชณ เชกเซ‹เช•เชฐเชฎเชพเช‚ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ, เชœเชฎเชพเชตเชตเชพ เช…เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเชตเชพ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡. เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเชฎเชพเชจ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเช“ เชธเชพเชฅเซ‡เชจเซเช‚ เช•เชพเชฐเซเชฏ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชฒเช•เซเชทเซเชฏ OS เชตเชฟเชจเซเชกเซ‹เช เชธเชฐเซเชตเชฐ เช…เชจเซ‡ C++ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชจเซ‹ เชธเชฎเซ‚เชน เชนเชคเซ‹. เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡, เชตเชฟเชจเซเชกเซ‹เช เช“เชเชธ เชนเซ‡เช เชณ เชกเซ‹เช•เชฐ เช•เชจเซเชŸเซ‡เชจเชฐ เชธเชพเชฅเซ‡ เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, C++ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชธเชพเชฅเซ‡ เช† เชชเซเชฐเชฅเชฎ เชจเชœเซ€เช•เชจเซ€ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชนเชคเซ€. เช†เชจเซ‹ เช†เชญเชพเชฐ, เชฎเชจเซ‡ เชเช• เชฐเชธเชชเซเชฐเชฆ เช…เชจเซเชญเชต เชฎเชณเซเชฏเซ‹ เช…เชจเซ‡ Windows เชฎเชพเช‚ เช•เชจเซเชŸเซ‡เชจเชฐเชพเช‡เชเชฟเช‚เช— เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชœเชŸเชฟเชฒเชคเชพเช“ เชตเชฟเชถเซ‡ เชถเซ€เช–เซเชฏเชพ.

เชตเชฟเชจเซเชกเซ‹เช เช‡เชฎเซ‡เชœ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‹เช•เชฐ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹

เช† เชฒเซ‡เช–เชฎเชพเช‚ เชนเซเช‚ เชคเชฎเชจเซ‡ เชœเชฃเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชฎเชจเซ‡ เช•เชˆ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹ เชนเชคเซ‹ เช…เชจเซ‡ เชนเซเช‚ เชคเซ‡เชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชซเชณ เชฅเชฏเซ‹. เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เช† เชคเชฎเชพเชฐเชพ เชตเชฐเซเชคเชฎเชพเชจ เช…เชจเซ‡ เชญเชตเชฟเชทเซเชฏเชจเชพ เชชเชกเช•เชพเชฐเซ‹ เชฎเชพเชŸเซ‡ เชฎเชฆเชฆเชฐเซ‚เชช เชฅเชถเซ‡. เชตเชพเช‚เชšเชจเชจเซ‹ เช†เชจเช‚เชฆ เชฎเชพเชฃเซ‹!

เชถเชพ เชฎเชพเชŸเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ?

เช•เช‚เชชเชจเซ€ เชชเชพเชธเซ‡ เชนเชพเชถเชฟเช•เซ‹เชฐเซเชช เชจเซ‹เชฎเชพเชก เช•เชจเซเชŸเซ‡เชจเชฐ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชŸเชฐ เช…เชจเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช˜เชŸเช•เซ‹ - เช•เซ‹เชจเซเชธเซเชฏเซเชฒ เช…เชจเซ‡ เชตเซ‰เชฒเซเชŸ เชฎเชพเชŸเซ‡ เชนเชพเชฒเชจเซเช‚ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เช›เซ‡. เชคเซ‡เชฅเซ€, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เชจเซเชŸเซ‡เชจเชฐเชพเช‡เชเซ‡เชถเชจเชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เช‰เช•เซ‡เชฒ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชเช•เซ€เช•เซƒเชค เชชเชฆเซเชงเชคเชฟ เชคเชฐเซ€เช•เซ‡ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€. เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชฎเชพเช‚ เชตเชฟเชจเซเชกเซ‹เช เชธเชฐเซเชตเชฐ เช•เซ‹เชฐ เช“เชเชธ เชตเชฐเซเชเชจ 1803 เช…เชจเซ‡ 1809 เชธเชพเชฅเซ‡ เชกเซ‹เช•เชฐ เชนเซ‹เชธเซเชŸเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชคเซ‹ เชนเซ‹เชตเชพเชฅเซ€, 1803 เช…เชจเซ‡ 1809 เชฎเชพเชŸเซ‡ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเซ€เชธเชจเชพ เช…เชฒเช— เชตเชฐเซเชเชจ เชฌเชจเชพเชตเชตเชพ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชตเชฐเซเชเชจ 1803เชฎเชพเช‚, เช เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เช…เช—เชคเซเชฏเชจเซเช‚ เช›เซ‡ เช•เซ‡ เชฌเชฟเชฒเซเชก เชกเซ‹เช•เชฐ เชนเซ‹เชธเซเชŸเชจเซ‹ เชฐเชฟเชตเชฟเชเชจ เชจเช‚เชฌเชฐ เชฌเซ‡เช เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเชจเชพ เชฐเซ€เชตเซ€เชเชจ เชจเช‚เชฌเชฐ เช…เชจเซ‡ เชนเซ‹เชธเซเชŸ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชคเซ‹ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช เชœเซเชฏเชพเช‚ เช† เชˆเชฎเซ‡เชœเชฎเชพเช‚เชฅเซ€ เช•เชจเซเชŸเซ‡เชจเชฐ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชธเช‚เชธเซเช•เชฐเชฃ 1809 เชฎเชพเช‚ เช†เชตเซ€ เช•เซ‹เชˆ เช–เชพเชฎเซ€ เชจเชฅเซ€. เชคเชฎเซ‡ เชตเชงเซ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชนเซ€เช‚.

เชถเชพ เชฎเชพเชŸเซ‡ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœ?

เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชŸเซ€เชฎเชจเชพ เชเชจเซเชœเชฟเชจเชฟเชฏเชฐเซ‹ เชชเชพเชธเซ‡ เชนเซ‹เชธเซเชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เช…เชฅเชตเชพ เช–เซ‚เชฌ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเช•เซเชธเซ‡เชธ เชจเชฅเซ€; เช† เชฏเชœเชฎเชพเชจเซ‹ เชชเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชŸเช•เซ‹เชจเชพ เชธเซ‡เชŸเชจเซ‡ เชเชกเชชเชฅเซ€ เชฎเซ‡เชจเซ‡เชœ เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชฐเซ€เชค เชจเชฅเซ€, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชตเชฟเชเซเชฏเซเช…เชฒ เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชฎเชพเชŸเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เชŸเซ‚เชฒเชธเซ‡เชŸ เช…เชฅเชตเชพ เชตเชฐเซเช•เชฒเซ‹เชก เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹. เชคเซ‡เชฅเซ€, เช…เชฎเซ‡ เชฌเชฟเชฒเซเชก เชกเซ‹เช•เชฐ เช‡เชฎเซ‡เชœเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชคเชฎเชพเชฎ เช˜เชŸเช•เซ‹เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ‹ เชจเชฟเชฐเซเชฃเชฏ เชฒเซ€เชงเซ‹ เช›เซ‡. เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชเชกเชชเชฅเซ€ เชฎเชพเชคเซเชฐ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ เชฌเชฆเชฒเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช† เช›เชฌเซ€ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชธเชฟเชฆเซเชงเชพเช‚เชคเชฅเซ€ เช•เซเชฐเชฟเชฏเชพ เชธเซเชงเซ€

เช†เชฆเชฐเซเชถ เชกเซ‹เช•เชฐ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœ เช‡เชฎเซ‡เชœ เชฌเชฟเชฒเซเชกเชฎเชพเช‚, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชตเชพเชคเชพเชตเชฐเชฃ เช เชœ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชฎเชพเช‚ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เชฐเซ€เชคเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเซ‹เชคเซ‡ เชœ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡. เชชเชฐเช‚เชคเซ เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชฒเชฟเช‚เช• เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เชเชŸเชฒเซ‡ เช•เซ‡, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซ เชธเชพเชฅเซ‡ เชกเซ‹เช•เชฐ เช›เชฌเซ€ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชชเช—เชฒเซเช‚. เช† เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ เช•เชพเชฐเชฃ เช•เซ‡ เชนเซเช‚ เชคเชฎเชพเชฎ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเชพ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชธเชฎเชฏเชจเซ‡ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‹เช•เชฐ เช•เซ‡เชถ เชธเซเชตเชฟเชงเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹.

เชšเชพเชฒเซ‹ เช† เชˆเชฎเซ‡เชœ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‹เช•เชฐเชซเชพเชˆเชฒ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเชพ เชฎเซเช–เซเชฏ เชฎเซเชฆเซเชฆเชพเช“ เชœเซ‹เชˆเช.

เชตเชฟเชตเชฟเชง OS เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชจเซ€ เช›เชฌเซ€เช“ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชกเซ‹เช•เชฐเชซเชพเชˆเชฒเชฎเชพเช‚ เชฆเชฒเซ€เชฒเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชจเช‚เชฌเชฐ เชฌเชฟเชฒเซเชก เชฆเชฐเชฎเชฟเชฏเชพเชจ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เชฌเซ‡เช เช‡เชฎเซ‡เชœเชจเซเช‚ เชŸเซ‡เช— เชชเชฃ เช›เซ‡.

เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เชตเชฟเชจเซเชกเซ‹เช เชธเชฐเซเชตเชฐ เช‡เชฎเซ‡เชœ เชŸเซ…เช—เซเชธเชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชนเซ€เช‚.

ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชธเซ‚เชšเชจเชพเช“เชฎเชพเช‚ เช†เชฆเซ‡เชถเซ‹ RUN Windows OS เชชเชฐ dockerfile เชจเซ€ เช…เช‚เชฆเชฐ เชคเซ‡เช“ cmd.exe เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เชฅเชพเชฏ เช›เซ‡. เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชฒเช–เชตเชพเชจเซ€ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เช†เชฆเซ‡เชถเซ‹เชจเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชตเชงเชพเชฐเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชธเซ‚เชšเชจเชพ เชฆเซเชตเชพเชฐเชพ เชชเชพเชตเชฐเชถเซ‡เชฒเชฎเชพเช‚ เช•เชฎเชพเชจเซเชก เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เช•เชจเซเชธเซ‹เชฒเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ€เชถเซเช‚. SHELL.

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]

เช†เช—เชณเชจเซเช‚ เชชเช—เชฒเซเช‚ เชšเซ‹เช•เชฒเซ‡เชŸเซ€ เชชเซ‡เช•เซ‡เชœ เชฎเซ‡เชจเซ‡เชœเชฐ เช…เชจเซ‡ เชœเชฐเซ‚เชฐเซ€ เชชเซ‡เช•เซ‡เชœเซ‹เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡:

COPY chocolatey.pkg.config .
RUN Set-ExecutionPolicy Bypass -Scope Process -Force ;
    [System.Net.ServicePointManager]::SecurityProtocol = 
    [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 ;
    $env:chocolateyUseWindowsCompression = 'true' ;
    iex ((New-Object System.Net.WebClient).DownloadString( 
      'https://chocolatey.org/install.ps1')) ;
    choco install chocolatey.pkg.config -y --ignore-detected-reboot ;
    if ( @(0, 1605, 1614, 1641, 3010) -contains $LASTEXITCODE ) { 
      refreshenv; } else { exit $LASTEXITCODE; } ;
    Remove-Item 'chocolatey.pkg.config'

เชšเซ‹เช•เชฒเซ‡เชŸเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซ‡เช•เซ‡เชœเซ‹ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชธเซ‚เชšเชฟ เชคเชฐเซ€เช•เซ‡ เชชเชธเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชฅเชตเชพ เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เชฆเชฐเซ‡เช• เชชเซ‡เช•เซ‡เชœ เชฎเชพเชŸเซ‡ เช…เชจเชจเซเชฏ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‹ เชคเซ‡เชฎเชจเซ‡ เชเช• เชธเชฎเชฏเซ‡ เชเช• เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช…เชฎเชพเชฐเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚, เช…เชฎเซ‡ XML เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸ เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชœเชฐเซ‚เชฐเซ€ เชชเซ‡เช•เซ‡เชœเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เช›เซ‡. เชคเซ‡เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฒเชพเช—เซ‡ เช›เซ‡:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="python" version="3.8.2"/>
  <package id="nuget.commandline" version="5.5.1"/>
  <package id="git" version="2.26.2"/>
</packages>

เช†เช—เชณ, เช…เชฎเซ‡ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชฌเชฟเชฒเซเชก เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช เช›เซ€เช, เชเชŸเชฒเซ‡ เช•เซ‡, MS เชฌเชฟเชฒเซเชก เชŸเซ‚เชฒเซเชธ 2019 - เช† เชตเชฟเชเซเชฏเซเช…เชฒ เชธเซเชŸเซเชกเชฟเชฏเซ‹ 2019เชจเซเช‚ เชฒเชพเช‡เชŸเชตเซ‡เช‡เชŸ เชตเชฐเซเชเชจ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เช•เซ‹เชก เช•เชฎเซเชชเชพเช‡เชฒเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช˜เชŸเช•เซ‹เชจเซ‹ เชจเซเชฏเซ‚เชจเชคเชฎ เชธเซ‡เชŸ เช›เซ‡.
เช…เชฎเชพเชฐเชพ C++ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชพเชฅเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชจเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เช˜เชŸเช•เซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡, เชเชŸเชฒเซ‡ เช•เซ‡:

  • เชตเชฐเซเช•เชฒเซ‹เชก C++ เชŸเซ‚เชฒเซเชธ
  • เชŸเซ‚เชฒเชธเซ‡เชŸ v141
  • Windows 10 SDK (10.0.17134.0)

เชคเชฎเซ‡ JSON เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช—เซ‹เช เชตเชฃเซ€ เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‘เชŸเซ‹เชฎเซ…เชŸเชฟเช• เชฐเซ€เชคเซ‡ เชŸเซ‚เชฒเซเชธเชจเซ‹ เชตเชฟเชธเซเชคเซƒเชค เชธเซ‡เชŸ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชธเชพเชฎเช—เซเชฐเซ€เช“:

เช‰เชชเชฒเชฌเซเชง เช˜เชŸเช•เซ‹เชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชธเชพเช‡เชŸ เชชเชฐ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เชฎเชพเชˆเช•เซเชฐเซ‹เชธเซ‹เชซเซเชŸ เชตเชฟเชเซเชฏเซเช…เชฒ เชธเซเชŸเซเชกเชฟเชฏเซ‹.

{
  "version": "1.0",
  "components": [
    "Microsoft.Component.MSBuild",
    "Microsoft.VisualStudio.Workload.VCTools;includeRecommended",
    "Microsoft.VisualStudio.Component.VC.v141.x86.x64",
    "Microsoft.VisualStudio.Component.Windows10SDK.17134"
  ]
}

เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชธเช—เชตเชกเชคเชพ เชฎเชพเชŸเซ‡, เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒเชฎเชพเช‚ เชฌเชฟเชฒเซเชก เชŸเซ‚เชฒเซเชธ เชเช•เซเชเซ‡เช•เซเชฏเซเชŸเซ‡เชฌเชฒ เชซเชพเช‡เชฒเซ‹เชจเซ‹ เชชเชพเชฅ เช‰เชฎเซ‡เชฐเซ‡ เช›เซ‡. PATH. เช›เชฌเซ€เชจเซเช‚ เช•เชฆ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชซเชพเช‡เชฒเซ‹ เช…เชจเซ‡ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เช“ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซ€ เชชเชฃ เชธเชฒเชพเชน เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

COPY buildtools.config.json .
RUN Invoke-WebRequest 'https://aka.ms/vs/16/release/vs_BuildTools.exe' 
      -OutFile '.vs_buildtools.exe' -UseBasicParsing ;
    Start-Process -FilePath '.vs_buildtools.exe' -Wait -ArgumentList 
      '--quiet --norestart --nocache --config C:buildtools.config.json' ;
    Remove-Item '.vs_buildtools.exe' ;
    Remove-Item '.buildtools.config.json' ;
    Remove-Item -Force -Recurse 
      'C:Program Files (x86)Microsoft Visual StudioInstaller' ;
    $env:PATH = 'C:Program Files (x86)Microsoft Visual Studio2019BuildToolsMSBuildCurrentBin;' + $env:PATH; 
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 
      [EnvironmentVariableTarget]::Machine)

เช† เชคเชฌเช•เซเช•เซ‡, C++ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เช•เชฎเซเชชเชพเชˆเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เช…เชฎเชพเชฐเซ€ เชˆเชฎเซ‡เชœ เชคเซˆเชฏเชพเชฐ เช›เซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเซเช‚ เชกเซ‹เช•เชฐ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœ เชฌเชฟเชฒเซเชก เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเซ€เชงเชพ เชœ เช†เช—เชณ เชตเชงเซ€ เชถเช•เซ€เช เช›เซ€เช.

เช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœ

เช…เชฎเซ‡ เชฌเชจเชพเชตเซ‡เชฒ เชˆเชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฌเซ‹เชฐเซเชก เชชเชฐเชจเชพ เชคเชฎเชพเชฎ เชธเชพเชงเชจเซ‹ เชธเชพเชฅเซ‡ เชฌเชฟเชฒเซเชก เชˆเชฎเซ‡เชœ เชคเชฐเซ€เช•เซ‡ เช•เชฐเซ€เชถเซเช‚. เช…เช—เชพเช‰เชจเซ€ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ€ เชœเซ‡เชฎ, เช…เชฎเซ‡ เช•เซ‹เชกเชจเชพ เชชเซเชจเชƒเช‰เชชเชฏเซ‹เช—เชจเซ€ เชธเชฐเชณเชคเชพ เชฎเชพเชŸเซ‡ เชตเชฐเซเชเชจ เชจเช‚เชฌเชฐ/เช‡เชฎเซ‡เชœ เชŸเซ‡เช—เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช‰เชฎเซ‡เชฐเซ€เชถเซเช‚. เชฒเซ‡เชฌเชฒ เช‰เชฎเซ‡เชฐเชตเซเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡ as builder เชธเซ‚เชšเชจเชพเช“เชฎเชพเช‚ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช‡เชฎเซ‡เชœ เชชเชฐ FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

เชนเชตเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชธเชฎเชฏ เช›เซ‡. เช…เชนเซ€เช‚ เชฌเชงเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡: เชธเซเชฐเซ‹เชค เช•เซ‹เชก เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซเชจเซ€ เชจเช•เชฒ เช•เชฐเซ‹ เช…เชจเซ‡ เชธเช‚เช•เชฒเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชถเชฐเซ‚ เช•เชฐเซ‹.

COPY myapp .
RUN nuget restore myapp.sln ;
    msbuild myapp.sln /t:myapp /p:Configuration=Release

เช…เช‚เชคเชฟเชฎ เช›เชฌเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เช…เช‚เชคเชฟเชฎ เชคเชฌเช•เซเช•เซ‹ เช เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชฎเซ‚เชณ เช›เชฌเซ€เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡, เชœเซเชฏเชพเช‚ เชคเชฎเชพเชฎ เชธเช‚เช•เชฒเชจ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เชธเซเชฅเชฟเชค เชนเชถเซ‡. เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช‡เชฎเซ‡เชœเชฎเชพเช‚เชฅเซ€ เชธเช‚เช•เชฒเชฟเชค เชซเชพเช‡เชฒเซ‹เชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชชเชฐเชฟเชฎเชพเชฃเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเซ‹ เช†เชตเชถเซเชฏเช• เช›เซ‡ --from=builder เชธเซ‚เชšเชจเชพเช“เชฎเชพเช‚ COPY.

FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./

เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชจเชฟเชฐเซเชญเชฐเชคเชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เช…เชจเซ‡ เชธเซ‚เชšเชจเชพเช“ เชฆเซเชตเชพเชฐเชพ เชฒเซ‹เชจเซเชš เช•เชฎเชพเชจเซเชกเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซเช‚ เชฌเชพเช•เซ€ เช›เซ‡. ENTRYPOINT เช…เชฅเชตเชพ CMD.

เชจเชฟเชทเซเช•เชฐเซเชท

เช† เชฒเซ‡เช–เชฎเชพเช‚, เชฎเซ‡เช‚ เชตเชฟเชจเซเชกเซ‹เช เชนเซ‡เช เชณเชจเชพ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เช…เช‚เชฆเชฐ C++ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเช‚เช•เชฒเชจ เชตเชพเชคเชพเชตเชฐเชฃ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเซเช‚ เช…เชจเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เช›เชฌเซ€เช“ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‹เช•เชฐ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœ เชฌเชฟเชฒเซเชกเซเชธเชจเซ€ เช•เซเชทเชฎเชคเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹