ืฉืึทืคึฟืŸ ืึท ืกื™ / ืกื™ ืงื™ื™ื˜ ืื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื ื’ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ืึธืงืงืขืจ

ืื™ืš ื’ืขืฉืจื™ื‘ืŸ ืžื™ื™ืŸ ืขืจืฉื˜ืขืจ ื•ื•ืขื‘ืกื™ื˜ืขืก ืื™ืŸ ื“ื™ ืฉืคึผืขื˜ 90 ืก. ืฆื•ืจื™ืง ื“ืขืžืึธืœื˜ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื–ื™ื™ืขืจ ื’ืจื™ื ื’ ืฆื• ืฉื˜ืขืœืŸ ื–ื™ื™ ืื™ืŸ ืืจื‘ืขื˜ืŸ ืกื“ืจ. ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึทืŸ ืึทืคึผืึทื˜ืฉื™ ืกืขืจื•ื•ืขืจ ืื•ื™ืฃ ืขื˜ืœืขื›ืข ืฉืขืจื“ ื”ืึธืกื˜ื™ื ื’, ืื™ืจ ืงืขืŸ ืงืœืึธืฅ ืื™ืŸ ื“ืขื ืกืขืจื•ื•ืขืจ ื“ื•ืจืš ืคื˜ืคึผ ื“ื•ืจืš ืฉืจื™ื™ื‘ืŸ ืขืคึผืขืก ื•ื•ื™ ftp://ftp.example.com. ื“ืขืจื ืึธืš ืื™ืจ ื”ืึธื‘ืŸ ืฆื• ืึทืจื™ื™ึทืŸ ื“ื™ื™ืŸ ื ืึธืžืขืŸ ืื•ืŸ ืคึผืึทืจืึธืœ ืื•ืŸ ืฆื•ืคึฟืขืœื™ืงืขืจ ื“ื™ ื˜ืขืงืขืก ืฆื• ื“ื™ ืกืขืจื•ื•ืขืจ. ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืคืึทืจืฉื™ื“ืขื ืข ืฆื™ื™ื˜ืŸ, ืึทืœืฅ ืื™ื– ื’ืขื•ื•ืขืŸ ืคึผืฉื•ื˜ ื“ืขืžืึธืœื˜ ื•ื•ื™ ืื™ืฆื˜.

ืฉืึทืคึฟืŸ ืึท ืกื™ / ืกื™ ืงื™ื™ื˜ ืื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื ื’ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ืึธืงืงืขืจ

ืื™ืŸ ื“ื™ ืฆื•ื•ื™ื™ ื™ืึธืจืฆืขื ื“ืœื™ื ื’ ื–ื™ื ื˜ ื“ืขืžืึธืœื˜, ืึทืœืฅ ื”ืื˜ ื’ืขื‘ื™ื˜ืŸ ืึท ืคึผืœืึทืฅ. ื•ื•ืขื‘ืกื™ื˜ืขืก ื”ืึธื‘ืŸ ื•ื•ืขืจืŸ ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜; ื–ื™ื™ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืคืืจื–ืืžืœื˜ ืื™ื™ื“ืขืจ ื–ื™ื™ ื–ืขื ืขืŸ ื‘ืืคืจื™ื™ื˜ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข. ืื™ื™ืŸ ืกืขืจื•ื•ืขืจ ืื™ื– ื’ืขื•ื•ืืจืŸ ืคื™ืœืข ืกืขืจื•ื•ืขืจืก ืคืœื™ืกื ื“ื™ืง ื”ื™ื ื˜ืขืจ ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจื–, ืื•ืŸ ื“ื™ ื ื•ืฆืŸ ืคื•ืŸ ื•ื•ืขืจืกื™ืข ืงืึธื ื˜ืจืึธืœ ืกื™ืกื˜ืขืžืขืŸ ื’ืขื•ื•ืืจืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš.

ืคึฟืึทืจ ืžื™ื™ืŸ ืคึผืขืจื–ืขื ืœืขืš ืคึผืจื•ื™ืขืงื˜ ืื™ืš ื’ืขื”ืื˜ ืึท ืกืคึผืขืฆื™ืขืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ืื•ืŸ ืื™ืš ื’ืขื•ื•ืื•ืกื˜ ืึทื– ืื™ืš ื“ืืจืฃ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ื“ืขื ืคึผืœืึทืฅ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ื“ื•ืจืš ืคึผืขืจืคืึธืจืžื™ื ื’ ื‘ืœื•ื™ื– ืื™ื™ืŸ ืงืึทืžืฃ: ืฉืจื™ื™ื‘ืŸ ืงืึธื“ ืฆื• ืึท ืฆื•ื•ื™ื™ึทื’ master ืื•ื™ืฃ GitHub. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ืื™ืš ื’ืขื•ื•ืื•ืกื˜ ืึทื– ืื™ืŸ ืกื“ืจ ืฆื• ืขื ืฉื•ืจ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ืžื™ื™ืŸ ืงืœื™ื™ืŸ ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืื™ืš ื˜ืึธืŸ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ืคื™ืจืŸ ืึท ืจื™ื–ื™ืง Kubernetes ืงื ื•ื™ืœ, ืึธื“ืขืจ ื ื•ืฆืŸ Docker Swarm ื˜ืขื›ื ืึธืœืึธื’ื™ืข, ืึธื“ืขืจ ื”ืึทืœื˜ืŸ ืึท ืคืœื™ื˜ ืคื•ืŸ ืกืขืจื•ื•ืขืจืก ืžื™ื˜ ืคึผืึธื“ืก, ืื’ืขื ื˜ืŸ ืื•ืŸ ืึทืœืข ืกืึธืจืฅ ืคื•ืŸ ืื ื“ืขืจืข. ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ื–. ื›ึผื“ื™ ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื“ืขื ืฆื™ืœ ืฆื• ืžืึทื›ืŸ ืึทืจื‘ืขื˜ ื•ื•ื™ ื’ืจื™ื ื’ ื•ื•ื™ ืžืขื’ืœืขืš, ืื™ืš ื“ืืจืฃ ืฆื• ื–ื™ื™ืŸ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ืกื™ / ืกื™.

ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ืึท ืงืœื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜ (ืื™ืŸ ื“ืขื ืคืึทืœ, ืึท Node.js ืคึผืจื•ื™ืขืงื˜) ืื•ืŸ ืื™ืจ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื•ื•ื™ืกืŸ ื•ื•ื™ ืฆื• ืึธื˜ืึทืžื™ื™ื˜ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ื“ืขื ืคึผืจื•ื™ืขืงื˜, ืื•ืŸ ืฆื• ืขื ืฉื•ืจ ืึทื– ื•ื•ืึธืก ืื™ื– ืกื˜ืึธืจื“ ืื™ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคึผื•ื ืงื˜ ื’ืœื™ื™ึทื›ืŸ ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข. ื˜ืจืึทื›ื˜ืŸ ืื™ืจ ืงืขืŸ ื–ื™ื™ืŸ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ.

ืคึผืจื™ืจืขืงื•ื•ืึทื–ืึทืฅ

ื“ืขืจ ืœื™ื™ืขื ืขืจ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ื– ื’ืขืจื™ื›ื˜ ืฆื• ื”ืึธื‘ืŸ ืึท ื™ืงืขืจื“ื™ืง ืคืืจืฉื˜ืื ื“ ืคื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืื•ืŸ ืฉืจื™ื™ื‘ืŸ Bash ืกืงืจื™ืคึผืก. ืื™ืŸ ื“ืขืจืฆื•, ืขืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ืึทืงืึทื•ื ืฅ ื˜ืจืึทื•ื•ื™ืก ืกื™ ะธ ื“ืึธืงืงืขืจ ื›ืึทื‘.

Objectives

ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ื–ืึธื’ืŸ ืึทื– ื“ืขื ืึทืจื˜ื™ืงืœ ืงืขื ืขืŸ ืึทื ืงืึทื ื“ื™ืฉื ืึทืœื™ ื’ืขืจื•ืคืŸ ืึท "ื˜ื•ื˜ืึธืจื™ืึทืœ". ื“ืึธืก ืื™ื– ืžืขืจ ืึท ื“ืึธืงื•ืžืขื ื˜ ืื™ืŸ ื•ื•ืึธืก ืื™ืš ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ืื™ืš ื’ืขืœืขืจื ื˜ ืื•ืŸ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ืขื ืคึผืจืึธืฆืขืก ื•ื•ืึธืก ืคึผืึทืกืŸ ืžื™ืจ ืคึฟืึทืจ ื˜ืขืกื˜ื™ื ื’ ืื•ืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืงืึธื“ ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข, ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื™ืŸ ืื™ื™ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ืคืึธืจืŸ.

