เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชฎเชพเชŸเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

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

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชฎเชพเชŸเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

เชกเซ‹เช•เชฐ เช•เชฎเซเชชเซ‹เช เชถเซเช‚ เช›เซ‡?

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เช เชกเซ‹เช•เชฐ เชธเชพเชฅเซ‡ เชธเชฎเชพเชฏเซ‡เชฒ เชธเชพเชงเชจ เช›เซ‡. เชคเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชœเชฎเชพเชตเชŸ เชธเช‚เชฌเช‚เชงเชฟเชค เชธเชฎเชธเซเชฏเชพเช“ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡.

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

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

เชกเซ‹เช•เชฐ เช•เชฎเซเชชเซ‹เช เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€, เชคเซ‡เชจเซ‡ เชธเชฐเชณ เชฐเซ€เชคเซ‡ เชตเชฐเซเชฃเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชจเซ‡ เชเช• เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เช˜เชฃเซ€ เชธเซ‡เชตเชพเช“ เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชกเซ‹เช•เชฐ เช…เชจเซ‡ เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชตเชšเซเชšเซ‡เชจเซ‹ เชคเชซเชพเชตเชค

เชกเซ‹เช•เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เชคเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เช•เชจเซเชŸเซ‡เชจเชฐ (เชธเซ‡เชตเชพเช“) เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡.

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

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชฎเชพเชŸเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ
เชกเซ‹เช•เชฐ (เชธเชฟเช‚เช—เชฒ เช•เชจเซเชŸเซ‡เชจเชฐ) เช…เชจเซ‡ เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช (เชฌเชนเซเชตเชฟเชง เช•เชจเซเชŸเซ‡เชจเชฐ)

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชฎเชพเชŸเซ‡ เชฒเชพเช•เซเชทเชฃเชฟเช• เช‰เชชเชฏเซ‹เช— เช•เซ‡เชธ

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

เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‹ เช•เซ‡ เชคเชฎเซ‡ เชตเซ‡เชฌ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชกเซ‡เชตเชฒเชชเชฐ เช›เซ‹. เช† เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชฌเซ‡ เชตเซ‡เชฌเชธเชพเช‡เชŸเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชชเซเชฐเชฅเชฎ, เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เชฒเซ‹เช•เซ‹เชจเซ‡ เชฎเชพเชคเซเชฐ เชฅเซ‹เชกเชพ เช•เซเชฒเชฟเช•เซเชธ เชธเชพเชฅเซ‡ เช‘เชจเชฒเชพเช‡เชจ เชธเซเชŸเซ‹เชฐเซเชธ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชฌเซ€เชœเซ‹ เช—เซเชฐเชพเชนเช• เชธเชชเซ‹เชฐเซเชŸเชจเซ‹ เชนเซ‡เชคเซ เช›เซ‡. เช† เชฌเซ‡ เชธเชพเช‡เชŸเซเชธ เชธเชฎเชพเชจ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ‡ เช›เซ‡.

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

เช•เชฎเชจเชธเซ€เชฌเซ‡, เชคเชฎเซ‡ เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชœเซ‡เชตเซ€ เช•เซ‹เชˆ เชตเชธเซเชคเซเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชจเชฅเซ€. เชคเซ‡เชฅเซ€, เชคเชฎเชพเชฐเซ‡ เชเช• เชธเชฎเชฏเซ‡ เชธเซ‡เชตเชพเช“เชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช…เชจเซ‡ เชชเซเชจเชƒเชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเซ€ เชชเชกเชถเซ‡, เช†เชถเชพ เชฐเชพเช–เซ€เช เช•เซ‡ เชคเชฎเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เช•เช‚เชˆเชชเชฃ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚.

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

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

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

เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เช…เชฎเซ‡ เชงเชพเชฐเซ€เช เช›เซ€เช เช•เซ‡ เชคเชฎเชจเซ‡ เชกเซ‹เช•เชฐเชจเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชธเชฎเชœ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชกเซ‹เช•เชฐ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเซเช‚ เช›เซ‡.

เชšเชพเชฒเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเชฐ เช•เชพเชฎ เชถเชฐเซ‚ เช•เชฐเซ€เช.

โ–1. เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชตเซ‹

เชคเชฎเชพเชฐเซ€ เชชเซเชฐเชฅเชฎ เช•เซเชฒเชพเชฏเช‚เชŸ-เชธเชฐเซเชตเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชธเซ‚เชšเชตเซ‡ เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเซ‹เชฒเซเชกเชฐ เชฌเชจเชพเชตเซ€เชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹. เชคเซ‡เชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชซเชพเช‡เชฒเซ‹ เช…เชจเซ‡ เชซเซ‹เชฒเซเชกเชฐเซเชธ เชนเซ‹เชตเชพ เชœเซ‹เชˆเช:

  • เชซเชพเชˆเชฒ docker-compose.yml. เช† เชเช• เชกเซ‹เช•เชฐ เช•เชฎเซเชชเซ‹เช เชซเชพเช‡เชฒ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชธเซ‡เชตเชพเช“ เชถเชฐเซ‚ เช•เชฐเชตเชพ เช…เชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชธเซ‚เชšเชจเชพเช“ เชนเชถเซ‡.
  • เชซเซ‹เชฒเซเชกเชฐ server. เชคเซ‡เชฎเชพเช‚ เชธเชฐเซเชตเชฐเชจเซ‡ เชšเชพเชฒเซ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชซเชพเชˆเชฒเซ‹ เชนเชถเซ‡.
  • เชซเซ‹เชฒเซเชกเชฐ client. เช•เซเชฒเชพเชฏเช‚เชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชซเชพเช‡เชฒเซ‹ เช…เชนเซ€เช‚ เชธเซเชฅเชฟเชค เชฅเชถเซ‡.

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชฎเซเช–เซเชฏ เชซเซ‹เชฒเซเชกเชฐเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฆเซ‡เช–เชพเชตเซ€ เชœเซ‹เชˆเช:

