CI/CD แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ Docker-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ

แƒฉแƒ”แƒ›แƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ˜ 90-แƒ˜แƒแƒœแƒ˜ แƒฌแƒšแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒแƒšแƒแƒก แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ”. แƒ›แƒแƒจแƒ˜แƒœ แƒซแƒแƒšแƒ˜แƒแƒœ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ แƒ›แƒแƒ—แƒ˜ แƒ›แƒฃแƒจแƒ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜ แƒ›แƒแƒงแƒ•แƒแƒœแƒ. แƒ˜แƒงแƒ Apache แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒกแƒแƒ”แƒ แƒ—แƒ แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ–แƒ”, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ”แƒซแƒšแƒแƒ— แƒจแƒ”แƒฎแƒ•แƒ˜แƒ“แƒ”แƒ— แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” FTP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ แƒแƒ›แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒ— ftp://ftp.example.com. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜ แƒ“แƒ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”. แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ“แƒ แƒ แƒ˜แƒงแƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฃแƒคแƒ แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ˜แƒงแƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒแƒฎแƒšแƒ.

CI/CD แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ Docker-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ

แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ แƒ˜ แƒแƒ—แƒฌแƒšแƒ”แƒฃแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ. แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ˜ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ; แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒ™แƒ แƒ˜แƒ‘แƒแƒœ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒ›แƒ“แƒ”. แƒ”แƒ แƒ—แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ’แƒแƒฎแƒ“แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒฃแƒ™แƒแƒœ แƒ“แƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ’แƒแƒฎแƒ“แƒ.

แƒฉแƒ”แƒ›แƒ˜ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ“แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ. แƒ“แƒ แƒ•แƒ˜แƒชแƒแƒ“แƒ˜, แƒ แƒแƒ› แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—: แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ master GitHub-แƒ–แƒ”. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ•แƒ˜แƒชแƒแƒ“แƒ˜, แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒ˜ แƒžแƒแƒขแƒแƒ แƒ แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“, แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒ›แƒ”แƒ›แƒแƒ แƒ—แƒ แƒฃแƒ–แƒแƒ แƒ›แƒแƒ–แƒแƒ แƒ˜ Kubernetes แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜, แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ Docker Swarm แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ, แƒแƒœ แƒจแƒ”แƒ›แƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒ˜แƒœแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒคแƒšแƒแƒขแƒ˜ แƒžแƒแƒ“แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ’แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒกแƒฎแƒ•แƒแƒแƒ‘แƒ˜แƒ—. แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ˜. แƒ˜แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒ˜แƒ›แƒ”แƒฆแƒฌแƒ˜แƒ แƒ›แƒ˜แƒ–แƒœแƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ, แƒ แƒแƒ› แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒ, แƒ“แƒแƒ›แƒญแƒ˜แƒ แƒ“แƒ CI/CD-แƒ˜แƒก แƒ’แƒแƒชแƒœแƒแƒ‘แƒ.

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— แƒ›แƒชแƒ˜แƒ แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ (แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, Node.js แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜) แƒ“แƒ แƒ’แƒกแƒฃแƒ แƒ— แƒ˜แƒชแƒแƒ“แƒ”แƒ— แƒ แƒแƒ’แƒแƒ  แƒ›แƒแƒแƒฎแƒ“แƒ˜แƒœแƒแƒ— แƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ, แƒ˜แƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒ˜แƒก แƒ แƒแƒช แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒ˜แƒ›แƒแƒก, แƒ แƒแƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒ” แƒคแƒ˜แƒฅแƒ แƒแƒ‘แƒ—, แƒ แƒแƒ› แƒ“แƒแƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ— แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ.

แƒฌแƒ˜แƒœแƒแƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒก แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒกแƒแƒ‘แƒแƒ–แƒ˜แƒกแƒ แƒ’แƒแƒ’แƒ”แƒ‘แƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒ˜แƒกแƒ แƒ“แƒ Bash แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ›แƒแƒก แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜ แƒขแƒ แƒ”แƒ•แƒ˜แƒก CI ะธ แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒชแƒ”แƒœแƒขแƒ แƒ˜.

แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜

แƒ›แƒ” แƒแƒ  แƒ•แƒ˜แƒขแƒงแƒ•แƒ˜, แƒ แƒแƒ› แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒฃแƒžแƒ˜แƒ แƒแƒ‘แƒแƒ“ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ”แƒฌแƒแƒ“แƒแƒก "แƒขแƒฃแƒขแƒแƒ แƒ˜แƒแƒšแƒ˜". แƒ”แƒก แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒแƒ“ แƒแƒ แƒ˜แƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ›แƒ” แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ แƒแƒช แƒ•แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ” แƒ“แƒ แƒแƒฆแƒ•แƒฌแƒ”แƒ  แƒ˜แƒ› แƒžแƒ แƒแƒชแƒ”แƒกแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ” แƒ•แƒแƒ แƒ’แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜ แƒ’แƒแƒœแƒกแƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒšแƒแƒ“, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒžแƒแƒกแƒ˜แƒ—.

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒช แƒฉแƒ”แƒ›แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ.

แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ’แƒแƒ แƒ“แƒ master, แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜:

  • Travis CI-แƒ–แƒ” แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ.
  • แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜, แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ แƒ“แƒ แƒ‘แƒแƒšแƒแƒ“แƒแƒœ แƒ‘แƒแƒšแƒแƒ›แƒ“แƒ” แƒขแƒ”แƒกแƒขแƒ˜.

แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ˜แƒก master, แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜:

  • แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ–แƒ”แƒ›แƒแƒ— แƒœแƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ˜, แƒžแƒšแƒฃแƒก...
  • แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒแƒ“แƒ–แƒ”, แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒ–แƒ” แƒ“แƒแƒงแƒ แƒ“แƒœแƒแƒ‘แƒ˜แƒ—.
  • แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ Docker Hub-แƒ–แƒ”.
  • แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ—แƒแƒœ.
  • แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ Docker Hub-แƒ“แƒแƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”.
  • แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒฉแƒ”แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ” แƒแƒฎแƒšแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ.

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒแƒ“ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒชแƒ˜แƒ— Docker-แƒ˜แƒก, แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒ  แƒ˜แƒœแƒ”แƒ แƒ•แƒ˜แƒฃแƒšแƒแƒ—. แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ›แƒแƒ’แƒ˜แƒงแƒ•แƒ”แƒ‘แƒ˜.

แƒ แƒ แƒแƒ แƒ˜แƒก CI/CD?

แƒแƒ‘แƒ แƒ”แƒ•แƒ˜แƒแƒขแƒฃแƒ แƒ CI/CD แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก "แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ/แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ".

โ– แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ

แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ“แƒ แƒแƒกแƒแƒช แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒฆแƒ”แƒ‘แƒ”แƒœ แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ—แƒแƒœ (แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ—แƒแƒœ) master). แƒแƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“, แƒ™แƒแƒ“แƒ˜แƒก แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ–แƒ˜แƒ—.

โ– แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ

แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒฎแƒจแƒ˜แƒ แƒ˜, แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜. CI/CD แƒแƒ™แƒ แƒแƒœแƒ˜แƒ›แƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ” แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช โ€žแƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒโ€œ. แƒ”แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ, แƒ แƒแƒช โ€žแƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒโ€œ, แƒ›แƒแƒ’แƒ แƒแƒ› โ€žแƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒโ€œ แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ”.

แƒœแƒแƒชแƒœแƒแƒ‘แƒแƒ‘แƒ

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ“แƒ˜ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒกแƒฌแƒแƒ•แƒšแƒแƒ“, แƒฐแƒฅแƒ•แƒ˜แƒ TakeNote. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ•แƒ”แƒ‘ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒ›แƒ” แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘, แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒšแƒแƒ“. แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ•แƒชแƒแƒ“แƒ” JAMStack-แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜, แƒแƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฌแƒ˜แƒœแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ แƒแƒ—แƒ แƒ˜แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜แƒก แƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ˜แƒก แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— Netlify. แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ˜แƒก แƒ›แƒแƒขแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“, แƒ›แƒ” แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒ แƒแƒช แƒ˜แƒ›แƒแƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ“แƒ, แƒ แƒแƒ› แƒ›แƒ” แƒฃแƒœแƒ“แƒ แƒฉแƒแƒ›แƒแƒ›แƒ”แƒงแƒแƒšแƒ˜แƒ‘แƒ”แƒ‘แƒ˜แƒœแƒ แƒฉแƒ”แƒ›แƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒแƒ แƒ˜แƒก Express แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก Node.js แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜, แƒ”แƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒแƒœ React แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก แƒ“แƒ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก API-แƒก. แƒ”แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ แƒ›แƒ˜แƒฐแƒงแƒ•แƒ”แƒ‘แƒ แƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ•แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒขแƒ”แƒ™แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ.

