เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰ CI/CD เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบเบฑเบš Docker

เบ‚เป‰เบญเบเบ‚เบฝเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบ™เบ—เป‰เบฒเบเบ›เบต 90s. เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™เบกเบฑเบ™เบ‡เปˆเบฒเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ. เบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Apache เปƒเบ™เบšเบฒเบ‡เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ™เบตเป‰เบœเปˆเบฒเบ™ FTP เป‚เบ”เบเบเบฒเบ™เบ‚เบฝเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™: ftp://ftp.example.com. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบชเปˆเบŠเบทเปˆเปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบเบงเปˆเบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰ CI/CD เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบเบฑเบš Docker

เปƒเบ™เบชเบญเบ‡เบ—เบปเบ”เบชเบฐเบงเบฑเบ”เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ™เบฑเป‰เบ™เบกเบฒ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบฒเบ. เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ; เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”. เป€เบŠเบตเบšเป€เบงเบตเบ”เบฝเบงเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบฒเบเบญเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡เบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”, เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบชเบฐเบšเบฑเบšเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบปเปˆเบงเป„เบ›.

เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เบ‚เป‰เบญเบเบ‚เป‰เบญเบเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบดเป€เบชเบ”. เปเบฅเบฐเบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡: เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เป„เบ›เบซเบฒเบชเบฒเบ‚เบฒ. master เปƒเบ™ GitHub. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบงเปˆเบฒเป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบธเปˆเบก Kubernetes เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบซเบผเบทเบ™เปเบฒเปƒเบŠเป‰เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบต Docker Swarm, เบซเบผเบทเบฎเบฑเบเบชเบฒเป€เบฎเบทเบญเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบกเบตเบเบฑเบ, เบ•เบปเบงเปเบ—เบ™เปเบฅเบฐเบ—เบธเบเบ›เบฐเป€เบžเบ”เบญเบทเปˆเบ™เป†. เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™. เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเป€เบ›เบปเป‰เบฒเปเบฒเบเป€เบฎเบฑเบ”เปƒเบซเป‰เบงเบฝเบเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš CI/CD.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เป‚เบ„เบ‡เบเบฒเบ™ Node.js) เปเบฅเบฐเบ—เปˆเบฒเบ™เบขเบฒเบเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ repository เบเบปเบ‡เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบ. เบ„เบดเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบชเบปเบ™เปƒเบˆเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™

เบœเบนเป‰เบญเปˆเบฒเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบฅเบฐเบเบฒเบ™เบ‚เบฝเบ™ Bash scripts. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบฅเบฒเบงเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบŠเบต Travis C.I. ะธ เบชเบนเบ™เบเบฒเบ‡ docker.

เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เบงเปˆเบฒ "tutorial". เบ™เบตเป‰เปเบกเปˆเบ™เป€เบญเบเบฐเบชเบฒเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เปเบฅเบฐเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ‚เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบซเบ™เบถเปˆเบ‡เบœเปˆเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ‚เป‰เบญเบเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡.

เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบ›เบฐโ€‹เบเบฒเบ”โ€‹เบเบฑเบšโ€‹เบชเบฒโ€‹เบ‚เบฒ repository เปƒเบ”โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹ master, เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹:

  • เป‚เบ„เบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™ Travis CI เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.
  • เบซเบ™เปˆเบงเบเบšเปเบฅเบดเบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš end-to-end เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ•เบปเบเบขเบนเปˆเปƒเบ™ master, เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

  • เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบšเบงเบเบเบฑเบš ...
  • เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฅเบฐเบซเบฑเบ”, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.
  • เบ™เบณเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบšเป„เบ›เปƒเบชเปˆ Docker Hub.
  • เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”.
  • เบเบณเบฅเบฑเบ‡เบญเบฑเบšเป‚เบซเบฅเบ”เบฎเบนเบšเบˆเบฒเบ Docker Hub เป„เบ›เบ—เบตเปˆเป€เบŠเบตเบšเป€เบงเบต.
  • เบเบฒเบ™เบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบšเบฑเบ™เบˆเบธเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฎเบนเบšเบžเบฒเบšเปƒเบซเบกเปˆ.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เปเบ—เป‰เป†เบเปˆเบฝเบงเบเบฑเบš Docker, เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ, เบขเปˆเบฒเบเบฑเบ‡เบงเบปเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™.

CI/CD เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบ•เบปเบงเบซเบเปเป‰ CI / CD เบซเบเปเป‰เบกเบฒเบˆเบฒเบ "เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ / เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡."

โ– เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบกเปˆเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบฎเบฑเบ”เบชเบฑเบ™เบเบฒเบเบฑเบšเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ (เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปเบกเปˆเบ™เบชเบฒเบ‚เบฒ. master). เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

โ– เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡

เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบฅเบทเป‰เบญเบเป†เป€เบฅเบทเป‰เบญเบเป†เป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”. เบชเปˆเบงเบ™เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบ•เบปเบงเบซเบเปเป‰ CI/CD เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ–เบทเบเบชเบฐเบเบปเบ”เบญเบญเบเป€เบ›เบฑเบ™ "เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡." เบ™เบตเป‰เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบงเปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบš "เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡", เปเบ•เปˆ "เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡" เบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบขเบทเบ™เบขเบฑเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™.

เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เปเบญเบฑเบšเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบฎเบฝเบ™เบฎเบนเป‰เบ—เบฑเบ‡เปเบปเบ”เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒ TakeNote. เบ™เบตเป‰เปเบกเปˆเบ™เป‚เบ„เบ‡เบเบฒเบ™เป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ—เบตเปˆเบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ, เบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบ. เบ—เปเบฒเบญเบดเบ”เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ” JAMStack- เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹, เบซเบผเบทโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบฒเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹, เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบœเบปเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เบ‚เบญเบ‡โ€‹เบกเบฒเบ”โ€‹เบ•เบฐโ€‹เบ–เบฒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฒเบšโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เปƒเบซเป‰โ€‹. Netlify. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™, เบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบชเปˆเบงเบ™เป€เบŠเบตเบŸเป€เบงเบตเบ‚เบญเบ‡เบกเบฑเบ™, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบเบปเบ™เบฅเบฐเบเบธเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบšเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ Express เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Node.js, เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ React เบซเบ™เป‰เบฒเบ”เบฝเบงเปเบฅเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ API เบ”เป‰เบฒเบ™เป€เบŠเบตเบŸเป€เบงเบตเบ—เบตเปˆเบ›เบญเบ”เป„เบž. เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ™เบตเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบธเบ”เบ—เบฐเบชเบฒเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™ เบ™เบตเป‰ เบ„เบนเปˆเบกเบทเบเบฒเบ™เบžเบดเบชเบนเบ”เบขเบทเบ™เบขเบฑเบ™เปเบšเบš stack เป€เบ•เบฑเบก.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเบฑเบš เป€เบžเบทเปˆเบญเบ™, เบœเบนเป‰เบ—เบตเปˆเป€เบ›เบฑเบ™เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบ”เป‰เบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เปเบฅเบฐเป„เบ”เป‰เบ–เบฒเบกเบฅเบฒเบงเบงเปˆเบฒเบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ•เบฒเบกเบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™. เบฅเบฒเบงเป„เบ”เป‰เปƒเบซเป‰เบ‚เป‰เบญเบเบ„เบดเบ”เป€เบ–เบดเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ„เบงเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐ, เบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰. เบกเบตเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบดเบ”เบงเบดเบ—เบตเบเบฒเบ™เปƒเบŠเป‰ Docker.

Docker

Docker เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆ, เบ‚เบญเบšเปƒเบˆเบเบฑเบšเป€เบ—เบเป‚เบ™เป‚เบฅเบเบตเบšเบฑเบ™เบˆเบธเบšเบฑเบ™เบˆเบธ, เบŠเปˆเบงเบเปƒเบซเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเบฒเบกเบฒเบ”เปเบˆเบเบขเบฒเบเป„เบ”เป‰เบ‡เปˆเบฒเบ, เบ™เปเบฒเปƒเบŠเป‰เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ”เบฝเบงเบเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก Docker เป€เบญเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ—เปเบฒเบญเบดเบ”, เบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบญเบปเบฒเบกเบทเบ‚เบญเบ‡เบ‚เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบš Docker command line tools (CLI). เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ เบ„เบนเปˆเบกเบทเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Docker เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบˆเบฐเปเบˆเป‰เบ‡เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰, เปเบ•เปˆเบˆเบฒเบเบกเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฎเบฝเบ™เบฎเบนเป‰เบงเปˆเบฒเป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เบฒเบงเป‚เบซเบฅเบ” Docker Desktop (เบชเปเบฒเบฅเบฑเบš Mac เบซเบผเบท Windows).

Docker Hub เปเบกเปˆเบ™เบ›เบฐเบกเบฒเบ™เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš GitHub เบชเปเบฒเบฅเบฑเบš git repositories, เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ npm เบชเปเบฒเบฅเบฑเบšเบŠเบธเบ” JavaScript. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบญเบญเบ™เป„เบฅเบ™เปŒเบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเบžเบฒเบš Docker. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ Docker Desktop เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฑเบš Docker, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบชเบญเบ‡เบขเปˆเบฒเบ‡:

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒ Docker CLI เป€เบฎเบฑเบ”เบงเบฝเบเบซเบผเบทเบšเปเปˆเป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบฐเบšเบฑเบš Docker:

docker -v

เบ•เปเปˆเป„เบ›, เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš Docker Hub เป‚เบ”เบเบเบฒเบ™เปƒเบชเปˆเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰ เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบกเบทเปˆเบญเบ–เบทเบเบ–เบฒเบก:

docker login

เป€เบžเบทเปˆเบญเปƒเบŠเป‰ Docker, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ.

โ–เบฎเบนเบš

เบฎเบนเบšเบžเบฒเบšเปเบกเปˆเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ„เป‰เบฒเบเบ„เบท blueprint เบ—เบตเปˆเบกเบตเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเบžเบฒเบŠเบฐเบ™เบฐ. เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฒเบšเบ–เปˆเบฒเบเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเบฒเบกเบฒเบ”เปเบšเปˆเบ‡เบ›เบฑเบ™เบฎเบนเบšเบžเบฒเบšเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ.

# ะ’ั‹ะฒะพะด ัะฒะตะดะตะฝะธะน ะพะฑะพ ะฒัะตั… ะพะฑั€ะฐะทะฐั…
docker images

เบ„เบณเบชเบฑเปˆเบ‡เบ™เบตเป‰เบˆเบฐเบญเบญเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเบชเปˆเบงเบ™เบซเบปเบงเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบšเบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบ”เบฝเบงเบเบฑเบ™ - เบ—เปเบฒเบญเบดเบ”เบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ„เบดเบ”เบ„เปเบฒเป€เบซเบฑเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบญเบญเบเป„เบ”เป‰.