.
โ”œโ”€โ”€ client/
โ”œโ”€โ”€ docker-compose.yml
โ””โ”€โ”€ server/
2 directories, 1 file

โ–2. เชธเชฐเซเชตเชฐ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เช…เชนเซ€เช‚, เชธเชฐเซเชตเชฐ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚, เช…เชฎเซ‡ เชกเซ‹เช•เชฐ เชธเช‚เชฌเช‚เชงเชฟเชค เช•เซ‡เชŸเชฒเซ€เช• เชฎเซ‚เชณเชญเซ‚เชค เชฌเชพเชฌเชคเซ‹เชจเซ‡ เชธเซเชชเชฐเซเชถ เช•เชฐเซ€เชถเซเช‚.

2 เช. เชซเชพเชˆเชฒเซ‹ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชซเซ‹เชฒเซเชกเชฐ เชชเชฐ เชœเชพเช“ server เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชซเชพเชˆเชฒเซ‹ เชฌเชจเชพเชตเซ‹:

  • เชซเชพเชˆเชฒ server.py. เชคเซ‡เชฎเชพเช‚ เชธเชฐเซเชตเชฐ เช•เซ‹เชก เชนเชถเซ‡.
  • เชซเชพเชˆเชฒ index.html. เช† เชซเชพเช‡เชฒเชฎเชพเช‚ เชŸเซ‡เช•เซเชธเซเชŸเชจเซ‹ เชเช• เชญเชพเช— เชนเชถเซ‡ เชœเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช.
  • เชซเชพเชˆเชฒ Dockerfile. เช† เชเช• เชกเซ‹เช•เชฐ เชซเชพเช‡เชฒ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชธเชฐเซเชตเชฐ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชธเซ‚เชšเชจเชพเช“ เชนเชถเซ‡.

เชคเชฎเชพเชฐเชพ เชซเซ‹เชฒเซเชกเชฐเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช†เชจเชพ เชœเซ‡เชตเซ€ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช server/:

.
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ index.html
โ””โ”€โ”€ server.py
0 directories, 3 files

2 เชฌเซ€. เชชเชพเชฏเชฅเซ‹เชจ เชซเชพเช‡เชฒเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช.

เชซเชพเช‡เชฒเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ server.py เชจเซ€เชšเซ‡เชจเซ‹ เช•เซ‹เชก:

#!/usr/bin/env python3

# ะ˜ะผะฟะพั€ั‚ ัะธัั‚ะตะผะฝั‹ั… ะฑะธะฑะปะธะพั‚ะตะบ python.
# ะญั‚ะธ ะฑะธะฑะปะธะพั‚ะตะบะธ ะฑัƒะดัƒั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒัั ะดะปั ัะพะทะดะฐะฝะธั ะฒะตะฑ-ัะตั€ะฒะตั€ะฐ.
# ะ’ะฐะผ ะฝะต ะฝัƒะถะฝะพ ัƒัั‚ะฐะฝะฐะฒะปะธะฒะฐั‚ัŒ ั‡ั‚ะพ-ั‚ะพ ะพัะพะฑะตะฝะฝะพะต, ัั‚ะธ ะฑะธะฑะปะธะพั‚ะตะบะธ ัƒัั‚ะฐะฝะฐะฒะปะธะฒะฐัŽั‚ัั ะฒะผะตัั‚ะต ั Python.

import http.server
import socketserver

# ะญั‚ะฐ ะฟะตั€ะตะผะตะฝะฝะฐั ะฝัƒะถะฝะฐ ะดะปั ะพะฑั€ะฐะฑะพั‚ะบะธ ะทะฐะฟั€ะพัะพะฒ ะบะปะธะตะฝั‚ะฐ ะบ ัะตั€ะฒะตั€ัƒ.

handler = http.server.SimpleHTTPRequestHandler

# ะขัƒั‚ ะผั‹ ัƒะบะฐะทั‹ะฒะฐะตะผ, ั‡ั‚ะพ ัะตั€ะฒะตั€ ะผั‹ ั…ะพั‚ะธะผ ะทะฐะฟัƒัั‚ะธั‚ัŒ ะฝะฐ ะฟะพั€ั‚ะต 1234. 
# ะŸะพัั‚ะฐั€ะฐะนั‚ะตััŒ ะทะฐะฟะพะผะฝะธั‚ัŒ ัั‚ะธ ัะฒะตะดะตะฝะธั, ั‚ะฐะบ ะบะฐะบ ะพะฝะธ ะฝะฐะผ ะพั‡ะตะฝัŒ ะฟั€ะธะณะพะดัั‚ัั ะฒ ะดะฐะปัŒะฝะตะนัˆะตะผ, ะฟั€ะธ ั€ะฐะฑะพั‚ะต ั docker-compose.