แƒ’แƒแƒ•แƒ›แƒแƒ แƒ—แƒ” แƒ™แƒแƒœแƒกแƒฃแƒšแƒขแƒแƒชแƒ˜แƒ แƒ›แƒ”แƒ’แƒแƒ‘แƒแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒขแƒ˜แƒ แƒ“แƒ แƒ•แƒ™แƒ˜แƒ—แƒฎแƒ”, แƒ แƒ แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒกแƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ”แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ” แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ. แƒ›แƒแƒœ แƒ›แƒแƒ›แƒชแƒ แƒ˜แƒ“แƒ”แƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜. แƒแƒ› แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒก แƒฅแƒแƒœแƒ แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ“แƒ, แƒ แƒแƒ› แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ’แƒแƒ›แƒ”แƒ’แƒ Docker-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ.

docker

Docker แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒก แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ“แƒ”แƒก, แƒ’แƒแƒœแƒšแƒแƒ’แƒ“แƒ”แƒก แƒ“แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก แƒ˜แƒ›แƒแƒ•แƒ” แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœแƒแƒช แƒ™แƒ˜, แƒ—แƒฃ แƒ—แƒแƒ•แƒแƒ“ Docker แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ›แƒ” แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ Docker แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒ˜แƒก แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜แƒก (CLI) แƒฎแƒ”แƒšแƒจแƒ˜ แƒฉแƒแƒ’แƒ“แƒ”แƒ‘แƒ. แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ Docker แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒก แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ”แƒฌแƒแƒ“แƒแƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒ™แƒแƒคแƒ˜แƒ แƒ“แƒ แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ’แƒแƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ˜แƒ’แƒแƒ—, แƒ แƒแƒ› แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒ“แƒ’แƒ›แƒ”แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— Docker Desktop (Mac แƒแƒœ Windows-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก).

Docker Hub แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ, แƒ แƒแƒช GitHub git แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ แƒ”แƒ”แƒกแƒขแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก npm JavaScript แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒแƒœแƒšแƒแƒ˜แƒœ แƒกแƒแƒชแƒแƒ•แƒ˜ Docker แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒกแƒแƒช 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
---

โ– แƒขแƒ”แƒ’แƒ”แƒ‘แƒ˜

แƒขแƒ”แƒ’แƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ.

โ– Docker แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ

แƒแƒฅ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ Docker แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒ.

แƒ’แƒฃแƒœแƒ“แƒ˜

แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒ˜

แƒ”แƒคแƒ”แƒฅแƒขแƒ˜

แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ

แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ

แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ Dockerfile-แƒ“แƒแƒœ

แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒขแƒ”แƒ’แƒ˜

แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ

แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒ

docker แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜

แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ

แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒ˜

แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ

แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜

แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”

แƒ“แƒแƒ™แƒ”แƒ  แƒ‘แƒ˜แƒซแƒ’แƒ˜

แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ

แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ แƒ”แƒ”แƒกแƒขแƒ แƒจแƒ˜

แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ–แƒ˜แƒ“แƒ•แƒ

แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ

แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ แƒ”แƒ”แƒกแƒขแƒ แƒ˜แƒ“แƒแƒœ

แƒ“แƒแƒ™แƒ”แƒ แƒ˜ แƒžแƒก

แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜

แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒ˜

แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒฅแƒšแƒ˜แƒแƒ•แƒ˜

แƒกแƒฃแƒ แƒแƒ—แƒ˜/แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜

แƒ’แƒแƒ›แƒแƒฃแƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ

โ–แƒ“แƒแƒ™แƒ”แƒ แƒคแƒแƒ˜แƒšแƒ˜

แƒ›แƒ” แƒ•แƒ˜แƒชแƒ˜, แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒ แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“. แƒ›แƒ” แƒ›แƒแƒฅแƒ•แƒก Webpack แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒ–แƒ React แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ›แƒ” แƒ›แƒแƒฅแƒ•แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก Node.js-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒš แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒžแƒแƒ แƒขแƒ–แƒ” 5000. แƒ”แƒก แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

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

แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก, แƒ แƒแƒ› แƒแƒ› แƒ›แƒแƒกแƒแƒšแƒ˜แƒก แƒกแƒแƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜ แƒแƒ  แƒ›แƒแƒฅแƒ•แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ, แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ Node แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก.

แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒแƒฌแƒแƒ“แƒแƒ— แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ Docker-แƒก. แƒ”แƒก แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”.แƒฌ Dockerfile, แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก root แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. แƒ”แƒก แƒคแƒแƒ˜แƒšแƒ˜, แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“, แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ’แƒแƒฃแƒ’แƒ”แƒ‘แƒแƒ แƒ˜ แƒฉแƒแƒœแƒก.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก, แƒ แƒแƒช แƒ›แƒแƒก แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒฆแƒฌแƒ”แƒ แƒก, แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ—, แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒก. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ:

  • FROM โ€” แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒคแƒแƒ˜แƒšแƒก. แƒ˜แƒ’แƒ˜ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒกแƒแƒ‘แƒแƒ–แƒ˜แƒกแƒ แƒกแƒฃแƒ แƒแƒ—แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒ“แƒแƒช แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜.
  • แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ โ€” แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒฌแƒงแƒแƒ แƒแƒ“แƒแƒœ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒจแƒ˜.
  • WORKDIR โ€” แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
  • RUN - แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜.
  • แƒ’แƒแƒ›แƒแƒแƒจแƒ™แƒแƒ แƒแƒ•แƒ”แƒ‘แƒ - แƒžแƒแƒ แƒขแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜.
  • แฒจแฒ”แฒกแฒ•แฒšแฒ˜แฒก แฒฌแฒ”แฒ แฒขแฒ˜แฒšแฒ˜ โ€” แƒแƒฆแƒกแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ.

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 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 แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—, แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“. แƒฉแƒ•แƒ”แƒœ แƒแƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ Docker Hub-แƒจแƒ˜. แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒซแƒแƒšแƒ˜แƒแƒœ แƒ™แƒแƒ แƒ’แƒ˜ แƒฌแƒ˜แƒœแƒกแƒ•แƒšแƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ˜แƒ–แƒœแƒ˜แƒกแƒ™แƒ”แƒœ. แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒแƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ แƒ˜ โ€‹โ€‹แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ:

  • CI แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
  • แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ›แƒแƒœ แƒจแƒ”แƒซแƒšแƒแƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ“แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ.

แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒขแƒ แƒ”แƒ•แƒ˜แƒก CI. แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ - DitigalOcean.

แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก, แƒ แƒแƒ› แƒแƒฅ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ˜แƒ—. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Travis CI-แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— CircleCI แƒแƒœ Github Actions. แƒ“แƒ แƒœแƒแƒชแƒ•แƒšแƒแƒ“ DigitalOcean - AWS แƒแƒœ Linode.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ Travis CI-แƒ—แƒแƒœ แƒ“แƒ แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ›แƒแƒฅแƒ•แƒก แƒ แƒแƒฆแƒแƒช แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒจแƒ˜. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒแƒฎแƒšแƒ แƒ›แƒแƒ™แƒšแƒ”แƒ“ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒแƒ•แƒแƒ›แƒ–แƒแƒ“แƒแƒ— แƒ˜แƒ’แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“.

แƒขแƒ แƒ”แƒ•แƒ˜แƒก 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 แƒ“แƒ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก root แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜, แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒแƒก แƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒ˜แƒก แƒชแƒ˜แƒ™แƒšแƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜. แƒ”แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜ แƒฉแƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒšแƒ˜แƒ แƒ˜แƒ› แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ:

  • 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 แƒ”แƒœแƒแƒ“ แƒ“แƒ แƒ•แƒฃแƒ—แƒฎแƒแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก, แƒ“แƒแƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ Docker-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜.

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ แƒแƒช แƒฉแƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒšแƒ˜แƒ .travis.yml, แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒงแƒ•แƒ”แƒšแƒ pull แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜, แƒ—แƒฃ แƒกแƒฎแƒ•แƒ แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜. แƒ”แƒก แƒ’แƒแƒชแƒœแƒแƒ‘แƒ”แƒ‘แƒ—, แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒ™แƒแƒ“แƒ˜ แƒ›แƒ–แƒแƒ“ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ แƒฉแƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“. masterแƒ“แƒ แƒ“แƒแƒแƒ แƒฆแƒ•แƒ”แƒ•แƒก แƒ—แƒฃ แƒแƒ แƒ แƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก. แƒแƒ› แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ  แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒ›แƒ” แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒ•แƒ›แƒแƒ แƒ—แƒแƒ• Webpack dev แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒคแƒแƒœแƒ–แƒ” (แƒ”แƒก แƒแƒ แƒ˜แƒก แƒฉแƒ”แƒ›แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒ”แƒšแƒ˜) แƒ“แƒ แƒ•แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘ แƒขแƒ”แƒกแƒขแƒ”แƒ‘แƒก.

แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ—, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒก แƒกแƒแƒ›แƒ™แƒ”แƒ แƒ“แƒ” แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒ“แƒแƒคแƒแƒ แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒฅ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒžแƒแƒ•แƒแƒ— แƒ›แƒแƒ™แƒšแƒ” แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ Jest-แƒ˜แƒก, Travis CI-แƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒ”แƒ–แƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒแƒ› แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ—.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒแƒฅ แƒแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜ .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

แƒแƒฅ แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ pull-แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

โ– แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ

แƒ˜แƒ› แƒ•แƒแƒ แƒแƒฃแƒ“แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒขแƒ”แƒกแƒขแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ, แƒ แƒแƒช แƒแƒ แƒแƒกแƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒแƒ, แƒ’แƒแƒœแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒ™แƒแƒ“แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก 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-แƒ–แƒ”. แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ. แƒ—แƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”, แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก git hash-แƒ˜แƒกแƒ แƒ“แƒ git tag-แƒ˜แƒก แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒแƒก, แƒ—แƒฃ แƒแƒกแƒ”แƒ—แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก. แƒ”แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก, แƒ แƒแƒ› แƒขแƒ”แƒ’แƒ˜ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜แƒ แƒ“แƒ แƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒก แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒ˜แƒก แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. 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}

แƒ แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ” แƒœแƒแƒฌแƒ˜แƒšแƒ˜, แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒš แƒฐแƒแƒกแƒขแƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒกแƒ—แƒแƒœ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜. แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ Digital Ocean-แƒก, แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ—แƒแƒœ แƒ“แƒแƒกแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒแƒฅแƒขแƒš. AWS-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ aws, แƒ“แƒ แƒแƒกแƒ” แƒจแƒ”แƒ›แƒ“แƒ”แƒ’.

แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ  แƒ˜แƒงแƒ แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ แƒ—แƒฃแƒšแƒ˜. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒ” แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” แƒฌแƒ•แƒ”แƒ—แƒ˜ แƒ‘แƒแƒ–แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”. แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก, แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒก แƒ›แƒ˜แƒ”แƒ  แƒแƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก Docker-แƒ˜แƒก แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒฎแƒ”แƒšแƒ˜แƒ— แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒแƒก แƒ“แƒ Docker-แƒ˜แƒก แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒฎแƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก. แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ” Ubuntu 18.04 Docker-แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— Ubuntu-แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒก แƒ’แƒแƒกแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒšแƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒ˜แƒฐแƒงแƒ•แƒ”แƒ— แƒแƒ› แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ.

แƒ›แƒ” แƒแƒฅ แƒแƒ  แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒแƒกแƒžแƒ”แƒฅแƒขแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒแƒ“แƒ”แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜. แƒ›แƒ” แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒ˜แƒ•แƒชแƒ”แƒ› แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒ’แƒแƒ“ แƒ’แƒ”แƒ’แƒ›แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก 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

แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒ— แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒงแƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜. แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒแƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ“ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ Travis CI แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜ แƒ“แƒ แƒแƒ แƒกแƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜.

แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ แƒแƒ›, แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก, แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ— แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ˜ แƒฎแƒแƒ–แƒ˜แƒ—, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ - แƒ”แƒ แƒ—แƒแƒ“ doctl. แƒแƒ›แƒแƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒซแƒแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒก.

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

TLS/SSL แƒ“แƒ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ‘แƒแƒšแƒแƒœแƒกแƒ˜แƒ แƒ”แƒ‘แƒ

แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ” แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒ–แƒ”แƒ›แƒแƒ— แƒ˜แƒงแƒ แƒœแƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ˜, แƒ‘แƒแƒšแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒช แƒ“แƒแƒ›แƒฎแƒ•แƒ“แƒ แƒ˜แƒงแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒแƒ  แƒฐแƒฅแƒแƒœแƒ“แƒ SSL. แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ›แƒ” แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ Node.js แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก, แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒ แƒžแƒ แƒแƒฅแƒกแƒ˜ Nginx แƒ“แƒ Let's Encrypt, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—.