โ– เบšเบฑเบ™เบˆเบธ

เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเปเบกเปˆเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเปเบฅเปˆเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบ”เบฝเบงเบเบฑเบ™เบชเบฐเป€เบซเบกเบต, เป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™: เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเปเบฅเบฐเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ”เบฝเบงเบเบฑเบ™. เบˆเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบ”เบฝเบงเบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

# ะŸะตั€ะตั‡ะธัะปะตะฝะธะต ะฒัะตั… ะบะพะฝั‚ะตะนะฝะตั€ะพะฒ
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

โ–เปเบ—เบฑเบ

เปเบ—เบฑเบเปเบกเปˆเบ™เบ•เบปเบงเบŠเบตเป‰เบšเบญเบเบชเบฐเบšเบฑเบšเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš.

โ– เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป„เบงเบ•เปเปˆเบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡ Docker

เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡เบšเบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡ Docker เบ—เบตเปˆเปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›.

เบ—เบตเบกเบ‡เบฒเบ™

เบชเบฐเบžเบฒเบšเบเบฒเบ™

เบœเบปเบ™เบเบฐเบ—เบปเบš

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ docker

เบฎเบนเบšเบžเบฒเบš

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบˆเบฒเบ Dockerfile

docker tag

เบฎเบนเบšเบžเบฒเบš

เบเบฒเบ™เปเบ—เบฑเบเบฎเบนเบšเบžเบฒเบš

docker images

เบฎเบนเบšเบžเบฒเบš

เบฅเบฒเบเบŠเบทเปˆเบฎเบนเบšเบžเบฒเบš

docker run

Container

เปเบฅเปˆเบ™เบžเบฒเบŠเบฐเบ™เบฐเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฎเบนเบšเบžเบฒเบš

docker push

เบฎเบนเบšเบžเบฒเบš

เบเบณเบฅเบฑเบ‡เบญเบฑเบšเป‚เบซเบผเบ”เบฎเบนเบšเปƒเบชเปˆเบ—เบฐเบšเบฝเบ™

docker เบ”เบถเบ‡

เบฎเบนเบšเบžเบฒเบš

เบเบณเบฅเบฑเบ‡เป‚เบซเบฅเบ”เบฎเบนเบšเบžเบฒเบšเบˆเบฒเบเบฅเบตเบˆเบดเบ”เบŠเบต

docker ps

Container

เบฅเบฒเบเบเบฒเบ™เบšเบฑเบ™เบˆเบธ

docker เบฅเบฐเบšเบปเบš prun

เบฎเบนเบšเบžเบฒเบš/เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต

เบเบฒเบ™เป€เบญเบปเบฒเบžเบฒเบŠเบฐเบ™เบฐเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เปเบฅเบฐเบฎเบนเบšเบžเบฒเบš

โ–Dockerfile

เบ‚เป‰เบญเบเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”เปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบ‚เป‰เบญเบเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Webpack เบ—เบตเปˆเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ React เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเปเบฅเป‰เบง. เบ•เปเปˆเป„เบ›, เบ‚เป‰เบญเบเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ Node.js เปƒเบ™เบžเบญเบ” 5000. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

npm i         # ัƒัั‚ะฐะฝะพะฒะบะฐ ะทะฐะฒะธัะธะผะพัั‚ะตะน
npm run build # ัะฑะพั€ะบะฐ React-ะฟั€ะธะปะพะถะตะฝะธั
npm run start # ะทะฐะฟัƒัะบ Node-ัะตั€ะฒะตั€ะฐ

เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰. เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Node เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบˆเบฐเป€เบฎเบฑเบ”.

เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เปƒเบซเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ Docker. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป‚เบ”เบเบœเปˆเบฒเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ Dockerfile, เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบฎเบฒเบเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™. เป„เบŸเบฅเปŒเบ™เบตเป‰, เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”, เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰.

เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบžเบฝเบ‡เปเบ•เปˆเบญเบฐเบ—เบดเบšเบฒเบ, เบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบดเป€เบชเบ”, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰:

  • เบˆเบฒเบ โ€” เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹. เบกเบฑเบ™โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เบฎเบนเบšโ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบšเบฑเบ™โ€‹เบˆเบธโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹.
  • COPY โ€” เบเบฒเบ™เบชเบณเป€เบ™เบปเบฒเป„เบŸเบฅเปŒเบˆเบฒเบเปเบซเบผเปˆเบ‡เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เป„เบ›เปƒเบชเปˆเบ–เบฑเบ‡.
  • WORKDIR โ€” เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹.
  • RUN - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡.
  • เบญเบฐเบ—เบดเบšเบฒเบ - เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ Port.
  • ENTRYPOINT - เบเบฒเบ™โ€‹เบŠเบตเป‰โ€‹เบšเบญเบโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹.

Dockerfile เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

# ะ—ะฐะณั€ัƒะทะธั‚ัŒ ะฑะฐะทะพะฒั‹ะน ะพะฑั€ะฐะท
FROM node:12-alpine

# ะกะบะพะฟะธั€ะพะฒะฐั‚ัŒ ั„ะฐะนะปั‹ ะธะท ั‚ะตะบัƒั‰ะตะน ะดะธั€ะตะบั‚ะพั€ะธะธ ะฒ ะดะธั€ะตะบั‚ะพั€ะธัŽ app/
COPY . app/

# ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ app/ ะฒ ั€ะพะปะธ ั€ะฐะฑะพั‡ะตะน ะดะธั€ะตะบั‚ะพั€ะธะธ
WORKDIR app/

# ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะทะฐะฒะธัะธะผะพัั‚ะธ (ะบะพะผะฐะฝะดะฐ npm ci ะฟะพั…ะพะถะฐ npm i, ะฝะพ ะธัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ะฐะฒั‚ะพะผะฐั‚ะธะทะธั€ะพะฒะฐะฝะฝั‹ั… ัะฑะพั€ะพะบ)
RUN npm ci --only-production

# ะกะพะฑั€ะฐั‚ัŒ ะบะปะธะตะฝั‚ัะบะพะต React-ะฟั€ะธะปะพะถะตะฝะธะต ะดะปั ะฟั€ะพะดะฐะบัˆะฝะฐ
RUN npm run build

# ะŸั€ะพัะปัƒัˆะธะฒะฐั‚ัŒ ัƒะบะฐะทะฐะฝะฝั‹ะน ะฟะพั€ั‚
EXPOSE 5000

# ะ—ะฐะฟัƒัั‚ะธั‚ัŒ Node-ัะตั€ะฒะตั€
ENTRYPOINT npm run start

เบญเบตเบ‡เบ•เบฒเบกเบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบ, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™ (เป€เบŠเบฑเปˆเบ™ Node Alpine Linux) เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบ”เป‰เบงเบเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบซเบ™เบฒเปเบซเบ™เป‰เบ™เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบ‚เบปเบฒเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบšเบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ„เบฒเบ”เบซเบงเบฑเบ‡.

โ– เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹, เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เปเบฅเปˆเบ™โ€‹เบžเบฒโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹

เบเบฒเบ™เบ›เบฐเบเบญเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธเปเบกเปˆเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบต Dockerfile, เบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบเบนเป‰เบฎเบนเบšเบžเบฒเบšเป„เบ› Docker Hub, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

โ– เบ›เบฐเบเบญเบš

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบ—เปˆเบฒเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบเบฑเบšเบฅเบงเบšเบฅเบงเบก เบฎเบนเบšเบžเบฒเบš, เบเบฒเบ™เบฅเบฐเบšเบธเบŠเบทเปˆเปเบฅเบฐ, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เปเบ—เบฑเบ (เบ–เป‰เบฒเปเบ—เบฑเบเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธ, เบฅเบฐเบšเบปเบšเบˆเบฐเบเปเบฒเบ™เบปเบ”เปเบ—เบฑเบเปƒเบซเป‰เบฎเบนเบšเบžเบฒเบšเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. latest).

# ะกะฑะพั€ะบะฐ ะพะฑั€ะฐะทะฐ
docker build -t <image>:<tag> .

เบซเบผเบฑเบ‡เบˆเบฒเบเปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡ Docker เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš.

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...ะฒั‹ะฟะพะปะฝะตะฝะธะต ัั‚ะฐะฟะพะฒ ัะฑะพั€ะบะธ...
Successfully built 123456789123
Successfully tagged <image>:<tag>

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบต - เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบกเบต. เป€เบกเบทเปˆเบญเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ docker images เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ.

REPOSITORY          TAG               IMAGE ID            CREATED              SIZE
<image>             latest            123456789123        About a minute ago   x.xxGB

โ– เป€เบ›เบตเบ”เบ•เบปเบง

เบฎเบนเบšเบžเบฒเบšเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฑเบ™เบˆเบธเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบกเบฑเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบˆเบธเบขเบนเปˆ localhost:5000, เบ‚เป‰เบญเบ, เบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบŠเป‰เบฒเบเบ‚เบญเบ‡เบ„เบนเปˆ 5000:5000 เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡ 5000. เบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบ‚เบงเบฒเปเบกเปˆเบ™เบ—เปˆเบฒเป€เบฎเบทเบญเบšเบฑเบ™เบˆเบธ.

# ะ—ะฐะฟัƒัะบ ั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะตะผ ะปะพะบะฐะปัŒะฝะพะณะพ ะฟะพั€ั‚ะฐ 5000 ะธ ะฟะพั€ั‚ะฐ ะบะพะฝั‚ะตะนะฝะตั€ะฐ 5000
docker run -p 5000:5000 <image>:<tag>

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบšเบฑเบ™เบˆเบธเบ–เบทเบเบชเป‰เบฒเบ‡เปเบฅเบฐเปเบฅเปˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ docker ps เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบˆเบธเบ™เบตเป‰ (เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ docker ps -a, เป€เบŠเบดเปˆเบ‡เบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบˆเบธเบ—เบฑเบ‡เบซเบกเบปเบ”, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปเบฅเปˆเบ™เบซเบ™เบถเปˆเบ‡).

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS                    NAMES
987654321234        <image>             "/bin/sh -c 'npm runโ€ฆ"   6 seconds ago        Up 6 seconds                0.0.0.0:5000->5000/tcp   stoic_darwin

เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบ•เบญเบ™เบ™เบตเป‰เป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆ localhost:5000 โ€” เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เปเบฅเปˆเบ™โ€‹เบ—เบตเปˆโ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹เบซเบ™เป‰เบฒโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบตเปˆโ€‹เปเบฅเปˆเบ™โ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เป„เบ”เป‰โ€‹.

โ– เบเบฒเบ™เปเบ—เบฑเบ เปเบฅเบฐเป€เบœเบตเบเปเบœเปˆ

เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบฅเบ”เบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰เบˆเบฒเบ Docker Hub. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปเบฒเบญเบดเบ”เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡ repository เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Docker Hub. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบฎเบนเบšเบžเบฒเบš. เบฎเบนเบšเบžเบฒเบšเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เบŠเบทเปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เบŠเบทเปˆเบ‚เบญเบ‡เบกเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰ Docker Hub เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป‚เบ”เบเบŠเบทเปˆเบ‚เบญเบ‡ repository เป„เบ”เป‰. เป‚เบ„เบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ”เป†เบชเบฒเบกเบฒเบ”เบ–เบทเบเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบŠเบทเปˆ. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบฎเบนเบšเบžเบฒเบšเป‚เบ”เบเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบกเบตเบŠเบทเปˆเปƒเบซเบกเปˆเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ docker push เป€เบžเบทเปˆเบญเบŠเบธเบเบ”เบฑเบ™เบกเบฑเบ™เป„เบ›เบซเบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ Docker Hub.

docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>

# ะะฐ ะฟั€ะฐะบั‚ะธะบะต ัั‚ะพ ะผะพะถะตั‚ ะฒั‹ะณะปัะดะตั‚ัŒ, ะฝะฐะฟั€ะธะผะตั€, ั‚ะฐะบ:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0

เบ–เป‰เบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ”เบต, เบฎเบนเบšเบžเบฒเบšเบˆเบฐเบกเบตเบขเบนเปˆเปƒเบ™ Docker Hub เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ”เป‰เบ‡เปˆเบฒเบเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบทเป‚เบญเบ™เป„เบ›เบซเบฒเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบทเปˆเบ™เป†.

เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเบงเบ”เบชเบญเบšเบงเปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ Docker container, เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบญเบฑเบšเป‚เบซเบฅเบ”เบ–เบฑเบ‡เปƒเบชเปˆ Docker Hub เปเบฅเป‰เบง. เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ™เบตเป‰โ€‹เบซเบกเบฒเบโ€‹เบ„เบงเบฒเบกโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบ„เบทเบšโ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ”เบตโ€‹เบซเบผเบฒเบโ€‹เป„เบ›โ€‹เบชเบนเปˆโ€‹เบเบฒเบ™โ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบเป‰เป„เบ‚เบชเบญเบ‡เบ„เปเบฒเบ–เบฒเบกเป€เบžเบตเปˆเบกเป€เบ•เบตเบก:

  • เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบท CI เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹.
  • เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ Travis C.I.. เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ - DitigalOcean.

เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบญเบทเปˆเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ Travis CI, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ CircleCI เบซเบผเบท Github Actions. เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ DigitalOcean - AWS เบซเบผเบท Linode.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Travis CI, เปเบฅเบฐเบ‚เป‰เบญเบเบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ™เบตเป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบชเบฑเป‰เบ™เป†เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบเบฐเบเบฝเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ.

Travis C.I.

Travis CI เป€เบ›เบฑเบ™โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบขเบฒเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Travis CI, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเปเบ•เปˆเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เปเบฅเบฐเบ™เบตเป‰เบˆเบฐเบšเปเปˆเบ™เปเบฒเป€เบญเบปเบฒเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบ. เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเบเบงเบกเป€เบญเบปเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป€เบˆเบปเป‰เบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเปƒเบŠเป‰ Travis CI. เบšเปเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเป€เบฅเบทเบญเบ Travis CI, CircleCI, Jenkins, เบซเบผเบทเบญเบฑเบ™เบญเบทเปˆเบ™, เบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡.

เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ Travis CI, เปƒเบซเป‰เป„เบ›เบ—เบตเปˆ เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ เปเบฅเบฐเบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบต. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ Travis CI เบเบฑเบšเบšเบฑเบ™เบŠเบต GitHub เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เป€เบกเบทเปˆเบญเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบš, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบกเบฑเบ™. (เบ‚เป‰เบญเบเปƒเบŠเป‰ GitHub, เปเบ•เปˆเบ‚เป‰เบญเบเปเบ™เปˆเปƒเบˆเบงเปˆเบฒ Travis CI เบชเบฒเบกเบฒเบ”เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš BitBucket, เปเบฅเบฐ GitLab, เปเบฅเบฐเบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบญเบทเปˆเบ™เป†).

เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เบตเปˆ Travis CI เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบŠเบตเบšเป€เบงเบตเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง, เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบ›เบฑเบšเปƒเบŠเป‰เบชเบฒเบ‚เบฒเบ‚เบญเบ‡ repository เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™.

โ– เบงเบปเบ‡เบˆเบญเบ™เบŠเบตเบงเบดเบ”เบงเบฝเบ

เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Travis CI เป€เบญเบตเป‰เบ™เบงเปˆเบฒ .travis.yml เปเบฅเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เปƒเบ™เบฅเบฐเบšเบปเบšเบฎเบฒเบเป‚เบ„เบ‡เบเบฒเบ™, เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™ เบงเบปเบ‡โ€‹เบˆเบญเบ™โ€‹เบŠเบตโ€‹เบงเบดเบ” เบงเบฝเบเบ‡เบฒเบ™. เป€เบซเบ”เบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™:

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success ะธะปะธ after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

โ– เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹

เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ Travis CI เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบ‚เป‰เบญเบเป€เบฅเบทเบญเบ Node 12 เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเปเบฅเบฐเบšเบญเบเปƒเบซเป‰เบฅเบฐเบšเบปเบšเบ•เบดเบ”เบ•เบฑเป‰เบ‡ dependencies เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ Docker.

เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ .travis.yml, เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบเบฑเบšเบ—เบธเบเบชเบฒเบ‚เบฒเบ‚เบญเบ‡ repository, เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เป€เบ›เบฑเบ™เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ—เบปเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™ repository. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เป„เบ›เบซเบฒเบชเบฒเบ‚เบฒ. master, เปเบฅเบฐเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบ—เปเบฒเบฅเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™. เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบปเปˆเบงเป‚เบฅเบเบ™เบตเป‰, เบ‚เป‰เบญเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปเบฅเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ Webpack dev เปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡ (เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ), เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเบฐเปเบ”เบ‡เบ›เป‰เบฒเบเบ—เบตเปˆเบŠเบตเป‰เบšเบญเบเป€เบ–เบดเบ‡เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ—เบตเปˆเบ™เบตเป‰ เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเบฑเป‰เบ™เป†เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Jest, Travis CI เปเบฅเบฐ Coveralls เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบเปเบฒเปเบฅเบฐเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ .travis.yml:

# ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ัะทั‹ะบ
language: node_js

# ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะฒะตั€ัะธัŽ Node.js
node_js:
  - '12'

services:
  # ะ˜ัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบะพะผะฐะฝะดะฝัƒัŽ ัั‚ั€ะพะบัƒ Docker
  - docker

install:
  # ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะทะฐะฒะธัะธะผะพัั‚ะธ ะดะปั ั‚ะตัั‚ะพะฒ
  - npm ci

before_script:
  # ะ—ะฐะฟัƒัั‚ะธั‚ัŒ ัะตั€ะฒะตั€ ะธ ะบะปะธะตะฝั‚ ะดะปั ั‚ะตัั‚ะพะฒ
  - npm run dev &

script:
  # ะ—ะฐะฟัƒัั‚ะธั‚ัŒ ั‚ะตัั‚ั‹
  - npm run test

เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบชเบฒเบ‚เบฒเบ‚เบญเบ‡ repository เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบถเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡.

โ– เบเบฒเบ™เบ™เบณเปƒเบŠเป‰

เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบˆเบฒเบเบชเบฒเบ‚เบฒ master, เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบฅเบฐเบšเบปเบšเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™. เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ, เบ‚เป‰เบญเบเบขเบฒเบเบˆเบฐเป€เบ•เบทเบญเบ™เป€เบˆเบปเป‰เบฒเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบกเบตเบชเบฐเบ„เบดเบšเบ•เบปเบงเบˆเบดเบ‡เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™.

deploy:
  # ะกะพะฑั€ะฐั‚ัŒ Docker-ะบะพะฝั‚ะตะนะฝะตั€ ะธ ะพั‚ะฟั€ะฐะฒะธั‚ัŒ ะตะณะพ ะฝะฐ Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

script เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบชเบญเบ‡เบขเปˆเบฒเบ‡:

  • เบเปเปˆเบชเป‰เบฒเบ‡, เปเบ—เบฑเบเปเบฅเบฐเบชเบปเปˆเบ‡เบฎเบนเบšเบžเบฒเบšเป„เบ›เบซเบฒ Docker Hub เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท CI (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, Travis CI).
  • เบเบฒเบ™เป‚เบซเบผเบ”เบฎเบนเบšเบžเบฒเบšเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบเบฒเบ™เบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบšเบฑเบ™เบˆเบธเป€เบเบปเปˆเบฒเปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป€เบงเบ—เบต DigitalOcean).

เบ—เปเบฒเบญเบดเบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, tagging, เปเบฅเบฐเบŠเบธเบเบเบนเป‰เบฎเบนเบšเบžเบฒเบšเบเบฑเบš Docker Hub. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เปเบฅเป‰เบงเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบเบปเบเป€เบงเบฑเป‰เบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ” tags เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบเบฑเบšเบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบ‚เป‰เบญเบเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบชเบฐเบ„เบดเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡, เป€เบŠเบฑเปˆเบ™: เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบเบฒเบ™เบ•เบดเบ”เปเบ—เบฑเบ, เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš, เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” SSH key, เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ SSH. เปเบ•เปˆเป‚เบŠเบเบ”เบตเบ—เบตเปˆเปเบŸเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเบ”เบตเบซเบผเบฒเบเบเบฑเบš bash, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†. เบฅเบฒเบงเบŠเปˆเบงเบเบ‚เป‰เบญเบเบ‚เบฝเบ™เบšเบปเบ”เบ™เบตเป‰.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡ script เปเบกเปˆเบ™เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เบฎเบนเบšเบžเบฒเบšเป„เบ›เบเบฑเบ‡ Docker Hub. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”. เป‚เบ„เบ‡เบเบฒเบ™ tagging เบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบฅเบงเบก git hash เปเบฅเบฐ git tag, เบ–เป‰เบฒเบกเบต. เบ™เบตเป‰เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเปเบ—เบฑเบเปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบฅเบฐเบšเบธเบเบฒเบ™เบ›เบฐเบเบญเบšเบ—เบตเปˆเบกเบฑเบ™เบญเบตเบ‡เปƒเบชเปˆ. DOCKER_USERNAME ะธ DOCKER_PASSWORD เปเบกเปˆเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš Travis CI. Travis CI เบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบฅเบฐเบญเบฝเบ”เบญเปˆเบญเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบกเบฑเบ™เบ•เบปเบเบขเบนเปˆเปƒเบ™เบกเบทเบœเบดเบ”.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡ script deploy.sh.