ื“ืึธืก ืื™ื– ื•ื•ืึธืก ืžื™ื™ืŸ ื•ื•ืึธืจืงืคืœืึธื•ื• ืขื ื“ื™ืงื˜ ื–ื™ืš.

ืคึฟืึทืจ ืงืึธื“ ืึทืจื™ื™ึทื ื’ืขืฉื™ืงื˜ ืฆื• ืงื™ื™ืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืฆื•ื•ื™ื™ึทื’ ืึทื—ื•ืฅ master, ื“ื™ ืคืืœื’ืขื ื“ืข ืึทืงืฉืึทื ื– ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜:

  • ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื‘ื•ื™ืขืŸ ืื•ื™ืฃ Travis CI ืกื˜ืึทืจืฅ.
  • ื›ืœ ืึทืคึผืึทืจืึทื˜, ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืื•ืŸ ืกื•ืฃ-ืฆื•-ืกื•ืฃ ื˜ืขืกืฅ ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜.

ื‘ืœื•ื™ื– ืคึฟืึทืจ ืงืึธื“ ื•ื•ืึธืก ืคืืœืŸ ืื™ืŸ master, ื“ื™ ืคืืœื’ืขื ื“ืข ืื™ื– ื’ืขื˜ืืŸ:

  • ืึทืœืฅ ื“ืขืจืžืื ื˜ ืื•ื™ื‘ืŸ, ืคึผืœื•ืก ...
  • ื‘ื•ื™ืขืŸ ืึท ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืงืจืึทื ื˜ ืงืึธื“, ืกืขื˜ื˜ื™ื ื’ืก ืื•ืŸ ืกื•ื•ื™ื•ื•ืข.
  • ื“ื™ืคึผืœื•ื™ื™ื ื’ ื“ื™ ื‘ื™ืœื“ ืฆื• Docker Hub.
  • ืงืฉืจ ืฆื• ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ.
  • ื•ืคึผืœืึธืึทื“ื™ื ื’ ืึท ื‘ื™ืœื“ ืคึฟื•ืŸ Docker Hub ืฆื• ื“ื™ ืกืขืจื•ื•ืขืจ.
  • ืกื˜ืึธืคึผืคึผื™ื ื’ ื“ืขื ืงืจืึทื ื˜ ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ืŸ ืึธื ื”ื™ื™ื‘ ืึท ื ื™ื™ึทืข ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ื ื™ื™ึทืข ื‘ื™ืœื“.

ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืกืŸ ื’ืึธืจื ื™ืฉื˜ ื•ื•ืขื’ืŸ ื“ืึธืงืขืจ, ื‘ื™ืœื“ืขืจ ืื•ืŸ ืงืึทื ื˜ื™ื™ื ืขืจื–, ื˜ืึธืŸ ื ื™ื˜ ื–ืึธืจื’. ืื™ ืš ืฐืข ืœ ืื™ ืจ ืืœ ืฅ ื“ืขืจืฆืฒืœืŸ .

ื•ื•ืึธืก ืื™ื– CI / CD?

ื“ื™ ืึทื‘ืจื™ื•ื•ื™ื™ื™ืฉืึทืŸ ืกื™ / ืงืึธืžืคึผืึทืงื˜ื“ื™ืกืง ืฉื˜ื™ื™ื˜ ืคึฟืึทืจ "ืฉื˜ืขื ื“ื™ืง ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ / ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื“ื™ืคึผืœื•ื™ืžืึทื ื˜."

โ– ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ

ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืื™ื– ืึท ืคึผืจืึธืฆืขืก ืื™ืŸ ื•ื•ืึธืก ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืžืึทื›ืŸ ืงืึทืžื™ืฅ ืฆื• ื“ื™ ื”ื•ื™ืคึผื˜ ืžืงื•ืจ ืงืึธื“ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ (ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืึท ืฆื•ื•ื™ื™ึทื’ master). ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ื“ื™ ืงื•ื•ืึทืœื™ื˜ืขื˜ ืคื•ืŸ ื“ื™ ืงืึธื“ ืื™ื– ื™ื ืฉื•ืจื“ ื“ื•ืจืš ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื˜ืขืกื˜ื™ื ื’.

โ– ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ื– ื“ื™ ืึธืคื˜, ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ืงืึธื“ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข. ื“ืขืจ ืฆื•ื•ื™ื™ื˜ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ CI / CD ืึทืงืจืึทื ื™ื ืื™ื– ืžืืœ ืกืคึผืขืœื“ ื•ื•ื™ " ืงืขืกื™ื™ื“ืขืจื“ื™ืง ืขืงืกืคึผืจืขืก." ื“ืึธืก ืื™ื– ื‘ื™ื™ืกื™ืงืœื™ ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ "ืงื™ื™ึทืขืจืœืขืš ื“ื™ืคึผืœื•ื™ืžืึทื ื˜", ืึธื‘ืขืจ "ืงืึธื ื˜ื™ื ื•ืึธื•ืก ืขืงืกืคึผืจืขืก" ื™ืžืคึผืœื™ื™ื– ื“ื™ ื ื•ื™ื˜ ืฆื• ืžืึทื ื™ื•ืึทืœื™ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ื™ื“ืขืจ ืื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคึผืจืึธืฆืขืก.

ื’ืขื˜ื™ื ื’ ืกื˜ืึทืจื˜ืขื“

ื“ื™ ืึทืคึผ ื•ื•ืึธืก ืื™ืš ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ืœืขืจื ืขืŸ ืึทืœืข ื“ืขื ืื™ื– ื’ืขืจื•ืคืŸ ื ืขืžืขืŸ ื‘ืึทืžืขืจืงื•ื ื’. ื“ืึธืก ืื™ื– ืึท ื•ื•ืขื‘ ืคึผืจื•ื™ืขืงื˜ ื•ื•ืึธืก ืื™ืš ืึทืจื‘ืขื˜ ืื•ื™ืฃ, ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ื ืขืžืขืŸ ื”ืขืจื•ืช. ืื™ืŸ ืขืจืฉื˜ืขืจ ืื™ืš ื’ืขืคืจื•ื•ื•ื˜ ืฆื• ื˜ืึธืŸ JAMStack-ืคึผืจืึธื™ืขืงื˜, ืึธื“ืขืจ ื ืึธืจ ืึท ืคืจืึธื ื˜-ืกื•ืฃ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึธืŸ ืึท ืกืขืจื•ื•ืขืจ, ืฆื• ื ื•ืฆืŸ ื“ื™ ื ืึธืจืžืึทืœ ื”ืึธืกื˜ื™ื ื’ ืื•ืŸ ืคึผืจื•ื™ืขืงื˜ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื•ื•ืึธืก ืขืก ืึธืคืคืขืจืก Netlify. ื•ื•ื™ ื“ื™ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื’ืขื•ื•ืืงืกืŸ, ืื™ืš ื“ืืจืฃ ืฆื• ืฉืึทืคึฟืŸ ื–ื™ื™ืŸ ืกืขืจื•ื•ืขืจ ื˜ื™ื™ืœ, ื•ื•ืึธืก ืžืขื ื˜ ืึทื– ืื™ืš ื•ื•ืึธืœื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึธืจืžื•ืœื™ืจืŸ ืžื™ื™ืŸ ืื™ื™ื’ืขื ืข ืกื˜ืจืึทื˜ืขื’ื™ืข ืคึฟืึทืจ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜.

ืื™ืŸ ืžื™ื™ืŸ ืคืึทืœ, ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืึทืŸ ืขืงืกืคึผืจืขืกืก ืกืขืจื•ื•ืขืจ ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื“ื™ Node.js ืกื•ื•ื™ื•ื•ืข, ืกืขืจื•ื•ื™ื ื’ ืึท ืื™ื™ืŸ-ื‘ืœืึทื˜ ืจืขืึทืงื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ืฉื˜ื™ืฆื˜ ืึท ื–ื™ื›ืขืจ ืกืขืจื•ื•ืขืจ ื–ื™ื™ึทื˜ API. ื“ื™ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ื’ื™ื™ื˜ ื“ื™ ืกื˜ืจืึทื˜ืขื’ื™ืข ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื’ืขื’ืขื‘ืŸ ื’ืึทื ืฅ ืกื˜ืึทืง ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ืคื™ืจืขืจ.