with socketserver.TCPServer(("", 1234), handler) as httpd:

    # ะ‘ะปะฐะณะพะดะฐั€ั ัั‚ะพะน ะบะพะผะฐะฝะดะต ัะตั€ะฒะตั€ ะฑัƒะดะตั‚ ะฒั‹ะฟะพะปะฝัั‚ัŒัั ะฟะพัั‚ะพัะฝะฝะพ, ะพะถะธะดะฐั ะทะฐะฟั€ะพัะพะฒ ะพั‚ ะบะปะธะตะฝั‚ะฐ.

   httpd.serve_forever()

เช† เช•เซ‹เชก เชคเชฎเชจเซ‡ เชเช• เชธเชฐเชณ เชตเซ‡เชฌ เชธเชฐเซเชตเชฐ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡. เชคเซ‡ เช—เซเชฐเชพเชนเช•เซ‹เชจเซ‡ เชซเชพเชˆเชฒ เช†เชชเชถเซ‡ index.html, เชœเซ‡เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€เช“ เชชเช›เซ€เชฅเซ€ เชตเซ‡เชฌ เชชเซƒเชทเซเช  เชชเชฐ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

2c. HTML เชซเชพเช‡เชฒเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชซเชพเชˆเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ index.html เชจเซ€เชšเซ‡เชจเซเช‚ เชฒเช–เชพเชฃ เช‰เชฎเซ‡เชฐเซ‹:

Docker-Compose is magic!

เช† เชŸเซ‡เช•เซเชธเซเชŸ เช•เซเชฒเชพเชฏเชจเซเชŸเชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

2 เชกเซ€. เชกเซ‹เช•เชฐเชซเชพเช‡เชฒเชจเซเช‚ เชธเช‚เชชเชพเชฆเชจ

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชเช• เชธเชฐเชณ เชซเชพเช‡เชฒ เชฌเชจเชพเชตเซ€เชถเซเช‚ Dockerfile, เชœเซ‡ Python เชธเชฐเซเชตเชฐ เชฎเชพเชŸเซ‡ เชฐเชจเชŸเชพเชˆเชฎ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เชนเชถเซ‡. เชฌเชจเชพเชตเซ‡เชฒ เช‡เชฎเซ‡เชœเชจเชพ เช†เชงเชพเชฐ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชฐเซ€เชคเซ‡, Python เชฎเชพเช‚ เชฒเช–เซ‡เชฒเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡. เช…เชนเซ€เช‚ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช›เซ‡:

# ะะฐ ะฒััะบะธะน ัะปัƒั‡ะฐะน ะฝะฐะฟะพะผะธะฝะฐัŽ, ั‡ั‚ะพ Dockerfile ะฒัะตะณะดะฐ ะดะพะปะถะตะฝ ะฝะฐั‡ะธะฝะฐั‚ัŒัั ั ะธะผะฟะพั€ั‚ะฐ ะฑะฐะทะพะฒะพะณะพ ะพะฑั€ะฐะทะฐ.
# ะ”ะปั ัั‚ะพะณะพ ะธัะฟะพะปัŒะทัƒะตั‚ัั ะบะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ 'FROM'.
# ะ—ะดะตััŒ ะฝะฐะผ ะฝัƒะถะฝะพ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะพะฑั€ะฐะท python (ั DockerHub).
# ะ’ ั€ะตะทัƒะปัŒั‚ะฐั‚ะต ะผั‹, ะฒ ะบะฐั‡ะตัั‚ะฒะต ะธะผะตะฝะธ ะพะฑั€ะฐะทะฐ, ัƒะบะฐะทั‹ะฒะฐะตะผ 'python', ะฐ ะฒ ะบะฐั‡ะตัั‚ะฒะต ะฒะตั€ัะธะธ - 'latest'.

FROM python:latest

# ะ”ะปั ั‚ะพะณะพ ั‡ั‚ะพะฑั‹ ะทะฐะฟัƒัั‚ะธั‚ัŒ ะฒ ะบะพะฝั‚ะตะนะฝะตั€ะต ะบะพะด, ะฝะฐะฟะธัะฐะฝะฝั‹ะน ะฝะฐ Python, ะฝะฐะผ ะฝัƒะถะฝะพ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ั„ะฐะนะปั‹ 'server.py' ะธ 'index.html'.
# ะ”ะปั ั‚ะพะณะพ ั‡ั‚ะพะฑั‹ ัั‚ะพ ัะดะตะปะฐั‚ัŒ, ะผั‹ ะธัะฟะพะปัŒะทัƒะตะผ ะบะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ 'ADD'.
# ะŸะตั€ะฒั‹ะน ะฟะฐั€ะฐะผะตั‚ั€, 'server.py', ะฟั€ะตะดัั‚ะฐะฒะปัะตั‚ ัะพะฑะพะน ะธะผั ั„ะฐะนะปะฐ, ั…ั€ะฐะฝัั‰ะตะณะพัั ะฝะฐ ะบะพะผะฟัŒัŽั‚ะตั€ะต.
# ะ’ั‚ะพั€ะพะน ะฟะฐั€ะฐะผะตั‚ั€, '/server/', ัั‚ะพ ะฟัƒั‚ัŒ, ะฟะพ ะบะพั‚ะพั€ะพะผัƒ ะฝัƒะถะฝะพ ั€ะฐะทะผะตัั‚ะธั‚ัŒ ัƒะบะฐะทะฐะฝะฝั‹ะน ั„ะฐะนะป ะฒ ะพะฑั€ะฐะทะต.
# ะ—ะดะตััŒ ะผั‹ ะฟะพะผะตั‰ะฐะตะผ ั„ะฐะนะป ะฒ ะฟะฐะฟะบัƒ ะพะฑั€ะฐะทะฐ '/server/'.