แƒ›แƒ” แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒแƒ› SSL แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ แƒ˜ แƒ“แƒ แƒฉแƒแƒ•แƒฌแƒ”แƒ แƒ” แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ DNS-แƒจแƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, DigitalOcean-แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ แƒ–แƒ” แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜, แƒฃแƒคแƒแƒกแƒ แƒ“แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒแƒ. แƒแƒ› แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒแƒก แƒแƒฅแƒ•แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ› แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒก SSL-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก แƒ›แƒ แƒแƒ•แƒแƒš แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ แƒ˜แƒก แƒฃแƒ™แƒแƒœ, แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜. แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ—แƒแƒ•แƒแƒ“ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒก แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  "แƒ˜แƒคแƒ˜แƒฅแƒ แƒแƒœ" SSL-แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒแƒ•แƒ” แƒ“แƒ แƒแƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒœ แƒžแƒแƒ แƒขแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก. 80. แƒแƒกแƒ” แƒ แƒแƒ›, SSL-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ แƒ–แƒ” แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒ“แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” SSL-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜.

แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฎแƒฃแƒ แƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒžแƒแƒ แƒขแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฆแƒ”แƒ‘แƒก แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒš แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒก - แƒ’แƒแƒ แƒ“แƒ แƒžแƒแƒ แƒขแƒ˜แƒกแƒ 80, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ แƒ—แƒแƒœ แƒ“แƒ แƒžแƒแƒ แƒขแƒ—แƒแƒœ แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก 22 SSH-แƒกแƒ—แƒ•แƒ˜แƒก. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒขแƒ”แƒ‘แƒ–แƒ” แƒ•แƒ”แƒ  แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ“แƒ”แƒ‘แƒ.

แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜

แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ” แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒ–แƒ”แƒช แƒแƒ› แƒ›แƒแƒกแƒแƒšแƒแƒจแƒ˜ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”, แƒแƒ แƒช Docker แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ แƒ“แƒ แƒแƒ แƒช แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ CI/CD แƒฏแƒแƒญแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒฆแƒแƒ  แƒจแƒ”แƒ›แƒแƒจแƒ˜แƒœแƒ”แƒ‘แƒ“แƒ. แƒ›แƒ” แƒจแƒ”แƒ•แƒซแƒ”แƒšแƒ˜ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ“แƒ แƒแƒกแƒแƒช แƒ™แƒแƒ“แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒ•แƒšแƒแƒ›แƒ“แƒ” แƒ“แƒ แƒ™แƒแƒ“แƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒšแƒแƒ’แƒ“แƒ”แƒ‘แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”. แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒฎแƒแƒšแƒ˜แƒ แƒ“แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒแƒ , แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ’แƒ–แƒ”แƒ‘แƒ˜, แƒ แƒแƒ› แƒ’แƒแƒ•แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ แƒฉแƒ”แƒ›แƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒœแƒแƒ™แƒแƒ“แƒ˜ แƒ“แƒ แƒ’แƒแƒ•แƒฎแƒแƒ“แƒ แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— แƒ แƒแƒ˜แƒ›แƒ” แƒ˜แƒ“แƒ”แƒ แƒแƒ› แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒจแƒ”แƒ›แƒแƒขแƒงแƒแƒ‘แƒ˜แƒœแƒแƒ—. me แƒ•แƒ˜แƒชแƒ˜. แƒ˜แƒ›แƒ”แƒ“แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒจแƒ˜. แƒ›แƒ˜แƒœแƒ“แƒ แƒ›แƒฏแƒ”แƒ แƒแƒ“แƒ”แƒก, แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”แƒ— แƒ˜แƒ›แƒ“แƒ”แƒœแƒ˜, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒช แƒ›แƒ” แƒ•แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ” แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒ แƒฉแƒ”แƒ•แƒ˜แƒกแƒแƒก, แƒ แƒแƒ–แƒ”แƒช แƒ›แƒแƒกแƒจแƒ˜ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”.

PS แƒฉแƒ•แƒ”แƒœแƒก แƒ‘แƒแƒ–แƒแƒ แƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜ docker, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒฅ VPS. แƒงแƒ•แƒ”แƒšแƒ แƒแƒฎแƒแƒš แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒก แƒ”แƒซแƒšแƒ”แƒ•แƒ 3 แƒ“แƒฆแƒ˜แƒแƒœแƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒฃแƒคแƒแƒกแƒแƒ“.

แƒซแƒ•แƒ˜แƒ แƒคแƒแƒกแƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒก! แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— CI/CD แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒจแƒ˜?

CI/CD แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ Docker-แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