ืื™ืš ื‘ืึทืจืึทื˜ื  ื–ื™ืš ืžื™ื˜ ืคืจื™ื™ึทื ื“, ื•ื•ืืก ืื™ื– ืืŸ ืื•ื™ื˜ืืžืืฆื™ืข ืขืงืกืคืขืจื˜, ืื•ืŸ ื”ืื˜ ืื™ื ื’ืขืคืจืขื’ื˜ ื•ื•ืืก ืื™ืš ื“ืืจืฃ ื˜ืืŸ ื›ื“ื™ ื“ืืก ืืœืฅ ืฆื• ืืจื‘ืขื˜ืŸ ื•ื•ื™ ืื™ืš ื”ืื‘ ื’ืขื•ื•ืืœื˜. ืขืจ ื”ืึธื˜ ืžื™ืจ ื’ืขื’ืขื‘ืŸ ื“ืขื ื’ืขื“ืึทื ืง ืคื•ืŸ ื•ื•ื™ ืึทืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื•ื•ืึธืจืงืคืœืึธื•ื• ื–ืึธืœ ืงื•ืงืŸ, ืึทื•ื˜ืœื™ื™ื ื“ ืื™ืŸ ื“ื™ ื’ืึธื•ืœื– ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ. ื•ื•ื™ื™ืœ ื“ื™ ื’ืึธื•ืœื– ืžืขื ื˜ ืึทื– ืื™ืš ื“ืืจืฃ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืื•ื™ืก ื•ื•ื™ ืฆื• ื ื•ืฆืŸ ื“ืึธืงืขืจ.

ื“ืึธืงืงืขืจ

Docker ืื™ื– ืึท ื’ืขืฆื™ื™ึทื’ ื•ื•ืึธืก, ื“ืึทื ืง ืฆื• ืงืึทื ื˜ื™ื™ื ืขืจื™ื–ืึทื˜ื™ืึธืŸ ื˜ืขื›ื ืึธืœืึธื’ื™ืข, ืึทืœืึทื•ื– ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• ื–ื™ื™ืŸ ืœื™ื™ื›ื˜ ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜, ื“ื™ืคึผืœื•ื™ื“ ืื•ืŸ ืœื•ื™ืคืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืกื•ื•ื™ื•ื•ืข, ืืคื™ืœื• ืื•ื™ื‘ ื“ื™ ื“ืึธืงืงืขืจ ืคึผืœืึทื˜ืคืึธืจืžืข ื–ื™ืš ืœื•ื™ืคื˜ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ. ืขืจืฉื˜ืขืจ, ืื™ืš ื“ืืจืฃ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืžื™ื™ืŸ ื”ืขื ื˜ ืื•ื™ืฃ ื“ื™ Docker ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืžื›ืฉื™ืจื™ื (CLI). ืœื™ืžืขื“ ื“ื™ ื“ืึธืงืงืขืจ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ืคื™ืจืขืจ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ื’ืขืจื•ืคึฟืŸ ื–ื™ื™ืขืจ ืงืœืึธืจ ืื•ืŸ ืคืึทืจืฉื˜ื™ื™ื™ืง, ืึธื‘ืขืจ ื“ืขืจืคื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืœืขืจื ืขืŸ ืึทื– ืฆื• ื ืขืžืขืŸ ื“ื™ ืขืจืฉื˜ืขืจ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ืฉืจื™ื˜, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธืคึผืœืึธื“ื™ืจืŸ Docker Desktop (ืคึฟืึทืจ ืžืขืง ืึธื“ืขืจ Windows).

ื“ืึธืงืขืจ ื”ื•ื‘ ืื™ื– ื‘ืขืขืจืขืš ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื–ืึทืš ื•ื•ื™ ื’ื™ื˜ื”ื•ื‘ ืคึฟืึทืจ ื’ื™ื˜ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื– ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจื™ npm ืคึฟืึทืจ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืคึผืึทืงืึทื“ื–ืฉืึทื–. ื“ืึธืก ืื™ื– ืึทืŸ ืึธื ืœื™ื™ืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคึฟืึทืจ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ. ื“ืึธืก ืื™ื– ื•ื•ืึธืก Docker Desktop ืงืึทื ืขืงืฅ ืฆื•.

ืึทื–ื•ื™, ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ Docker, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ืึธืŸ ืฆื•ื•ื™ื™ ื˜ื™ื ื’ื–:

ื ืึธืš ื“ืขื, ืื™ืจ ืงืขื ืขืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืื•ื™ื‘ ื“ื™ Docker CLI ืื™ื– ืืจื‘ืขื˜ืŸ ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ Docker ื•ื•ืขืจืกื™ืข:

docker -v

ื“ืขืจื ืึธืš, ืงืœืึธืฅ ืื™ืŸ Docker Hub ื“ื•ืจืš ืึทืจื™ื™ึทืŸ ื“ื™ื™ืŸ ื ืืžืขืŸ ืื•ืŸ ืคึผืึทืจืึธืœ ื•ื•ืขืŸ ื’ืขื‘ืขื˜ืŸ:

docker login

ืฆื• ื ื•ืฆืŸ ื“ืึธืงืขืจ, ืื™ืจ ืžื•ื–ืŸ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ืงืึทื ืกืขืคึผืก ืคื•ืŸ ื‘ื™ืœื“ืขืจ ืื•ืŸ ืงืึทื ื˜ื™ื™ื ืขืจื–.

โ– ื‘ื™ืœื“ืขืจ

ืึท ื‘ื™ืœื“ ืื™ื– ืขืคึผืขืก ื•ื•ื™ ืึท ืคึผืœืึทืŸ ื•ื•ืึธืก ื›ึผื•ืœืœ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืคึฟืึทืจ ืึทืกืขืžื‘ืึทืœื™ื ื’ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ. ื“ืึธืก ืื™ื– ืึทืŸ ื™ืžืžื™ื•ื˜ืึทื‘ืึทืœ ืžืึธืžืขื ื˜ื‘ื™ืœื“ ืคื•ืŸ ื“ื™ ื˜ืขืงืข ืกื™ืกื˜ืขื ืื•ืŸ ืกืขื˜ื˜ื™ื ื’ืก ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ื˜ื™ื™ืœืŸ ื‘ื™ืœื“ืขืจ.

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

ื“ืขืจ ื‘ืึทืคึฟืขืœ ื•ื•ืขื˜ ืึทืจื•ื™ืกืคื™ืจืŸ ืึท ื˜ื™ืฉ ืžื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ื›ืขื“ืขืจ:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

ื•ื•ื™ื™ึทื˜ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ืขื˜ืœืขื›ืข ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ืงืึทืžืึทื ื“ื– ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืคึฟืึธืจืžืึทื˜ - ืขืจืฉื˜ืขืจ ืขืก ืื™ื– ืึท ื‘ืึทืคึฟืขืœ ืžื™ื˜ ืึท ื‘ืึทืžืขืจืงื•ื ื’, ืื•ืŸ ื“ืขืžืึธืœื˜ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื•ื•ืึธืก ืขืก ืงืขื ืขืŸ ืจืขื–ื•ืœื˜ืึทื˜.

โ– ืงืึทื ื˜ื™ื™ื ืขืจื–

ื ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ื– ืึท ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ืคึผืขืงืœ ื•ื•ืึธืก ื›ึผื•ืœืœ ืึทืœืฅ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื•ื™ืคืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื™ื˜ ื“ืขื ืฆื•ื’ืึทื ื’ ื•ื•ืขื˜ ืฉื˜ืขื ื“ื™ืง ืึทืจื‘ืขื˜ ื“ื™ ื–ืขืœื‘ืข, ืจืึทื’ืึทืจื“ืœืึทืก ืคื•ืŸ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ: ืื™ืŸ ืึทืŸ ืืคื’ืขื–ื•ื ื“ืขืจื˜ ืกื•ื•ื™ื•ื•ืข ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืกื•ื•ื™ื•ื•ืข. ื“ื™ ืคื•ื ื˜ ืื™ื– ืึทื– ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื‘ื™ืœื“ ื–ืขื ืขืŸ ืœืึธื ื˜ืฉื˜ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ.

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

โ– ื˜ืึทื’ืก