ADD server.py /server/
ADD index.html /server/

# ะ—ะดะตััŒ ะผั‹ ะฒะพัะฟะพะปัŒะทัƒะตะผัั ะบะพะผะฐะฝะดะพะน 'WORKDIR', ะฒะพะทะผะพะถะฝะพ, ะฝะพะฒะพะน ะดะปั ะฒะฐั.
# ะžะฝะฐ ะฟะพะทะฒะพะปัะตั‚ ะธะทะผะตะฝะธั‚ัŒ ั€ะฐะฑะพั‡ัƒัŽ ะดะธั€ะตะบั‚ะพั€ะธัŽ ะพะฑั€ะฐะทะฐ.
# ะ’ ะบะฐั‡ะตัั‚ะฒะต ั‚ะฐะบะพะน ะดะธั€ะตะบั‚ะพั€ะธะธ, ะฒ ะบะพั‚ะพั€ะพะน ะฑัƒะดัƒั‚ ะฒั‹ะฟะพะปะฝัั‚ัŒัั ะฒัะต ะบะพะผะฐะฝะดั‹, ะผั‹ ัƒัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ '/server/'.

WORKDIR /server/

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เช•เซเชฒเชพเชฏเช‚เชŸ เชชเชฐ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€เช.

โ–3. เช•เซเชฒเชพเชฏเชจเซเชŸ เชฌเชจเชพเชตเชตเซเช‚

เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เช•เซเชฒเชพเชฏเช‚เชŸ เชฌเชพเชœเซ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡, เช…เชฎเซ‡ เชฐเชธเซเชคเชพเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซ€เช• เชกเซ‹เช•เชฐ เชฌเซ‡เชเชฟเช•เซเชธ เชฏเชพเชฆ เชฐเชพเช–เซ€เชถเซเช‚.

3 เช. เชซเชพเชˆเชฒเซ‹ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเซ‹เชฒเซเชกเชฐ เชชเชฐ เชœเชพเช“ client เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชซเชพเชˆเชฒเซ‹ เชฌเชจเชพเชตเซ‹:

  • เชซเชพเชˆเชฒ client.py. เช•เซเชฒเชพเชฏเช‚เชŸ เช•เซ‹เชก เช…เชนเซ€เช‚ เชธเซเชฅเชฟเชค เชนเชถเซ‡.
  • เชซเชพเชˆเชฒ Dockerfile. เช† เชซเชพเช‡เชฒ เชธเชฐเซเชตเชฐ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชธเชฎเชพเชจ เชซเชพเช‡เชฒเชจเซ€ เชธเชฎเชพเชจ เชญเซ‚เชฎเชฟเช•เชพ เชญเชœเชตเซ‡ เช›เซ‡. เชœเซ‡เชฎ เช•เซ‡, เชคเซ‡เชฎเชพเช‚ เช•เซเชฒเชพเชฏเช‚เชŸ เช•เซ‹เชก เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเซเช‚ เชคเซ‡เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชคเซ€ เชธเซ‚เชšเชจเชพเช“ เช›เซ‡.

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชคเชฎเชพเชฐเซเช‚ เชซเซ‹เชฒเซเชกเชฐ client/ เช•เชพเชฎเชจเชพ เช† เชคเชฌเช•เซเช•เซ‡ เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชตเซเช‚ เชœเซ‹เชˆเช:

.
โ”œโ”€โ”€ client.py
โ””โ”€โ”€ Dockerfile
0 directories, 2 files

3 เชฌเซ€. เชชเชพเชฏเชฅเซ‹เชจ เชซเชพเช‡เชฒเชจเซเช‚ เชธเช‚เชชเชพเชฆเชจ

เชซเชพเช‡เชฒเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ client.py เชจเซ€เชšเซ‡เชจเซ‹ เช•เซ‹เชก:

#!/usr/bin/env python3

# ะ˜ะผะฟะพั€ั‚ะธั€ัƒะตะผ ัะธัั‚ะตะผะฝัƒัŽ ะฑะธะฑะปะธะพั‚ะตะบัƒ Python.
# ะžะฝะฐ ะธัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ะทะฐะณั€ัƒะทะบะธ ั„ะฐะนะปะฐ 'index.html' ั ัะตั€ะฒะตั€ะฐ.
# ะะธั‡ะตะณะพ ะพัะพะฑะตะฝะฝะพะณะพ ัƒัั‚ะฐะฝะฐะฒะปะธะฒะฐั‚ัŒ ะฝะต ะฝัƒะถะฝะพ, ัั‚ะฐ ะฑะธะฑะปะธะพั‚ะตะบะฐ ัƒัั‚ะฐะฝะฐะฒะปะธะฒะฐะตั‚ัั ะฒะผะตัั‚ะต ั Python.