#!/bin/sh
set -e # ะžัั‚ะฐะฝะพะฒะธั‚ัŒ ัะบั€ะธะฟั‚ ะฟั€ะธ ะฝะฐะปะธั‡ะธะธ ะพัˆะธะฑะพะบ

IMAGE="<username>/<repository>"                             # ะžะฑั€ะฐะท Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-ั…ััˆ ะธ ั‚ะตะณะธ

# ะกะฑะพั€ะบะฐ ะธ ั‚ะตะณะธั€ะพะฒะฐะฝะธะต ะพะฑั€ะฐะทะฐ
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest

# ะ’ั…ะพะด ะฒ Docker Hub ะธ ะฒั‹ะณั€ัƒะทะบะฐ ะพะฑั€ะฐะทะฐ
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}

เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบฒเบเบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบชเบฐเบ„เบดเบšเบˆเบฐเป€เบ›เบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบกเบฑเบ™เบ–เบทเบเบˆเบฑเบ”เบ‚เบทเป‰เบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ‚เป‰เบญเบเปƒเบŠเป‰ Digital Ocean, เบ‚เป‰เบญเบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ doctl. เป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš AWS, เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ aws, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบตเบšเป€เบงเบตเบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเปเบฒเบ™เบปเบ” droplet เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™. เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบฅเบฐเบšเบปเบšเบ—เบตเปˆเบ‚เป‰เบญเบเป€เบฅเบทเบญเบเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Docker เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบงเปเบฅเบฐเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Docker เบ„เบนเปˆเบกเบทเบ„เบฑเป‰เบ‡เบ”เบฝเบง. เบ‚เป‰เบญเบเปƒเบŠเป‰ Ubuntu 18.04 เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Docker, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ Ubuntu เบ„เบทเบเบฑเบ™, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบก เบ™เบตเป‰ เบ„เบนเปˆโ€‹เบกเบทโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบฐเป€เบžเบฒเบฐเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ•เปˆเบฒเบ‡เป†. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเปƒเบซเป‰เปเบœเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ SSH เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเป„เบ›เปƒเบŠเป‰:

  • เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™เปเบฅเบฐเบขเบธเบ”เบกเบฑเบ™.
  • เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบ›เบตเบ”เบ•เบปเบงเบšเบฑเบ™เบˆเบธเปƒเบซเบกเปˆเปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡.
  • เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบžเบญเบ”เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบ›เบฑเบ™ 80 - เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เป€เบŠเบฑเปˆเบ™โ€‹:โ€‹ example.com, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบฅเบฐเบšเบธเบžเบญเบ”, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ—เบตเปˆเบขเบนเปˆเป€เบŠเบฑเปˆเบ™ example.com:5000.
  • เบชเบธเบ”เบ—เป‰เบฒเบ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบถเบšเบ–เบฑเบ‡เปเบฅเบฐเบฎเบนเบšเบžเบฒเบšเป€เบเบปเปˆเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเบทเบšเบ•เปเปˆเบ‚เบญเบ‡ script เป„เบ”เป‰.

# ะะฐะนั‚ะธ ID ั€ะฐะฑะพั‚ะฐัŽั‰ะตะณะพ ะบะพะฝั‚ะตะนะฝะตั€ะฐ
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)

# ะžัั‚ะฐะฝะพะฒะธั‚ัŒ ัั‚ะฐั€ั‹ะน ะบะพะฝั‚ะตะนะฝะตั€, ะทะฐะฟัƒัั‚ะธั‚ัŒ ะฝะพะฒั‹ะน, ะพั‡ะธัั‚ะธั‚ัŒ ัะธัั‚ะตะผัƒ
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f

เบšเบฒเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เบงเบ™เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆ

เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบงเปˆเบฒเป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบœเปˆเบฒเบ™ SSH เบˆเบฒเบ Travis CI, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ—เบตเปˆเบˆเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบทเบšเบ•เปเปˆเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเป‰เบญเบ™เบงเปˆเบฒเบฅเบฐเบšเบปเบšเบˆเบฐเบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบงเปˆเบฒเบเบฐเปเบˆเบชเบฐเบ•เบฃเบดเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปƒเบ™ base64 เป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบกเบฑเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบชเบฐเบ”เบงเบเปเบฅเบฐเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเบ‚เบฝเบ™เปƒเบชเปˆเป„เบŸเบฅเปŒ known_hosts เป€เบžเบทเปˆเบญเบเปเบฒเบˆเบฑเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

echo <public key> | base64 # ะฒั‹ะฒะพะดะธั‚ <ะฟัƒะฑะปะธั‡ะฝั‹ะน ะบะปัŽั‡, ะทะฐะบะพะดะธั€ะพะฒะฐะฝะฝั‹ะน ะฒ base64>

เปƒเบ™เบ—เบฒเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64

เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เบœเบฐเบฅเบดเบ” - เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” base64:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡

install:
  - echo < ะฟัƒะฑะปะธั‡ะฝั‹ะน ะบะปัŽั‡, ะทะฐะบะพะดะธั€ะพะฒะฐะฝะฝั‹ะน ะฒ base64> | base64 -d >> $HOME/.ssh/known_hosts

เบงเบดเบ—เบตเบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบเบฑเบšเบเบฐเปเบˆเบชเปˆเบงเบ™เบ•เบปเบงเปƒเบ™เป€เบงเบฅเบฒเบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฐเปเบˆเบชเปˆเบงเบ™เบ•เบปเบงเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ„เบต, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบžเบขเบนเปˆเปƒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Travis CI เปเบฅเบฐเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก.