ื ืงื•ื•ื™ื˜ืœ ืื™ื– ืึทืŸ ืึธื ื•ื•ื™ื™ึทื– ืคื•ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ืึท ื‘ื™ืœื“.

โ– ื ืฉื ืขืœ ืจืขืคึฟืขืจืขื ืฅ ืฆื• ื“ืึธืงืงืขืจ ืงืึทืžืึทื ื“ื–

ื“ืึธ ืื™ื– ืึทืŸ ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ืขื˜ืœืขื›ืข ืงืึทืžืึทื ืœื™ ื’ืขื•ื•ื™ื™ื ื˜ ื“ืึธืงืงืขืจ ืงืึทืžืึทื ื“ื–.

ืงืึธืœืขืงื˜ื™ื•ื•

ืงืึธื ื˜ืขืงืกื˜

ืงืึทืžืฃ

ื“ืึธืงืงืขืจ ื‘ื•ื™ืขืŸ

ื‘ื™ืœื“

ื‘ื•ื™ืขืŸ ืึท ื‘ื™ืœื“ ืคึฟื•ืŸ ืึท Dockerfile

docker tag

ื‘ื™ืœื“

ื‘ื™ืœื“ ื˜ืึทื’ื™ื ื’

ื“ืึธืงื˜ืขืจ ื‘ื™ืœื“ืขืจ

ื‘ื™ืœื“

ืœื™ืกื˜ื™ื ื’ ื‘ื™ืœื“ืขืจ

ื“ืึธืงืขืจ ืœื•ื™ืคืŸ

ืงืึทื ื˜ื™ื™ื ืขืจ

ืคืœื™ืกื ื“ื™ืง ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืึท ื‘ื™ืœื“

ื“ืึธืงืขืจ ืฉื˜ื•ืคึผืŸ

ื‘ื™ืœื“

ื•ืคึผืœืึธืึทื“ื™ื ื’ ืึท ื‘ื™ืœื“ ืฆื• ื“ื™ ืจืขื’ื™ืกื˜ืจื™

ื“ืึธืงืขืจ ืฆื™ืขืŸ

ื‘ื™ืœื“

ืœืึธื•ื“ื™ื ื’ ืึท ื‘ื™ืœื“ ืคื•ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™

ื“ืึธืงืขืจ ืคึผืก

ืงืึทื ื˜ื™ื™ื ืขืจ

ืœื™ืกื˜ื™ื ื’ ืงืึทื ื˜ื™ื™ื ืขืจื–

ื“ืึธืงืงืขืจ ืกื™ืกื˜ืขื ืคืœื•ื™ื

ื‘ื™ืœื“ / ืงืึทื ื˜ื™ื™ื ืขืจ

ืจื™ืžื•ื•ื•ื™ื ื’ ืึทื ื™ื•ื–ื“ ืงืึทื ื˜ื™ื™ื ืขืจื– ืื•ืŸ ื‘ื™ืœื“ืขืจ

โ–ื“ืึธืงืงืขืจ ื˜ืขืงืข

ืื™ืš ื•ื•ื™ืกืŸ ื•ื•ื™ ืฆื• ืœื•ื™ืคืŸ ืึท ืคึผืจืึธื“ื•ืงืฆื™ืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืœืึธื•ืงืึทืœื™. ืื™ืš ื”ืึธื‘ืŸ ืึท ื•ื•ืขื‘ืคึผืึทืงืง ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื“ื™ื–ื™ื™ื ื“ ืฆื• ื‘ื•ื™ืขืŸ ืึท ืคืึทืจื˜ื™ืง ืจืขืึทืงื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื“ืขืจื ืึธืš, ืื™ืš ื”ืึธื‘ืŸ ืึท ื‘ืึทืคึฟืขืœ ื•ื•ืึธืก ืกื˜ืึทืจืฅ ืึท Node.js ื‘ืื–ื™ืจื˜ ืกืขืจื•ื•ืขืจ ืื•ื™ืฃ ื“ื™ ืคึผืึธืจื˜ 5000. ืขืก ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

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

ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ืื ื’ืขื•ื•ื™ื–ืŸ ืึทื– ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึฟืึทืจ ื“ืขื ืžืึทื˜ืขืจื™ืึทืœ. ืึธื‘ืขืจ ื“ืึธ, ืคึฟืึทืจ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ, ืงื™ื™ืŸ ืคึผืฉื•ื˜ ื ืึธื“ืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ื˜ืึธืŸ.

ืื™ืŸ ืกื“ืจ ืฆื• ื ื•ืฆืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขื‘ืŸ ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก ืฆื• Docker. ื“ืึธืก ืื™ื– ื’ืขื˜ืืŸ ื“ื•ืจืš ืึท ื˜ืขืงืข ื’ืขืจื•ืคืŸ Dockerfile, ืœื™ื’ืŸ ืื™ืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜. ื“ืขืจ ื˜ืขืงืข, ืื™ืŸ ืขืจืฉื˜ืขืจ, ืžื™ื™ื ื˜ ื’ืึทื ืฅ ื™ื ื’ืงืึทืžืคึผืจืึทื›ืขื ืกื™ื‘ืึทืœ.

ืื‘ืขืจ ื•ื•ืึธืก ืขืก ื›ึผื•ืœืœ ื‘ืœื•ื™ื– ื‘ืืฉืจื™ื™ื‘ื˜, ืžื™ื˜ ืกืคึผืขืฆื™ืขืœ ืงืึทืžืึทื ื“ื–, ืขืคึผืขืก ืขื ืœืขืš ืฆื• ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึท ืึทืจื‘ืขื˜ ืกื•ื•ื™ื•ื•ืข. ื“ืึธ ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืงืึทืžืึทื ื“ื–:

  • ืคึฟื•ืŸ - ื“ืขืจ ื‘ืึทืคึฟืขืœ ืกื˜ืึทืจืฅ ืึท ื˜ืขืงืข. ืขืก ืกืคึผืขืฆื™ืคื™ืฆื™ืจื˜ ื“ื™ ื‘ืึทื–ืข ื‘ื™ืœื“ ืื•ื™ืฃ ื•ื•ืึธืก ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ื– ื’ืขื‘ื•ื™ื˜.
  • ืงืึธืคึผื™ - ืงืึทืคึผื™ื™ื ื’ ื˜ืขืงืขืก ืคื•ืŸ ืึท ื”ื™ื’ืข ืžืงื•ืจ ืฆื• ืึท ืงืึทื ื˜ื™ื™ื ืขืจ.
  • WORKDIR - ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ ืึทืจื‘ืขื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคึฟืึทืจ ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึทืžืึทื ื“ื–.
  • RUN - ืœื•ื™ืคืŸ ืงืึทืžืึทื ื“ื–.
  • ื•ื™ืกืฉื˜ืขืœืŸ - ืคึผืึธืจื˜ ืกืขื˜ื˜ื™ื ื’ืก.
  • 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. ื“ืขื ืžื™ื˜ืœ ืึทื– ืื™ืจ ืขืจืฉื˜ืขืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคึฟืึทืจ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื•ื™ืฃ Docker Hub. ื ืึธืš ื“ืขื, ืžื™ืจ ื•ื•ืขืœืŸ ื”ืึธื‘ืŸ ืึท ืคึผืœืึทืฅ ื•ื•ื• ืžื™ืจ ืงืขื ืขืŸ ืฉื™ืงืŸ ื“ื™ ื‘ื™ืœื“. ื“ืขืจ ื‘ื™ืœื“ ื“ืึทืจืฃ ื–ื™ื™ืŸ ืจื™ื ื™ื™ืžื“ ืึทื–ื•ื™ ืึทื– ื–ื™ื™ืŸ ื ืึธืžืขืŸ ืกื˜ืึทืจืฅ ืžื™ื˜ ืื•ื ื“ื–ืขืจ ื“ืึธืงืงืขืจ ื”ื•ื‘ ื ืืžืขืŸ. ื“ืขื ื–ืึธืœ ื–ื™ื™ืŸ ื ืื›ื’ืขื’ืื ื’ืขืŸ ื“ื•ืจืš ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™. ื™ืขื“ืขืจ ืงื•ื•ื™ื˜ืœ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืฉื˜ืขืœืŸ ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ ื ืึธืžืขืŸ. ื•ื ื˜ืขืจ ืื™ื– ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื ืึทืžื™ื ื’ ื‘ื™ืœื“ืขืจ ื ื™ืฆืŸ ื“ืขื ืกื›ืขืžืข.