import urllib.request

# ะญั‚ะฐ ะฟะตั€ะตะผะตะฝะฝะฐั ัะพะดะตั€ะถะธั‚ ะทะฐะฟั€ะพั ะบ 'http://localhost:1234/'.
# ะ’ะพะทะผะพะถะฝะพ, ัะตะนั‡ะฐั ะฒั‹ ะทะฐะดะฐั‘ั‚ะตััŒ ะฒะพะฟั€ะพัะพะผ ะพ ั‚ะพะผ, ั‡ั‚ะพ ั‚ะฐะบะพะต 'http://localhost:1234'.
# localhost ัƒะบะฐะทั‹ะฒะฐะตั‚ ะฝะฐ ั‚ะพ, ั‡ั‚ะพ ะฟั€ะพะณั€ะฐะผะผะฐ ั€ะฐะฑะพั‚ะฐะตั‚ ั ะปะพะบะฐะปัŒะฝั‹ะผ ัะตั€ะฒะตั€ะพะผ.
# 1234 - ัั‚ะพ ะฝะพะผะตั€ ะฟะพั€ั‚ะฐ, ะบะพั‚ะพั€ั‹ะน ะฒะฐะผ ะฟั€ะตะดะปะฐะณะฐะปะพััŒ ะทะฐะฟะพะผะฝะธั‚ัŒ ะฟั€ะธ ะฝะฐัั‚ั€ะพะนะบะต ัะตั€ะฒะตั€ะฝะพะณะพ ะบะพะดะฐ.

fp = urllib.request.urlopen("http://localhost:1234/")

# 'encodedContent' ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ะทะฐะบะพะดะธั€ะพะฒะฐะฝะฝะพะผัƒ ะพั‚ะฒะตั‚ัƒ ัะตั€ะฒะตั€ะฐ ('index.html').
# 'decodedContent' ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ั€ะฐัะบะพะดะธั€ะพะฒะฐะฝะฝะพะผัƒ ะพั‚ะฒะตั‚ัƒ ัะตั€ะฒะตั€ะฐ (ั‚ัƒั‚ ะฑัƒะดะตั‚ ั‚ะพ, ั‡ั‚ะพ ะผั‹ ั…ะพั‚ะธะผ ะฒั‹ะฒะตัั‚ะธ ะฝะฐ ัะบั€ะฐะฝ).

encodedContent = fp.read()
decodedContent = encodedContent.decode("utf8")

# ะ’ั‹ะฒะพะดะธะผ ัะพะดะตั€ะถะธะผะพะต ั„ะฐะนะปะฐ, ะฟะพะปัƒั‡ะตะฝะฝะพะณะพ ั ัะตั€ะฒะตั€ะฐ ('index.html').

print(decodedContent)

# ะ—ะฐะบั€ั‹ะฒะฐะตะผ ัะพะตะดะธะฝะตะฝะธะต ั ัะตั€ะฒะตั€ะพะผ.

fp.close()

เช† เช•เซ‹เชก เชธเชพเชฅเซ‡, เช•เซเชฒเชพเชฏเช‚เชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชฐเซเชตเชฐเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเช•เซเชฐเซ€เชจ เชชเชฐ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

3c. เชกเซ‹เช•เชฐเชซเชพเช‡เชฒเชจเซเช‚ เชธเช‚เชชเชพเชฆเชจ

เชธเชฐเซเชตเชฐเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช…เชฎเซ‡ เชเช• เชธเชฐเชณ เชฌเชจเชพเชตเซ€เช เช›เซ€เช Dockerfile, เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ Python เช•เซเชฒเชพเชฏเชจเซเชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชšเชพเชฒเชถเซ‡. เช…เชนเซ€เช‚ เช•เซเชฒเชพเชฏเช‚เชŸ เช•เซ‹เชก เช›เซ‡ Dockerfile:

# ะขะพ ะถะต ัะฐะผะพะต, ั‡ั‚ะพ ะธ ะฒ ัะตั€ะฒะตั€ะฝะพะผ Dockerfile.

FROM python:latest

# ะ˜ะผะฟะพั€ั‚ะธั€ัƒะตะผ 'client.py' ะฒ ะฟะฐะฟะบัƒ '/client/'.

ADD client.py /client/

# ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฒ ะบะฐั‡ะตัั‚ะฒะต ั€ะฐะฑะพั‡ะตะน ะดะธั€ะตะบั‚ะพั€ะธะธ '/client/'.

WORKDIR /client/

โ–4. เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช

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

เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เช…เชนเซ€เช‚ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเชˆ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ เชคเชฎเชพเชฎ เช†เชฆเซ‡เชถเซ‹เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชจเชฅเซ€ docker-compose.yml. เช…เชฎเชพเชฐเซเช‚ เชฎเซเช–เซเชฏ เชงเซเชฏเซ‡เชฏ เชเช• เชตเซเชฏเชตเชนเชพเชฐเซ เช‰เชฆเชพเชนเชฐเชฃ เชฆเซเชตเชพเชฐเชพ เชšเชพเชฒเชตเชพเชจเซเช‚ เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เชกเซ‹เช•เชฐ เช•เชฎเซเชชเซ‹เชเชจเซเช‚ เชฎเซ‚เชณเชญเซ‚เชค เชœเซเชžเชพเชจ เช†เชชเชถเซ‡.