เบชเบดเปˆเบ‡เบญเบทเปˆเบ™เบ—เบตเปˆเบ„เบงเบ™เบชเบฑเบ‡เป€เบเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ script deployment เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบ”เบฝเบง, เบ•เบปเบงเบขเปˆเบฒเบ‡ - เบเบฑเบš doctl. เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

doctl compute ssh <droplet> --ssh-command "ะฒัะต ะบะพะผะฐะฝะดั‹ ะฑัƒะดัƒั‚ ะทะดะตััŒ && ะทะดะตััŒ"

TLS/SSL เปเบฅเบฐเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”

เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบšเบฑเบ™เบซเบฒเบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบ‚เป‰เบญเบเบžเบปเบšเปเบกเปˆเบ™เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเปเปˆเบกเบต SSL. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ‚เป‰เบญเบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ Node.js, เป€เบžเบทเปˆเบญเบšเบฑเบ‡เบ„เบฑเบš เป€เบฎเบฑเบ”เบงเบฝเบ reverse proxy Nginx เปเบฅเบฐ Let's Encrypt, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ tinker เบซเบผเบฒเบ.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเปเปˆเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ SSL เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบชเป‰เบฒเบ‡เบ•เบปเบงเบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™ DNS. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ DigitalOcean, เบเบฒเบ™เบชเป‰เบฒเบ‡เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบเบฒเบ™เบฅเบปเบ‡เบ™เบฒเบกเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ•เปเปˆเบญเบฒเบเบธเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เบ•เบปเบงเบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เบŸเบฃเบตเปเบฅเบฐเป„เบง. เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบกเบตเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ SSL เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบฒเบเบญเบฑเบ™เบ—เบตเปˆเปเบฅเปˆเบ™เบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡เบ•เบปเบงเบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบšเปเปˆ "เบ„เบดเบ”" เบเปˆเบฝเบงเบเบฑเบš SSL เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เปƒเบŠเป‰เบžเบญเบ”เป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด. 80. เบชเบฐเบ™เบฑเป‰เบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡ SSL เปƒเบ™เบ•เบปเบงเบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบซเบผเบฒเบเปเบฅเบฐเบชเบฐเบ”เบงเบเบเบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ SSL.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบดเบ”เบžเบญเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบฒเป€เบ‚เบปเป‰เบฒ - เบเบปเบเป€เบงเบฑเป‰เบ™เบžเบญเบ” 80, เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™เบเบฑเบš load balancer, เปเบฅเบฐเบžเบญเบ” 22 เบชเปเบฒเบฅเบฑเบš SSH. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปƒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเบเบปเบ‡เปƒเบ™เบžเบญเบ”เปƒเบ”เป†เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบชเบญเบ‡เบ™เบตเป‰เบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰, เบ—เบฑเบ‡เป€เบงเบ—เบต Docker เบซเบผเบทเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰ CI / CD เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบขเป‰เบฒเบ™เบญเบตเบเบ•เปเปˆเป„เบ›. เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, เปƒเบ™เป„เบฅเบเบฐเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ—เบปเบ”เบชเบญเบšเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบเบฒเบ™เบœเบฐเบฅเบดเบ”เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบˆเบฐเบ–เบทเบเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบเบฑเบ‡เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบ, เปเบฅเบฐเบ‚เป‰เบญเบเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบถเป‰เบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เปƒเบ”เป†เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เบเบฐเบฅเบธเบ™เบฒเปเบˆเป‰เบ‡เปƒเบซเป‰เบ‚เป‰เบญเบเบ—เบฒเบš. เบเบฑเบšเบ‚เป‰เบญเบ เบฎเบนเป‰. เบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เป„เบ”เป‰เบŠเปˆเบงเบเป€เบˆเบปเป‰เบฒเปƒเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบŠเบทเปˆเบญโ€‹เบงเปˆเบฒโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เบกเบฑเบ™โ€‹, เบ—เปˆเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฝเบ™โ€‹เบฎเบนเป‰โ€‹เบซเบผเบฒเบโ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ—เบตเปˆโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบฎเบฝเบ™โ€‹เบฎเบนเป‰โ€‹เปƒเบ™โ€‹เบ‚เบฐโ€‹เบ™เบฐโ€‹เบ—เบตเปˆโ€‹เบ„เบดเบ”โ€‹เบญเบญเบโ€‹เบ—เบธเบโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบธเบโ€‹เบขเปˆเบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เป€เบงเบปเป‰เบฒโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบกเบฑเบ™โ€‹.

PS เปƒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ เบ•เบฐเบซเบผเบฒเบ” เบกเบตเบฎเบนเบšเบžเบฒเบš Docker, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบ™เบซเบ™เบถเปˆเบ‡เบ„เบฅเบดเบ. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบžเบฒโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹เบ—เบตเปˆโ€‹ VPS. เบฅเบนเบเบ„เป‰เบฒเปƒเบซเบกเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เปƒเบซเป‰ 3 เบกเบทเป‰เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบŸเบฃเบต.

เบ—เปˆเบฒเบ™เบœเบนเป‰เบญเปˆเบฒเบ™เบ—เบตเปˆเบฎเบฑเบเปเบžเบ‡! เป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เป€เบ—เบเป‚เบ™เป‚เบฅเบเบต CI/CD เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบšเป?

เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰ CI/CD เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบเบฑเบš Docker

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™