ืื™ืฆื˜ ืื™ืจ ืงืขื ืขืŸ ื‘ื•ื™ืขืŸ ื“ื™ ื‘ื™ืœื“ ืžื™ื˜ ืึท ื ื™ื™ึทืข ื ืึธืžืขืŸ ืื•ืŸ ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ 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 Hub. ื“ืึธืก ืึทืœืฅ ืžื™ื™ื ื˜, ืึทื– ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขืžืึทื›ื˜ ื–ื™ื™ืขืจ ื’ื•ื˜ืŸ ืคึผืจืึธื’ืจืขืก ืฆื• ืื•ื ื“ื–ืขืจ ืฆื™ืœ. ืื™ืฆื˜ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกืึธืœื•ื•ืข ื ืึธืš ืฆื•ื•ื™ื™ ืคืจืื’ืขืก:

  • ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึท CI ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ื˜ืขืกื˜ื™ื ื’ ืื•ืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืงืึธื“.
  • ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ ืึทื–ื•ื™ ืึทื– ืขืก ืงืขื ืขืŸ ืืจืืคืงืืคื™ืข ืื•ืŸ ืœื•ื™ืคืŸ ืื•ื ื“ื–ืขืจ ืงืึธื“.

ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ืžื™ืจ ื ื•ืฆืŸ ื˜ืจืึทื•ื•ื™ืก ืกื™. ื•ื•ื™ ืึท ืกืขืจื•ื•ืขืจ - ื“ื™ื˜ื™ื’ืึทืœ ืึธืกืขืึทืŸ.

ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ืื ื’ืขื•ื•ื™ื–ืŸ ืึทื– ื“ืึธ ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืืŸ ืื ื“ืขืจ ืงืึธืžื‘ื™ื ืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ืกืขืจื•ื•ื™ืกืขืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ Travis CI, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ CircleCI ืึธื“ืขืจ Github Actions. ืื•ืŸ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ DigitalOcean - AWS ืึธื“ืขืจ ืœื™ื ืึธื“ืข.

ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ Travis CI, ืื•ืŸ ืื™ืš ืฉื•ื™ืŸ ื”ืึธื‘ืŸ ืขืคึผืขืก ืงืึทื ืคื™ื’ื™ืขืจื“ ืื™ืŸ ื“ืขื ื“ื™ื ืกื˜. ื“ืขืจื™ื‘ืขืจ, ืื™ืฆื˜ ืื™ืš ื•ื•ืขืœ ื‘ืขืงื™ืฆืขืจ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื•ื•ื™ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ืขืก ืคึฟืึทืจ ืึทืจื‘ืขื˜.

ื˜ืจืึทื•ื•ื™ืก ืกื™

Travis CI ืื™ื– ืึท ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ื˜ืขืกื˜ื™ื ื’ ืื•ืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืงืึธื“. ืื™ืš ื•ื•ืึธืœื˜ ื ื™ืฉื˜ ื•ื•ื™ ืฆื• ื’ื™ื™ืŸ ืื™ืŸ ื“ื™ ื™ื ื˜ืจืึทืงืึทืกื™ื– ืคื•ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ Travis CI, ื•ื•ื™ื™ึทืœ ื™ืขื“ืขืจ ืคึผืจื•ื™ืขืงื˜ ืื™ื– ื™ื™ื ืฆื™ืง, ืื•ืŸ ื“ืึธืก ื•ื•ืขื˜ ื ื™ืฉื˜ ื‘ืจืขื ื’ืขืŸ ืคื™ืœ ื ื•ืฅ. ืึธื‘ืขืจ ืื™ืš ื•ื•ืขื˜ ื“ืขืงืŸ ื“ื™ ื‘ืึทืกื™ืงืก ืฆื• ื‘ืึทืงื•ืžืขืŸ ืื™ืจ ืกื˜ืึทืจื˜ืขื“ ืื•ื™ื‘ ืื™ืจ ื‘ืึทืฉืœื™ืกืŸ ืฆื• ื ื•ืฆืŸ Travis CI. ืฆื™ ืื™ืจ ืงืœื™ื™ึทื‘ืŸ Travis CI, CircleCI, Jenkins ืึธื“ืขืจ ืขืคึผืขืก ืึทื ื“ืขืจืฉ, ืขื ืœืขืš ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžืขื˜ื”ืึธื“ืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืื•ืžืขื˜ื•ื.

ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ Travis CI, ื’ื™ื™ืŸ ืฆื• ืคึผืจื•ื™ืขืงื˜ ื•ื•ืขื‘ื–ื™ื™ึทื˜ืœ ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ื—ืฉื‘ื•ืŸ. ื“ืขืจื ืึธืš ื•ื™ืกืฉื˜ื™ืžืขืŸ Travis CI ืžื™ื˜ ื“ื™ื™ืŸ GitHub ื—ืฉื‘ื•ืŸ. ื•ื•ืขืŸ ืื™ืจ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ืขื ืกื™ืกื˜ืขื, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืžื™ื˜ ื•ื•ืึธืก ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืึธื˜ืึทืžื™ื™ื˜ ืึทืจื‘ืขื˜ ืื•ืŸ ื’ืขื‘ืŸ ืึทืงืกืขืก ืฆื• ืขืก. (ืื™ืš ื ื•ืฆืŸ GitHub, ืึธื‘ืขืจ ืื™ืš ื‘ื™ืŸ ื–ื™ื›ืขืจ ืึทื– Travis CI ืงืขื ืขืŸ ื•ื™ืกืฉื˜ื™ืžืขืŸ ืžื™ื˜ BitBucket ืื•ืŸ GitLab ืื•ืŸ ืื ื“ืขืจืข ืขื ืœืขืš ื‘ืึทื“ื™ื ื•ื ื’ืก).

ื™ืขื“ืขืจ ืžืึธืœ Travis CI ืื™ื– ืกื˜ืึทืจื˜ืขื“, ื“ืขืจ ืกืขืจื•ื•ืขืจ ืื™ื– ืœืึธื ื˜ืฉื˜, ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ื“ื™ ืงืึทืžืึทื ื“ื– ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื“ื™ืคึผืœื•ื™ื™ื ื’ ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืฆื•ื•ื™ื™ื’ืŸ.

โ– ืึทืจื‘ืขื˜ ืœืขื‘ืŸ ืฆื™ืงืœ

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 ื•ื•ื™ ื“ื™ ืฉืคึผืจืึทืš ืื•ืŸ ื“ืขืจืฆื™ื™ืœื˜ ื“ื™ ืกื™ืกื˜ืขื ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืคืืจืœืื ื’ื˜ ืฆื• ื ื•ืฆืŸ ื“ืึธืงืขืจ.

ืึทืœืฅ ื•ื•ืึธืก ืื™ื– ืœื™ืกื˜ืขื“ ืื™ืŸ .travis.yml, ื•ื•ืขื˜ ื–ื™ื™ืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื•ื•ืขืŸ ืึทืœืข ืฆื™ืขืŸ ืจื™ืงื•ื•ืขืก ื–ืขื ืขืŸ ื’ืขืžืื›ื˜ ืฆื• ืึทืœืข ืฆื•ื•ื™ื™ื’ืŸ ืคื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™, ืกื™ื™ึทื“ืŸ ืึทื ื“ืขืจืฉ ืกืคึผืขืกื™ืคื™ืขื“. ื“ืึธืก ืื™ื– ืึท ื ื•ืฆื™ืง ืฉื˜ืจื™ืš ื•ื•ื™ื™ึทืœ ืขืก ืžื™ื˜ืœ ืึทื– ืžื™ืจ ืงืขื ืขืŸ ืคึผืจื•ื‘ื™ืจืŸ ืึทืœืข ืงืึธื“ ื•ื•ืึธืก ืงื•ืžืขืŸ ืื™ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™. ื“ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื•ื•ื™ืกืŸ ืื•ื™ื‘ ื“ื™ ืงืึธื“ ืื™ื– ื’ืจื™ื™ื˜ ืฆื• ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืฆื• ื“ื™ ืฆื•ื•ื™ื™ึทื’. master, ืื•ืŸ ืฆื™ ืขืก ื•ื•ืขื˜ ื‘ืจืขื›ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื‘ื•ื™ืขืŸ ืคึผืจืึธืฆืขืก. ืื™ืŸ ื“ืขื ื’ืœืื‘ืืœืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืื™ืš ื™ื ืกื˜ืึทืœื™ืจืŸ ืึทืœืฅ ืœืึธื•ืงืึทืœื™, ืœื•ื™ืคืŸ ื“ื™ ื•ื•ืขื‘ืคึผืึทืงืง ื“ืขื•ื• ืกืขืจื•ื•ืขืจ ืื™ืŸ ื“ืขืจ ื”ื™ื ื˜ืขืจื’ืจื•ื ื˜ (ื“ืึธืก ืื™ื– ืึท ืฉื˜ืจื™ืš ืคื•ืŸ ืžื™ื™ืŸ ื•ื•ืึธืจืงืคืœืึธื•ื•) ืื•ืŸ ืœื•ื™ืคืŸ ื˜ืขืกืฅ.

ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ื“ื™ื™ืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืฆื• ื•ื•ื™ื™ึทื–ืŸ ื‘ืึทื“ื–ืฉื™ื– ื•ื•ืึธืก ื™ื ื“ื™ืงื™ื™ืฅ ืคึผืจืึธื‘ืข ืงืึทื•ื•ืขืจื™ื“ื–ืฉ, ื“ืึธ ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืงื•ืจืฅ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืื•ื™ืฃ ื ื™ืฆืŸ 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