เชซเชพเช‡เชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ‹ เช•เซ‹เชก เช…เชนเซ€เช‚ เช›เซ‡ docker-compose.yml:

# ะคะฐะนะป docker-compose ะดะพะปะถะตะฝ ะฝะฐั‡ะธะฝะฐั‚ัŒัั ั ั‚ะตะณะฐ ะฒะตั€ัะธะธ.
# ะœั‹ ะธัะฟะพะปัŒะทัƒะตะผ "3" ั‚ะฐะบ ะบะฐะบ ัั‚ะพ - ัะฐะผะฐั ัะฒะตะถะฐั ะฒะตั€ัะธั ะฝะฐ ะผะพะผะตะฝั‚ ะฝะฐะฟะธัะฐะฝะธั ัั‚ะพะณะพ ะบะพะดะฐ.

version: "3"

# ะกะปะตะดัƒะตั‚ ัƒั‡ะธั‚ั‹ะฒะฐั‚ัŒ, ั‡ั‚ะพ docker-composes ั€ะฐะฑะพั‚ะฐะตั‚ ั ัะตั€ะฒะธัะฐะผะธ.
# 1 ัะตั€ะฒะธั = 1 ะบะพะฝั‚ะตะนะฝะตั€.
# ะกะตั€ะฒะธัะพะผ ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ะบะปะธะตะฝั‚, ัะตั€ะฒะตั€, ัะตั€ะฒะตั€ ะฑะฐะท ะดะฐะฝะฝั‹ั…...
# ะ ะฐะทะดะตะป, ะฒ ะบะพั‚ะพั€ะพะผ ะฑัƒะดัƒั‚ ะพะฟะธัะฐะฝั‹ ัะตั€ะฒะธัั‹, ะฝะฐั‡ะธะฝะฐะตั‚ัั ั 'services'.

