ืืื ืืขืฉืจืืื ืืืื ืขืจืฉืืขืจ ืืืขืืกืืืขืก ืืื ืื ืฉืคึผืขื 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 ืึทืงืจืึทื ืื ืืื ืืื ืกืคึผืขืื ืืื " ืงืขืกืืืืขืจืืืง ืขืงืกืคึผืจืขืก." ืืึธืก ืืื ืืืืกืืงืื ืื ืืขืืืข ืืื "ืงืืึทืขืจืืขื ืืืคึผืืืืืึทื ื", ืึธืืขืจ "ืงืึธื ืืื ืืึธืืก ืขืงืกืคึผืจืขืก" ืืืคึผืืืื ืื ื ืืื ืฆื ืืึทื ืืืึทืื ืืึทืฉืืขืืืงื ืขื ืืขืจืื ืืขื ืืืืืขืจ ืืืจ ืึธื ืืืืื ืื ืคึผืจืืืขืงื ืืืคึผืืืืืึทื ื ืคึผืจืึธืฆืขืก.
ืืขืืื ื ืกืืึทืจืืขื
ืื ืึทืคึผ ืืืึธืก ืืื ืืขืืืืื ื ืฆื ืืขืจื ืขื ืึทืืข ืืขื ืืื ืืขืจืืคื
ืืื ืืืื ืคืึทื, ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืึทื ืขืงืกืคึผืจืขืกืก ืกืขืจืืืขืจ ืคืืืกื ืืืง ืืื ืื Node.js ืกืืืืืืข, ืกืขืจืืืื ื ืึท ืืืื-ืืืึทื ืจืขืึทืงื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืฉืืืฆื ืึท ืืืืขืจ ืกืขืจืืืขืจ ืืืึทื API. ืื ืึทืจืงืึทืืขืงืืฉืขืจ ืืืื ืื ืกืืจืึทืืขืืืข ืืืึธืก ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื ืืื
ืืื ืืึทืจืึทืื ืืื ืืื
ืืึธืงืงืขืจ
Docker ืืื ืึท ืืขืฆืืึทื ืืืึธืก, ืืึทื ืง ืฆื ืงืึทื ืืืื ืขืจืืืึทืืืึธื ืืขืื ืึธืืึธืืืข, ืึทืืึทืื ืึทืคึผืืึทืงืืืฉืึทื ื ืฆื ืืืื ืืืืื ืคืื ืื ืืขืจืืขืืืืื, ืืืคึผืืืื ืืื ืืืืคื ืืื ืืขืจ ืืขืืืืงืขืจ ืกืืืืืืข, ืืคืืื ืืืื ืื ืืึธืงืงืขืจ ืคึผืืึทืืคืึธืจืืข ืืื ืืืืคื ืืื ืคืึทืจืฉืืืขื ืข ืื ืืืืืจืึทื ืืึทื ืฅ. ืขืจืฉืืขืจ, ืืื ืืืจืฃ ืฆื ืืึทืงืืืขื ืืืื ืืขื ื ืืืืฃ ืื Docker ืืึทืคึฟืขืื ืฉืืจื ืืืฉืืจืื (CLI).
ืืึธืงืขืจ ืืื ืืื ืืขืขืจืขื ืืขืจ ืืขืืืืงืขืจ ืืึทื ืืื
ืึทืืื, ืฆื ืึธื ืืืืื ืืื 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
ืืืื
ืืืื ืืึทืืื ื
ืืืื
ืืืกืืื ื ืืืืืขืจ
ืงืึทื ืืืื ืขืจ
ืคืืืกื ืืืง ืึท ืงืึทื ืืืื ืขืจ ืืืืืจื ืืืืฃ ืึท ืืืื
ืืืื
ืืคึผืืึธืึทืืื ื ืึท ืืืื ืฆื ืื ืจืขืืืกืืจื
ืืืื
ืืึธืืืื ื ืึท ืืืื ืคืื ืื ืจืขืืืกืืจื
ืงืึทื ืืืื ืขืจ
ืืืกืืื ื ืงืึทื ืืืื ืขืจื
ืืืื / ืงืึทื ืืืื ืขืจ
ืจืืืืืืื ื ืึทื ืืืื ืงืึทื ืืืื ืขืจื ืืื ืืืืืขืจ
โืืึธืงืงืขืจ ืืขืงืข
ืืื ืืืืกื ืืื ืฆื ืืืืคื ืึท ืคึผืจืึธืืืงืฆืืข ืึทืคึผืืึทืงืืืฉืึทื ืืึธืืงืึทืื. ืืื ืืึธืื ืึท ืืืขืืคึผืึทืงืง ืงืึทื ืคืืืืขืจืืืฉืึทื ืืืืืื ื ืฆื ืืืืขื ืึท ืคืึทืจืืืง ืจืขืึทืงื ืึทืคึผืืึทืงืืืฉืึทื. ืืขืจื ืึธื, ืืื ืืึธืื ืึท ืืึทืคึฟืขื ืืืึธืก ืกืืึทืจืฅ ืึท 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 ืืื ืกืืึทืจืืขื, ืืขืจ ืกืขืจืืืขืจ ืืื ืืึธื ืืฉื, ืขืงืกืึทืงืืืืื ื ืื ืงืึทืืึทื ืื ืกืคึผืขืกืืคืืขื ืืื ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืขืงืข, ืึทืจืืึทื ืืขืจืขืื ื ืืืคึผืืืืื ื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืจืืคึผืึทืืึทืืึธืจื ืฆืืืืืื.
โ ืึทืจืืขื ืืขืื ืฆืืงื
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
, ืืื ืฆื ืขืก ืืืขื ืืจืขืื ืื ืคึผืจืืืขืงื ืืืืขื ืคึผืจืึธืฆืขืก. ืืื ืืขื ืืืืืืืข ืงืึทื ืคืืืืขืจืืืฉืึทื, ืืื ืื ืกืืึทืืืจื ืึทืืฅ ืืึธืืงืึทืื, ืืืืคื ืื ืืืขืืคึผืึทืงืง ืืขืื ืกืขืจืืืขืจ ืืื ืืขืจ ืืื ืืขืจืืจืื ื (ืืึธืก ืืื ืึท ืฉืืจืื ืคืื ืืืื ืืืึธืจืงืคืืึธืื) ืืื ืืืืคื ืืขืกืฅ.
ืืืื ืืืจ ืืืืื ืืืื ืจืืคึผืึทืืึทืืึธืจื ืฆื ืืืืึทืื ืืึทืืืฉืื ืืืึธืก ืื ืืืงืืืฅ ืคึผืจืึธืืข ืงืึทืืืขืจืืืืฉ,
ืึทืืื ืืึธ ืืื ืืขืจ ืืื ืืึทืื ืคืื ืืขืจ ืืขืงืข .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}
ืืืึธืก ืื ืจืืข ืืืื ืคืื ืื ืฉืจืืคื ืืืขื ืืืื ืืขืคึผืขื ืืก ืืขืืึทืืจืข ืืืืฃ ืืืึธืก ืืึทืืขืืึธืก ืืืจ ื ืืฆื ืืื ืืื ืื ืงืฉืจ ืฆื ืขืก ืืื ืึธืจืืึทื ืืืืจื. ืืื ืืืื ืคืึทื, ืืื ื ืืื ื ืืฆื ืืืืืืึทื ืืงืขืื, ืืื ื ืืฆื ืื ืงืึทืืึทื ืื ืฆื ืคืึทืจืืื ืื ืฆื ืื ืกืขืจืืืขืจ 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 ืกืขืจืืืขืจ, ืฆื ืฆืืืื ืืขื
ืืื ืืึทืงืข ืืื ื ืืฉื ืืืขืื ืฆื ืืึธื ืึทืืข ืืขื SSL ืงืึทื ืคืืืืขืจืืืฉืึทื ืืึทื ืืืึทืื, ืึทืืื ืืื ื ืึธืจ ืืืฉืืคื ืึท ืืึทืกืข ืืึทืืึทื ืกืขืจ ืืื ืจืขืงืึธืจืืขื ืืืึทื ืืขืืึทืืืก ืืื ืื ืก. ืืื ืืขื ืคืึทื ืคืื DigitalOcean, ืืืฉื, ืงืจืืืืืื ื ืึทื ืึทืืืึธ-ืจืื ืืื ื ืืื-ืืขืืชืืขื ืืึทืืืืึทืื ืืืืฃ ืื ืืึทืกืข ืืึทืืึทื ืกืขืจ ืืื ืึท ืคึผืฉืื, ืคืจืื ืืื ืฉื ืขื ืคึผืจืึธืฆืขืืืจ. ืืขืจ ืฆืืืึทื ื ืืื ืื ืฆืืืขืืืืื ื ืืฅ ืึทื ืขืก ืืืื ืขืก ืืืืขืจ ืืจืื ื ืฆื ืฉืืขืื ืึทืจืืืฃ SSL ืืืืฃ ืงืืืคื ืกืขืจืืืขืจืก ืคืืืกื ืืืง ืืื ืืขืจ ืึท ืืึทืกืข ืืึทืืึทื ืกืขืจ ืืืื ืืืจืฃ. ืืึธืก ืึทืืึทืื ืื ืกืขืจืืืขืจืก ืืื ื ืืฉื ืฆื "ืืจืึทืืื" ืืืขืื SSL, ืึธืืขืจ ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื ื ืืฆื ืื ืคึผืึธืจื ืืื ืืขืืืืื ืืืขื 80
. ืึทืืื ืืึทืฉืืขืืืงื ืกืกื ืืืืฃ ืึท ืืึทืกืข ืืึทืืึทื ืกืขืจ ืืื ืคืื ืืจืื ืืขืจ ืืื ืืขืจ ืืึทืงืืืขื ืืื ืึธืืืขืจื ืึทืืืื ืืขืืืึธืืก ืคืื ืืึทืฉืืขืืืงื ืกืกื.
ืืืฆื ืืืจ ืงืขื ืขื ืคืึทืจืืึทืื ืึทืืข ืคึผืึธืจืฅ ืืืืฃ ืื ืกืขืจืืืขืจ ืืืึธืก ืึธื ื ืขืืขื ืื ืงืึทืืื ื ืงืึทื ืขืงืฉืึทื ื - ืึทืืืฅ ืื ืคึผืึธืจื 80
, ืืขื ืืฆื ืฆื ืืืขืจืืขืื ืืื ืื ืืึทืกืข ืืึทืืึทื ืกืขืจ, ืืื ืื ืคึผืึธืจื 22
ืคึฟืึทืจ SSH. ืืื ืึท ืจืขืืืืืึทื, ืึทื ืคึผืจืืืื ืฆื ืืืืื ืึทืงืกืขืก ืื ืกืขืจืืืขืจ ืืืืฃ ืงืืื ืคึผืึธืจืฅ ืื ืืขืจืข ืืื ืื ืฆืืืื ืืืขื ืคืึทืจืืึธืื.
ืจืขืืืืืึทืื ืคืื
ื ืึธื ืืื ืืึธื ืึทืืฅ ืืื ืืขืจืขืื ืืืขืื ืืขื ืืึทืืขืจืืึทื, ื ืื ืื ืืึธืงืงืขืจ ืคึผืืึทืืคืึธืจืืข ืึธืืขืจ ืื ืงืึทื ืกืขืคึผืก ืคืื ืึธืืึทืืืืืื ืกื / ืกื ืงืืืื ืืึธืื ืืืจ ืืขืจืฉืจืึธืงื. ืืื ืืื ืืขืืืขื ืืืืืืช ืฆื ืฉืืขืื ืึทืจืืืฃ ืึท ืงืขืกืืืืขืจืืืง ืื ืืึทืืจืืืฉืึทื ืงืืื, ืืขืฉืึทืก ืืืึธืก ืื ืงืึธื ืืื ืืขืกืืขื ืืืืืขืจ ืขืก ืืืื ืืื ืคึผืจืึธืืืงืฆืืข ืืื ืื ืงืึธื ืืื ืืืืืึธืืึทืืืฉ ืืืคึผืืืื ืืืืฃ ืื ืกืขืจืืืขืจ. ืืึธืก ืืื ืึทืืข ื ืึธื ืืขืคืืขืจืขื ื ืืึท ืคึฟืึทืจ ืืืจ, ืืื ืืื ืืื ืืืืขืจ ืึทื ืขืก ืืขื ืขื ืืืขืื ืฆื ืคึฟืึทืจืืขืกืขืจื ืืืื ืึธืืึทืืืืืื ืืืึธืจืงืคืืึธืื ืืื ืืึทืื ืขืก ืืขืจ ืขืคืขืงืืืื. ืึทืืื ืืืื ืืืจ ืืึธื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืืขื ืขื ืื, ืืืืข ืืึธืื ืืืจ ืืืืกื.
ืคึผืก ืืื ืืื ืืืขืจ
ืืื ืืืืขื ืขืจ! ืฆื ืืืจ ื ืืฆื ืกื / ืกื ืืขืงื ืึทืืึทืืืฉืื ืืื ืืืื ืคึผืจืึทืืืฉืขืงืก?
ืืงืืจ: www.habr.com