ื“ืึธืก ืื™ื– ื•ื•ื• ื“ื™ ืึทืงืฉืึทื ื– ื•ื•ืึธืก ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืคึฟืึทืจ ืึทืœืข ืฆื•ื•ื™ื™ื’ืŸ ืคื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืื•ืŸ ืคึฟืึทืจ ืฆื™ืขืŸ ืจื™ืงื•ื•ืขืก ืขื ื“ื™ืงืŸ.

โ–ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ื‘ืึทื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ื”ืึทืฉืึธืจืข ืึทื– ืึทืœืข ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื˜ืขืกืฅ ื”ืึธื‘ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื”ืฆืœื—ื”, ืžื™ืจ ืงืขื ืขืŸ, ื•ื•ืึธืก ืื™ื– ืึทืคึผืฉืึทื ืึทืœ, ืฆืขื•ื•ื™ืงืœืขืŸ ื“ืขื ืงืึธื“ ืฆื• ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ. ื–ื™ื ื˜ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื˜ืึธืŸ ื“ืึธืก ื‘ืœื•ื™ื– ืคึฟืึทืจ ืงืึธื“ ืคื•ืŸ ื“ื™ ืฆื•ื•ื™ื™ึทื’ master, ืžื™ืจ ื’ืขื‘ืŸ ื“ื™ ืกื™ืกื˜ืขื ืฆื•ื ืขืžืขืŸ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืื™ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืกืขื˜ื˜ื™ื ื’ืก. ืื™ื™ื“ืขืจ ืื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื ื•ืฆืŸ ื“ื™ ืงืึธื“ ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ืื™ืŸ ื“ื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜, ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื•ื•ืึธืจืขื ืขืŸ ืื™ืจ ืึทื– ืื™ืจ ืžื•ื–ืŸ ื”ืึธื‘ืŸ ืึท ืคืึทืงื˜ื™ืฉ ืฉืจื™ืคื˜ ื’ืขืจื•ืคืŸ ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜.

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

ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฉืจื™ืคื˜ ืกืึทืœื•ื•ื– ืฆื•ื•ื™ื™ ืคึผืจืึธื‘ืœืขืžืก:

  • ื‘ื•ื™ืขืŸ, ืคืึทืจื‘ื™ื ื“ืŸ ืื•ืŸ ืฉื™ืงืŸ ื“ื™ ื‘ื™ืœื“ ืฆื• Docker Hub ืžื™ื˜ ืึท CI ื’ืขืฆื™ื™ึทื’ (ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, Travis CI).
  • ืœืึธื•ื“ื™ื ื’ ื“ื™ ื‘ื™ืœื“ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ, ืกื˜ืึธืคึผืคึผื™ื ื’ ื“ื™ ืึทืœื˜ ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ืŸ ืึธื ื”ื™ื™ื‘ืŸ ืึท ื ื™ื™ึทืข (ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื“ื™ ืกืขืจื•ื•ืขืจ ืœื•ื™ืคื˜ ืื•ื™ืฃ ื“ื™ DigitalOcean ืคึผืœืึทื˜ืคืึธืจืžืข).

ืขืจืฉื˜ืขืจ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉื˜ืขืœืŸ ืึทืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืคึผืจืึธืฆืขืก ืคึฟืึทืจ ื‘ื ื™ืŸ, ื˜ืึทื’ื™ื ื’ ืื•ืŸ ืคึผื•ืฉื™ื ื’ ื“ื™ ื‘ื™ืœื“ ืฆื• Docker Hub. ื“ืึธืก ืื™ื– ืึทืœืข ื–ื™ื™ืขืจ ืขื ืœืขืš ืฆื• ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืžืึทื ื™ื•ืึทืœื™, ืึทื—ื•ืฅ ืึทื– ืžื™ืจ ื“ืึทืจืคึฟืŸ ืึท ืกื˜ืจืึทื˜ืขื’ื™ืข ืคึฟืึทืจ ืึทืกื™ื™ื ื™ื ื’ ื™ื™ื ืฆื™ืง ื˜ืึทื’ืก ืฆื• ื‘ื™ืœื“ืขืจ ืื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื ื’ ืœืึธื’ื™ื ืก. ืื™ืš ื”ืึธื‘ืŸ ืฉื•ื•ืขืจื™ืงื™ื™ื˜ืŸ ืžื™ื˜ ืขื˜ืœืขื›ืข ื“ืขื˜ืึทื™ืœืก ืคื•ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฉืจื™ืคื˜, ืึทื–ืึท ื•ื•ื™ ื˜ืึทื’ื™ื ื’ ืกื˜ืจืึทื˜ืขื’ื™ืข, ืœืึธื’ื™ืŸ, SSH ืฉืœื™ืกืœ ืงืึธื“ื™ืจื•ื ื’, SSH ืงืฉืจ ืคืึทืจืœื™ื™ื’ืŸ. ืื‘ืขืจ ืฆื•ืž ื’ืœื™ืง ืžื™ื™ืŸ ื‘ื•ื™ืคืจืขื ื“ ืื™ื– ื–ื™ื™ืขืจ ื’ื•ื˜ ืžื™ื˜ ื‘ืึทืฉ, ื•ื•ื™ ืžื™ื˜ ืคื™ืœืข ืื ื“ืขืจืข ื–ืื›ืŸ. ืขืจ ื”ืึธื˜ ืžื™ืจ ื’ืขื”ืึธืœืคืŸ ืฉืจื™ื™ื‘ืŸ ื“ืขื ืฉืจื™ืคื˜.

ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืฉืจื™ืคื˜ ืื™ื– ื•ืคึผืœืึธืึทื“ื™ื ื’ ื“ื™ ื‘ื™ืœื“ ืฆื• Docker Hub. ื“ืึธืก ืื™ื– ื’ืึทื ืฅ ื’ืจื™ื ื’ ืฆื• ื˜ืึธืŸ. ื“ื™ ื˜ืึทื’ื™ื ื’ ืกื›ืขืžืข ืื™ืš ื’ืขื•ื•ื™ื™ื ื˜ ื™ื ื•ื•ืึทืœื•ื•ื– ืงืึทืžื‘ื™ื™ื ื™ื ื’ ืึท ื’ื™ื˜ ื”ืึทืฉ ืื•ืŸ ืึท ื’ื™ื˜ ื˜ืึทื’, ืื•ื™ื‘ ืื™ื™ื ืขืจ ื™ื’ื–ื™ืกืฅ. ื“ืึธืก ื™ื ืฉื•ืจื– ืึทื– ื“ื™ ืงื•ื•ื™ื˜ืœ ืื™ื– ื™ื™ื ืฆื™ืง ืื•ืŸ ืžืื›ื˜ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ื™ื“ืขื ื˜ื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื•ื™ืฃ ื•ื•ืึธืก ืขืก ืื™ื– ื‘ืื–ื™ืจื˜. DOCKER_USERNAME ะธ DOCKER_PASSWORD ื–ืขื ืขืŸ ื‘ืึทื ื™ืฆืขืจ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืฉื˜ืขืœืŸ ื ื™ืฆืŸ ื“ื™ Travis CI ืฆื•ื‘ื™ื ื“. Travis CI ื•ื•ืขื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืคึผืจืึธืฆืขืก ืกืขื ืกื™ื˜ื™ื•ื• ื“ืึทื˜ืŸ ืึทื–ื•ื™ ืึทื– ืขืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืคืึทืœืŸ ืื™ืŸ ื“ื™ ืื•ืžืจืขื›ื˜ ื”ืขื ื˜.