services:

  # ะšะฐะบ ัƒะถะต ะฑั‹ะปะพ ัะบะฐะทะฐะฝะพ, ะผั‹ ัะพะฑะธั€ะฐะตะผัั ัะพะทะดะฐั‚ัŒ ะบะปะธะตะฝั‚ัะบะพะต ะธ ัะตั€ะฒะตั€ะฝะพะต ะฟั€ะธะปะพะถะตะฝะธั.
  # ะญั‚ะพ ะพะทะฝะฐั‡ะฐะตั‚, ั‡ั‚ะพ ะฝะฐะผ ะฝัƒะถะฝะพ ะดะฒะฐ ัะตั€ะฒะธัะฐ.
  # ะŸะตั€ะฒั‹ะน ัะตั€ะฒะธั (ะบะพะฝั‚ะตะนะฝะตั€): ัะตั€ะฒะตั€.
  # ะะฐะทะฒะฐั‚ัŒ ะตะณะพ ะผะพะถะฝะพ ั‚ะฐะบ, ะบะฐะบ ะฝัƒะถะฝะพ ั€ะฐะทั€ะฐะฑะพั‚ั‡ะธะบัƒ.
  # ะŸะพะฝัั‚ะฝะพะต ะฝะฐะทะฒะฐะฝะธะต ัะตั€ะฒะธัะฐ ะฟะพะผะพะณะฐะตั‚ ะพะฟั€ะตะดะตะปะธั‚ัŒ ะตะณะพ ั€ะพะปัŒ.
  # ะ—ะดะตััŒ ะผั‹, ะดะปั ะธะผะตะฝะพะฒะฐะฝะธั ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะตะณะพ ัะตั€ะฒะธัะฐ, ะธัะฟะพะปัŒะทัƒะตะผ ะบะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ 'server'.

  server:
 
    # ะšะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ "build" ะฟะพะทะฒะพะปัะตั‚ ะทะฐะดะฐั‚ัŒ
    # ะฟัƒั‚ัŒ ะบ ั„ะฐะนะปัƒ Dockerfile, ะบะพั‚ะพั€ั‹ะน ะฝัƒะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะดะปั ัะพะทะดะฐะฝะธั ะพะฑั€ะฐะทะฐ,
    # ะบะพั‚ะพั€ั‹ะน ะฟะพะทะฒะพะปะธั‚ ะทะฐะฟัƒัั‚ะธั‚ัŒ ัะตั€ะฒะธั.
    # ะ—ะดะตััŒ 'server/' ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ะฟัƒั‚ะธ ะบ ะฟะฐะฟะบะต ัะตั€ะฒะตั€ะฐ,
    # ะบะพั‚ะพั€ะฐั ัะพะดะตั€ะถะธั‚ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะธะน Dockerfile.

    build: server/

    # ะšะพะผะฐะฝะดะฐ, ะบะพั‚ะพั€ัƒัŽ ะฝัƒะถะฝะพ ะทะฐะฟัƒัั‚ะธั‚ัŒ ะฟะพัะปะต ัะพะทะดะฐะฝะธั ะพะฑั€ะฐะทะฐ.
    # ะกะปะตะดัƒัŽั‰ะฐั ะบะพะผะฐะฝะดะฐ ะพะทะฝะฐั‡ะฐะตั‚ ะทะฐะฟัƒัะบ "python ./server.py".

    command: python ./server.py

    # ะ’ัะฟะพะผะฝะธั‚ะต ะพ ั‚ะพะผ, ั‡ั‚ะพ ะฒ ะบะฐั‡ะตัั‚ะฒะต ะฟะพั€ั‚ะฐ ะฒ 'server/server.py' ัƒะบะฐะทะฐะฝ ะฟะพั€ั‚ 1234.
    # ะ•ัะปะธ ะผั‹ ั…ะพั‚ะธะผ ะพะฑั€ะฐั‚ะธั‚ัŒัั ะบ ัะตั€ะฒะตั€ัƒ ั ะฝะฐัˆะตะณะพ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ (ะฝะฐั…ะพะดัััŒ ะทะฐ ะฟั€ะตะดะตะปะฐะผะธ ะบะพะฝั‚ะตะนะฝะตั€ะฐ),
    # ะผั‹ ะดะพะปะถะฝั‹ ะพั€ะณะฐะฝะธะทะพะฒะฐั‚ัŒ ะฟะตั€ะตะฝะฐะฟั€ะฐะฒะปะตะฝะธะต ัั‚ะพะณะพ ะฟะพั€ั‚ะฐ ะฝะฐ ะฟะพั€ั‚ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ.
    # ะกะดะตะปะฐั‚ัŒ ัั‚ะพ ะฝะฐะผ ะฟะพะผะพะถะตั‚ ะบะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ 'ports'.
    # ะŸั€ะธ ะตะณะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะธ ะฟั€ะธะผะตะฝัะตั‚ัั ัะปะตะดัƒัŽั‰ะฐั ะบะพะฝัั‚ั€ัƒะบั†ะธั: [ะฟะพั€ั‚ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ]:[ะฟะพั€ั‚ ะบะพะฝั‚ะตะนะฝะตั€ะฐ]
    # ะ’ ะฝะฐัˆะตะผ ัะปัƒั‡ะฐะต ะฝัƒะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟะพั€ั‚ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ 1234 ะธ ะพั€ะณะฐะฝะธะทะพะฒะฐั‚ัŒ ะตะณะพ ัะฒัะทัŒ ั ะฟะพั€ั‚ะพะผ
    # 1234 ะบะพะฝั‚ะตะนะฝะตั€ะฐ (ั‚ะฐะบ ะบะฐะบ ะธะผะตะฝะฝะพ ะฝะฐ ัั‚ะพั‚ ะฟะพั€ั‚ ัะตั€ะฒะตั€ 
    # ะพะถะธะดะฐะตั‚ ะฟะพัั‚ัƒะฟะปะตะฝะธั ะทะฐะฟั€ะพัะพะฒ).

    ports:
      - 1234:1234

  # ะ’ั‚ะพั€ะพะน ัะตั€ะฒะธั (ะบะพะฝั‚ะตะนะฝะตั€): ะบะปะธะตะฝั‚.
  # ะญั‚ะพั‚ ัะตั€ะฒะธั ะฝะฐะทะฒะฐะฝ 'client'.

  client:
    # ะ—ะดะตััŒ 'client/ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ะฟัƒั‚ะธ ะบ ะฟะฐะฟะบะต, ะบะพั‚ะพั€ะฐั ัะพะดะตั€ะถะธั‚
    # ั„ะฐะนะป Dockerfile ะดะปั ะบะปะธะตะฝั‚ัะบะพะน ั‡ะฐัั‚ะธ ัะธัั‚ะตะผั‹.

    build: client/

    # ะšะพะผะฐะฝะดะฐ, ะบะพั‚ะพั€ัƒัŽ ะฝัƒะถะฝะพ ะทะฐะฟัƒัั‚ะธั‚ัŒ ะฟะพัะปะต ัะพะทะดะฐะฝะธั ะพะฑั€ะฐะทะฐ.
    # ะกะปะตะดัƒัŽั‰ะฐั ะบะพะผะฐะฝะดะฐ ะพะทะฝะฐั‡ะฐะตั‚ ะทะฐะฟัƒัะบ "python ./client.py".
 
    command: python ./client.py

    # ะšะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ 'network_mode' ะธัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ะพะฟะธัะฐะฝะธั ั‚ะธะฟะฐ ัะตั‚ะธ.
    # ะขัƒั‚ ะผั‹ ัƒะบะฐะทั‹ะฒะฐะตะผ ั‚ะพ, ั‡ั‚ะพ ะบะพะฝั‚ะตะนะฝะตั€ ะผะพะถะตั‚ ะพะฑั€ะฐั‰ะฐั‚ัŒัั ะบ 'localhost' ะบะพะผะฟัŒัŽั‚ะตั€ะฐ.

    network_mode: host

    # ะšะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ 'depends_on' ะฟะพะทะฒะพะปัะตั‚ ัƒะบะฐะทั‹ะฒะฐั‚ัŒ, ะดะพะปะถะตะฝ ะปะธ ัะตั€ะฒะธั,
    # ะฟั€ะตะถะดะต ั‡ะตะผ ะทะฐะฟัƒัั‚ะธั‚ัŒัั, ะถะดะฐั‚ัŒ, ะบะพะณะดะฐ ะฑัƒะดัƒั‚ ะณะพั‚ะพะฒั‹ ะบ ั€ะฐะฑะพั‚ะต ะดั€ัƒะณะธะต ัะตั€ะฒะธัั‹.
    # ะะฐะผ ะฝัƒะถะฝะพ, ั‡ั‚ะพะฑั‹ ัะตั€ะฒะธั 'client' ะดะพะถะดะฐะปัั ะฑั‹ ะณะพั‚ะพะฒะฝะพัั‚ะธ ะบ ั€ะฐะฑะพั‚ะต ัะตั€ะฒะธัะฐ 'server'.
 
    depends_on:
      - server