ื“ืึธ ืื™ื– ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืฉืจื™ืคื˜ 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}

ื•ื•ืึธืก ื“ื™ ืจื’ืข ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืฉืจื™ืคื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ืขืคึผืขื ื“ืก ืœืขื’ืึทืžืจืข ืื•ื™ืฃ ื•ื•ืึธืก ื‘ืึทืœืขื‘ืึธืก ืื™ืจ ื ื•ืฆืŸ ืื•ืŸ ื•ื•ื™ ื“ื™ ืงืฉืจ ืฆื• ืขืก ืื™ื– ืึธืจื’ืึทื ื™ื–ื™ืจื˜. ืื™ืŸ ืžื™ื™ืŸ ืคืึทืœ, ื–ื™ื ื˜ ืื™ืš ื ื•ืฆืŸ ื“ื™ื’ื™ื˜ืึทืœ ืืงืขืืŸ, ืื™ืš ื ื•ืฆืŸ ื“ื™ ืงืึทืžืึทื ื“ื– ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ืกืขืจื•ื•ืขืจ doctl. ื•ื•ืขืŸ ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜ AWS, ื“ื™ ื ื•ืฆืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ aws, ืื•ืŸ ืื–ื•ื™ ื•ื•ื™ื™ื˜ืขืจ.

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ืขื ืกืขืจื•ื•ืขืจ ืื™ื– ื ื™ืฉื˜ ืกืคึผืขืฆื™ืขืœ ืฉื•ื•ืขืจ. ืึทื–ื•ื™, ืื™ืš ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ ืึท ื“ืจืึธืคึผืœืขื˜ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ื‘ืึทื–ืข ื‘ื™ืœื“. ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ืื ื’ืขื•ื•ื™ื–ืŸ ืึทื– ื“ื™ ืกื™ืกื˜ืขื ืื™ืš ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ืจื™ืงื•ื•ื™ื™ืขืจื– ืึท ืื™ื™ืŸ-ืฆื™ื™ึทื˜ ืžืึทื ื•ืึทืœ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืคื•ืŸ ื“ืึธืงืงืขืจ ืื•ืŸ ืึท ืื™ื™ืŸ-ืฆื™ื™ึทื˜ ืžืึทื ื•ืึทืœ ืงืึทื˜ืขืจ ืคื•ืŸ ื“ืึธืงืงืขืจ. ืื™ืš ื’ืขื•ื•ื™ื™ื ื˜ Ubuntu 18.04 ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ืึธืงืงืขืจ, ืึทื–ื•ื™ ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ ื•ื‘ื•ื ื˜ื• ืฆื• ื˜ืึธืŸ ื“ื™ ื–ืขืœื‘ืข, ืื™ืจ ืงืขื ื˜ ื ืึธืจ ื ืึธื›ืคืึธืœื’ืŸ ื“ืขื ืคึผืฉื•ื˜ ืคื™ืจืขืจ.

ืื™ืš ื‘ื™ืŸ ื ื™ืฉื˜ ื’ืขืจืขื“ื˜ ื“ืึธ ื•ื•ืขื’ืŸ ืกืคึผืขืฆื™ืคื™ืฉ ืงืึทืžืึทื ื“ื– ืคึฟืึทืจ ื“ื™ ื“ื™ื ืกื˜, ื•ื•ื™ื™ึทืœ ื“ืขื ืึทืกืคึผืขืงื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื–ื™ื™ืขืจ ืึทื ื“ืขืจืฉ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืงืึทืกืขืก. ืื™ืš ื•ื•ืขืœ ื ืึธืจ ื’ืขื‘ืŸ ืึท ื’ืขื ืขืจืึทืœ ืคึผืœืึทืŸ ืคื•ืŸ ืงืึทืžืฃ ื ืึธืš ืงืึทื ืขืงื˜ื™ื ื’ ื“ื•ืจืš SSH ืฆื• ื“ื™ ืกืขืจื•ื•ืขืจ ืื•ื™ืฃ ื•ื•ืึธืก ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ืคึผืœื•ื™ื“:

  • ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื•ื•ืึธืก ืื™ื– ืื™ืฆื˜ ืคืœื™ืกื ื“ื™ืง ืื•ืŸ ื”ืึทืœื˜ืŸ ืขืก.
  • ื“ืขืจื ืึธืš ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืงืึทื˜ืขืจ ืึท ื ื™ื™ึท ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ืŸ ื“ืขืจ ื”ื™ื ื˜ืขืจื’ืจื•ื ื˜.
  • ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ื”ื™ื’ืข ืคึผืึธืจื˜ ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ืขืจ ืฆื• 80 - ื“ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืึทืจื™ื™ึทืŸ ื“ืขื ืคึผืœืึทืฅ ืื™ืŸ ืึท ืึทื“ืจืขืก ื•ื•ื™ example.com, ืึธืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคึผืึธืจื˜, ืืœื ื•ื•ื™ ื ื™ืฆืŸ ืึทืŸ ืึทื“ืจืขืก ื•ื•ื™ example.com:5000.
  • ืฆื•ื ืกื•ืฃ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื•ื™ืกืžืขืงืŸ ืึทืœืข ืึทืœื˜ ืงืึทื ื˜ื™ื™ื ืขืจื– ืื•ืŸ ื‘ื™ืœื“ืขืจ.

ืื˜ ืื™ื– ื“ืขืจ ื”ืžืฉืš ืคื•ื ืขื ืฉืจื™ืคื˜.

# ะะฐะนั‚ะธ 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

ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื•ื’ืึทื ื’ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืžื™ื˜ ืึท ืคึผืจื™ื•ื•ืึทื˜ ืฉืœื™ืกืœ ื•ื•ืขืŸ ื’ืจื™ื ื“ืŸ ืึท ืงืฉืจ, ื•ื•ื™ื™ึทืœ ืื™ืจ ืงืขืŸ ื“ืึทืจืคึฟืŸ ืึท ืคึผืจื™ื•ื•ืึทื˜ ืฉืœื™ืกืœ ืฆื• ืึทืงืกืขืก ื“ื™ ืกืขืจื•ื•ืขืจ. ื•ื•ืขืŸ ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ืขื ืฉืœื™ืกืœ, ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืขื ืฉื•ืจ ืึทื– ืขืก ืื™ื– ืกื˜ืึธืจื“ ืกื™ืงื™ื•ืจืœื™ ืื™ืŸ ืึท ื˜ืจืึทื•ื•ื™ืก ืกื™ ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื•ืŸ ืึทื– ืขืก ืื™ื– ื ื™ืฉื˜ ื’ืขื•ื•ื™ื–ืŸ ืขืจื’ืขืฅ.

ืืŸ ืื ื“ืขืจ ื–ืึทืš ืฆื• ื˜ืึธืŸ ืื™ื– ืึทื– ืื™ืจ ืงืขืŸ ื“ืึทืจืคึฟืŸ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ื’ืื ืฆืข ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฉืจื™ืคื˜ ื•ื•ื™ ืื™ื™ืŸ ืฉื•ืจื”, ืœืžืฉืœ - ืžื™ื˜ doctl. ื“ืึธืก ืงืขืŸ ื“ืึทืจืคืŸ ืขื˜ืœืขื›ืข ืขืงืกื˜ืจืข ืžื™.

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

TLS / SSL ืื•ืŸ ืœืึธื•ื“ ื‘ืึทืœืึทื ืกื™ื ื’

ื ืึธืš ืื™ืš ื˜ืึธืŸ ืึทืœืฅ ื“ืขืจืžืื ื˜ ืื•ื™ื‘ืŸ, ื“ื™ ืœืขืฆื˜ืข ืคึผืจืึธื‘ืœืขื ืื™ืš ื’ืขืคึผืœืึธื ื˜ืขืจื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ืึทื– ื“ืขืจ ืกืขืจื•ื•ืขืจ ื”ืื˜ ื ื™ืฉื˜ ืกืกืœ. ื–ื™ื ื˜ ืื™ืš ื ื•ืฆืŸ ืึท Node.js ืกืขืจื•ื•ืขืจ, ืฆื• ืฆื•ื•ื™ื ื’ืขืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ืคืึทืจืงืขืจื˜ ืคึผืจืึทืงืกื™ Nginx ืื•ืŸ Let's Encrypt, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ื™ื ืงืขืจ ืึท ืคึผืœืึทืฅ.