โ–5. เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ

เชฎเชพเช‚ เชชเช›เซ€ docker-compose.yml เชฌเชงเซ€ เชœเชฐเซ‚เชฐเซ€ เชธเซ‚เชšเชจเชพเช“ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช…เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชจเซเช‚ เช† เชชเช—เชฒเซเช‚ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชœเซ‡เชตเซเช‚ เชœ เช›เซ‡ docker build, เชชเชฐเช‚เชคเซ เช…เชจเซเชฐเซ‚เชช เช†เชฆเซ‡เชถ เช˜เชฃเซ€ เชธเซ‡เชตเชพเช“ เชฎเชพเชŸเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡:

$ docker-compose build

โ–6. เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชฒเซ‹เช•เชพเชฐเซเชชเชฃ

เชนเชตเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชเชธเซ‡เชฎเซเชฌเชฒ เชฅเชˆ เช—เชฏเซ‹ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชฏ เช†เชตเซ€ เช—เชฏเซ‹ เช›เซ‡. เช…เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชจเซเช‚ เช† เชชเช—เชฒเซเช‚ เชคเซ‡ เชชเช—เชฒเชพเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡ เชœเซ‡เชฎเชพเช‚, เชตเซเชฏเช•เซเชคเชฟเช—เชค เช•เชจเซเชŸเซ‡เชจเชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. docker run:

$ docker-compose up

เช† เช†เชฆเซ‡เชถเชจเซ‹ เช…เชฎเชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชธเชฐเซเชตเชฐเชฎเชพเช‚เชฅเซ€ เช•เซเชฒเชพเชฏเชจเซเชŸ เชฆเซเชตเชพเชฐเชพ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡เชฒ เชŸเซ‡เช•เซเชธเซเชŸ เชŸเชฐเซเชฎเชฟเชจเชฒเชฎเชพเช‚ เชฆเซ‡เช–เชพเชตเชพ เชœเซ‹เชˆเช: Docker-Compose is magic!.

เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ เชคเซ‡เชฎ, เชธเชฐเซเชตเชฐ เช•เชฎเซเชชเซเชฏเซเชŸเชฐ เชชเซ‹เชฐเซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ 1234 เช•เซเชฒเชพเชˆเชจเซเชŸ เชตเชฟเชจเช‚เชคเซ€เช“ เชธเซ‡เชตเชพ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡. เชคเซ‡เชฅเซ€, เชœเซ‹ เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐ เชœเชพเช“ เช›เซ‹ http://localhost:1234/, เชคเซ‡ เชŸเซ‡เช•เซเชธเซเชŸ เชธเชพเชฅเซ‡ เชเช• เชชเซƒเชทเซเช  เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชถเซ‡ Docker-Compose is magic!.

เช‰เชชเชฏเซ‹เช—เซ€ เช†เชฆเซ‡เชถเซ‹

เชšเชพเชฒเซ‹ เช…เชฎเซเช• เช†เชฆเซ‡เชถเซ‹ เชœเซ‹เชˆเช เชœเซ‡ เชคเชฎเชจเซ‡ เชกเซ‹เช•เชฐ เช•เชฎเซเชชเซ‹เช เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฒเชพเช—เซ€ เชถเช•เซ‡.

เช† เช†เชฆเซ‡เชถ เชคเชฎเชจเซ‡ เช†เชฆเซ‡เชถ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเซ‡เชฒ เช•เชจเซเชŸเซ‡เชจเชฐ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเซเชฐเซ‹เชคเซ‹เชจเซ‡ เชฐเซ‹เช•เชตเชพ เช…เชจเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ docker-compose up:

$ docker-compose down

เช† เช†เชฆเซ‡เชถ เชธเซ‡เชตเชพ เชฒเซ‹เช— เช›เชพเชชเซ‡ เช›เซ‡:

$ docker-compose logs -f [service name]

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช† เชซเซ‹เชฐเซเชฎเชฎเชพเช‚ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡: $ docker-compose logs -f [service name].

เช† เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เชธเซ‚เชšเชฟ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

$ docker-compose ps

เช† เช†เชฆเซ‡เชถ เชคเชฎเชจเซ‡ เชšเชพเชฒเชคเชพ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡:

$ docker-compose exec [service name] [command]

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชˆ เชถเช•เซ‡ เช›เซ‡: docker-compose exec server ls.

เช† เช†เชฆเซ‡เชถ เชคเชฎเชจเซ‡ เช›เชฌเซ€เช“เชจเซ€ เชธเซ‚เชšเชฟ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡:

$ docker-compose images

เชชเชฐเชฟเชฃเชพเชฎเซ‹

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

เชชเซเชฐเชฟเชฏ เชตเชพเชšเช•เซ‹! เชถเซเช‚ เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚ เชกเซ‹เช•เชฐ เช•เชฎเซเชชเซ‹เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹?

เชกเซ‹เช•เชฐ เช•เช‚เชชเซ‹เช เชฎเชพเชŸเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ

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

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