ืื™ืš ื˜ืึทืงืข ื”ืื˜ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ื˜ืึธืŸ ืึทืœืข ื“ืขื SSL ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžืึทื ื™ื•ืึทืœื™, ืึทื–ื•ื™ ืื™ืš ื ืึธืจ ื‘ืืฉืืคืŸ ืึท ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจ ืื•ืŸ ืจืขืงืึธืจื“ืขื“ ื–ื™ื™ึทืŸ ื“ืขื˜ืึทื™ืœืก ืื™ืŸ ื“ื ืก. ืื™ืŸ ื“ืขื ืคืึทืœ ืคื•ืŸ DigitalOcean, ืœืžืฉืœ, ืงืจื™ื™ื™ื˜ื™ื ื’ ืึทืŸ ืึทื•ื˜ืึธ-ืจื™ื ื•ื™ื ื’ ื–ื™ืš-ื’ืขื—ืชืžืขื˜ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืื•ื™ืฃ ื“ื™ ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจ ืื™ื– ืึท ืคึผืฉื•ื˜, ืคืจื™ื™ ืื•ืŸ ืฉื ืขืœ ืคึผืจืึธืฆืขื“ื•ืจ. ื“ืขืจ ืฆื•ื’ืึทื ื’ ื”ืื˜ ื“ื™ ืฆื•ื’ืขืœื™ื™ื’ื˜ ื ื•ืฅ ืึทื– ืขืก ืžืื›ื˜ ืขืก ื–ื™ื™ืขืจ ื’ืจื™ื ื’ ืฆื• ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ SSL ืื•ื™ืฃ ืงื™ื™ืคืœ ืกืขืจื•ื•ืขืจืก ืคืœื™ืกื ื“ื™ืง ื”ื™ื ื˜ืขืจ ืึท ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจ ืื•ื™ื‘ ื“ืืจืฃ. ื“ืึธืก ืึทืœืึทื•ื– ื“ื™ ืกืขืจื•ื•ืขืจืก ื–ื™ืš ื ื™ืฉื˜ ืฆื• "ื˜ืจืึทื›ื˜ืŸ" ื•ื•ืขื’ืŸ SSL, ืึธื‘ืขืจ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ ื ื•ืฆืŸ ื“ื™ ืคึผืึธืจื˜ ื•ื•ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš 80. ืึทื–ื•ื™ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืกืกืœ ืื•ื™ืฃ ืึท ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจ ืื™ื– ืคื™ืœ ื’ืจื™ื ื’ืขืจ ืื•ืŸ ืžืขืจ ื‘ืึทืงื•ื•ืขื ื•ื•ื™ ืึธืœื˜ืขืจื ืึทื˜ื™ื•ื• ืžืขื˜ื”ืึธื“ืก ืคื•ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืกืกืœ.

ืื™ืฆื˜ ืื™ืจ ืงืขื ืขืŸ ืคืึทืจืžืึทื›ืŸ ืึทืœืข ืคึผืึธืจืฅ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ ื•ื•ืึธืก ืึธื ื ืขืžืขืŸ ื™ื ืงืึทืžื™ื ื’ ืงืึทื ืขืงืฉืึทื ื– - ืึทื—ื•ืฅ ื“ื™ ืคึผืึธืจื˜ 80, ื’ืขื ื™ืฆื˜ ืฆื• ื™ื‘ืขืจื’ืขื‘ืŸ ืžื™ื˜ ื“ื™ ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจ, ืื•ืŸ ื“ื™ ืคึผืึธืจื˜ 22 ืคึฟืึทืจ SSH. ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืึทืŸ ืคึผืจื•ื•ื•ืŸ ืฆื• ื’ืœื™ื™ืš ืึทืงืกืขืก ื“ื™ ืกืขืจื•ื•ืขืจ ืื•ื™ืฃ ืงื™ื™ืŸ ืคึผืึธืจืฅ ืื ื“ืขืจืข ื•ื•ื™ ื“ื™ ืฆื•ื•ื™ื™ ื•ื•ืขื˜ ืคืึทืจืœืึธื–ืŸ.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

ื ืึธืš ืื™ืš ื˜ืึธืŸ ืึทืœืฅ ืื™ืš ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ื“ืขื ืžืึทื˜ืขืจื™ืึทืœ, ื ื™ื˜ ื“ื™ ื“ืึธืงืงืขืจ ืคึผืœืึทื˜ืคืึธืจืžืข ืึธื“ืขืจ ื“ื™ ืงืึทื ืกืขืคึผืก ืคื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ืกื™ / ืกื™ ืงื™ื™ื˜ืŸ ื”ืึธื‘ืŸ ืžื™ืจ ื“ืขืจืฉืจืึธืงืŸ. ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ื™ื›ื•ืœืช ืฆื• ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ ืึท ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืงื™ื™ื˜, ื‘ืขืฉืึทืก ื•ื•ืึธืก ื“ื™ ืงืึธื“ ืื™ื– ื˜ืขืกื˜ืขื“ ืื™ื™ื“ืขืจ ืขืก ื’ื™ื™ื˜ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืื•ืŸ ื“ื™ ืงืึธื“ ืื™ื– ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื“ื™ืคึผืœื•ื™ื“ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ. ื“ืึธืก ืื™ื– ืึทืœืข ื ืึธืš ืœืขืคื™ืขืจืขืš ื ื™ื™ึท ืคึฟืึทืจ ืžื™ืจ, ืื•ืŸ ืื™ืš ื‘ื™ืŸ ื–ื™ื›ืขืจ ืึทื– ืขืก ื–ืขื ืขืŸ ื•ื•ืขื’ืŸ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ืžื™ื™ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื•ื•ืึธืจืงืคืœืึธื•ื• ืื•ืŸ ืžืึทื›ืŸ ืขืก ืžืขืจ ืขืคืขืงื˜ื™ื•ื•. ืึทื–ื•ื™ ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ืขื ืขื ื™ืŸ, ื‘ื™ื˜ืข ืœืึธื–ืŸ ืžื™ืจ ื•ื•ื™ืกืŸ. ืžื™ืจ ื•ื•ื™ืกืŸ. ืื™ืš ื”ืึธืคึฟืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ื”ืื˜ ื’ืขื”ืึธืœืคึฟืŸ ืื™ืจ ืื™ืŸ ื“ื™ื™ืŸ ื™ื ื“ืขื•ื•ืขืจื–. ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ื’ืœื•ื™ื‘ืŸ ืึทื– ื ืึธืš ืœื™ื™ืขื ืขืŸ ืขืก, ืื™ืจ ื’ืขืœืขืจื ื˜ ื•ื•ื™ ืคื™ืœ ื•ื•ื™ ืื™ืš ื’ืขืœืขืจื ื˜ ื‘ืฉืขืช ืคื™ื’ื•ืจื™ื ื’ ืื•ื™ืก ืึทืœืฅ ื•ื•ืึธืก ืื™ืš ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ืื™ืŸ ืขืก.

ืคึผืก ืื™ืŸ ืื•ื ื“ื–ืขืจ ืžืึทืจืง ืขืก ืื™ื– ืึท ื‘ื™ืœื“ ื“ืึธืงืงืขืจ, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืžื™ื˜ ืื™ื™ืŸ ื’ื™ื˜. ืื™ืจ ืงืขื ืขืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ืงืึทื ื˜ื™ื™ื ืขืจื– ืื™ืŸ ื•ื•ืคึผืก. ืึทืœืข ื ื™ื™ึทืข ืงืœื™ื™ืึทื ืฅ ื–ืขื ืขืŸ ืคืจื™ื™ 3 ื˜ืขื’ ืคื•ืŸ ื˜ืขืกื˜ื™ื ื’.

ืœื™ื‘ ืœื™ื™ืขื ืขืจ! ืฆื™ ืื™ืจ ื ื•ืฆืŸ ืกื™ / ืกื™ ื˜ืขืงื ืึทืœืึทื“ื–ืฉื™ื– ืื™ืŸ ื“ื™ื™ืŸ ืคึผืจืึทื“ื–ืฉืขืงืก?

ืฉืึทืคึฟืŸ ืึท ืกื™ / ืกื™ ืงื™ื™ื˜ ืื•ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื ื’ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ืึธืงืงืขืจ

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’