áááºá¹ááá¬áá«áá°ááá¯ááºážá¡ááœááº!
áá±á«ááºážá ááºááᯠááá·áºááá·áºááŒáá·áºáá»ááºáá±ááá·áº áá«á·áá¬ááºáááºážá¡ááŒá±á¬ááºáž áááºážáááºážááŒá±á¬ááŒáá¬á ááá¯ááŸááºáááá·áºáááº-
entry ááá¯
áá»áœááºá¯ááºááẠserver áá±á«áºááœáẠfrontend single page applicationsá scala/java ááŸáá·áº nodejs áá»á¬ážááᯠáá®ááœááºáá¬ááœáẠá¡ááœá±á·á¡ááŒá¯á¶ááŸááá±á¬ áááá¯ááááºáá¬áá áºáŠážááŒá áºáááºá
Docker ááẠáá±á¬ááºážáááºáá¯á¶á០ááá¹áá¬ážááŒá áºááŒá®áž áá±áá°áá»á¡á¬ážááŒáá·áº á¡ááœááºáá±á¬ááºážááœááºáá±á¬ tool áá áºáá¯ááŒá áºááŒá®áž developer ááá¯ááºážá áááºážááᯠá¡áá¯á¶ážááŒá¯ááá·áºáááºáᯠáá»áœááºá¯ááºáááºááŒááºáá²á·áááºááŸá¬ á¡áá»áááºá¡áá±á¬áºááŒá¬áá²á·ááŒá®ááŒá áºáááºá developer ááá¯ááºážááẠáááºážááá¯á·á local machine ááœáẠDocker ááᯠinstall áá¯ááºáá¬ážááá·áºáááºáᯠáááºážá០á¡á±á¬ááºáá«á¡ááá¯ááºáž áá±á¬áºááŒáá¬ážáááºá áá»áœááºáá±á¬á·áºá¡ááŒááºáá±á¬á áá°áá®áá²á· hh ááŸá¬áááºáá¬ážáá²á· áá áºáááºáá±áá¬ááœá±ááᯠááŒáá·áºááá¯ááºáá«á á áá¹ááá·áºááá¯ááºážááœáẠdocker ááá±á¬áºááŒáá»ááºáá«ááŸáááŒá®áž áááºááá¯ááºááá¯ááºáá«á áááºážááẠáááºáááŸááºááŒáá¯ááºááŸá¯á¡á¬ážáá¬áá»ááºááŒá áºáááá·áºááẠð
áá»áœááºá¯ááºááœá¬ážáá¬áááºážááœáẠDocker ááŸáá·áº áááºážááá±áá áá áºá¡áá±á«áº ááœá²ááŒá¬ážáá±á¬ááá±á¬áá¬ážáá»á¬ážááŒáá·áº áá°áá»á¬ážá áœá¬ááᯠááœá±á·áá¯á¶áá²á·áá«áááºá á¡áá»áá¯á·á áááºážááẠcross-platform áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠá¡á¬ááá¶ááá·áº á¡áááºááŒá±ááá·áºá¡áá¬ááŒá áºáááºáᯠá¡áá»áá¯á·áááŒá±á¬ááŒáááºá áá¯ááá áá°ááœá±á áá¬ááŒá±á¬áá·áº ááœááºááááºáá¬áá² ááŒá±ážáááá² á á¡á²áá« á áááºááᯠá¡áá»áá¯ážá¡ááŒáẠáááẠááá¯áᬠáá¬ážáááẠá áááá ááá±á¬á· áá¯á¶ážá ááá¯áá áá¯áẠáá² á¡ááŸá±á¬ááºá¡ááŸáẠááá±áž áá«áá°áž ( áá°ááá¯á· áá¯áẠáá±áž ááŒá®áž á¡áááºááŒáẠáá²á· áጠááẠá áááºážáááºáž :)
á¡áá¯á¶ážááŒá¯áááá·áº á¡ááŒá±á¬ááºážáááºážáá»á¬áž
áá«áá¬ááŒá±á¬áá·áº docker ááá¯áá¯á¶ážáá¬áá²á á¡á±á¬ááºáá« á¡ááŒá±á¬ááºážáá»á¬ážááŒá±á¬áá·áº ááŒá áºááá¯ááºáááº-
- áá±áá¬áá±á·á áºá áááºááŒááºážááœááºá á¡ááá®áá±ážááŸááºážáá»á¬ážá 99% ááẠáááºážááá¯á·ááᯠá¡áá¯á¶ážááŒá¯áááºá
- frontend ááŒáá·áºááŒá°ážááŒááºážááŸáá·áº backend ááá¯á· proxy áá¯ááºááŒááºážá¡ááœáẠnginx ááá¯ááœáá·áºááŒááºážá
- áááºááẠá¡ááá®áá±ážááŸááºážááᯠdocker áá¯á¶ááœáẠáá¯ááºááá¯ážááá¯ááºáááºá á€áááºážááŒáá·áº áá»áœááºá¯ááºá á¡ááá®áá±ážááŸááºážááẠdocker ááŸááá±áá¬áá¬á á¡áá¯ááºáá¯ááºáááºá ááŒáá·áºááŒá°ážááŸá¯ááŒá¿áá¬ááᯠáá»ááºáá»ááºážááŒá±ááŸááºážááá¯ááºáááº
- áááºáá±á¬ááºááŸá¯ááŸá¬ááœá±ááœá±á·ááŸáááŸá¯áá±áá¹áá¬áá²ááŸá áááºááẠmicroservices áá»á¬ážááá¯áááºáá®ážááá¯ááºáááºá ááœááºááááºáá¬áá áºáá¯á á®ááẠ(áá¯á¶ááœááºáááºáá áºáá¯ááŸáá·áºáá áºáá¯áá»áááºáááºáá¬ážáááº) alias ááŸáááá·áºá¡ááŒá¬ážáá áºáá¯ááá¯á¡ááœááºááá°áá±á¬ááºááŸáááá¯ááºáááºá á¡ááœááºá¡áááºááŒá±áááºá
- ááœááºááááºáá¬áá áºáá¯áááºáá®ážááŒá®áž áááºážááœáẠ"áá á¬ážááŒááºáž" ááẠáá»á±á¬áºá áá¬áá±á¬ááºážáááºá
Docker áá²á· áááºáááºááŒá®áž áá»áœááºáá±á¬áº á¡ááŒá²áááºáž áááŒáá¯ááºáá²á·á¡áá¬
- áá»áœááºá¯ááºáá¡ááá®áá±ážááŸááºážá¡áá¯ááºáá¯ááºáááºá¡ááœáẠáá»áœááºá¯ááºááẠáá¬áá¬áá±á«áºááœáẠDocker ááá¯ááºááá¯ááºááá¯á¡ááºáá«áááºá áá»áœááºá¯ááºáá¡ááá®áá±ážááŸááºážáá»á¬ážááẠjre ááá¯á·ááá¯áẠnodejs ááœááºáááºáááºáá±ááŒá®áž áááºážááá¯á·á¡ááœááºáááºáááºážáá»ááºááẠáá¬áá¬áá±á«áºááœááºááŸááá±ááŒá®ááá¯áá»áŸáẠáááºážááá¯á¡áááºááŒá±á¬áá·áºááá¯á¡ááºááááºážá
- á¡áá±ážááááºážáá¬áá¬ááœáẠáá»áœááºá¯ááºá (áá¯áá¹áááá) á
ááºááœááºážáááºáá±á¬ááºáá¬ážáá±á¬ áá¯ááºáá¯á¶á¡á¬áž ááœáá·áºááá¯áá«áá áá»áœááºá¯ááºáááá¯ááºááá¯áẠdocker repository ááá¯á¡ááºáááºá áá
áºáá±áá¬áá¬ááœáẠá¡áá¯ááºáá¯ááºááẠregistry ááᯠááá¯á¡ááºááŒá®áž https ááᯠconfigure áá¯ááºááẠááá¯á¡ááºáááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº docker cli ááẠhttps áááºáᬠá¡áá¯ááºáá¯ááºáá±á¬ááŒá±á¬áá·áº ááŒá
áºáááºá á¡áá¯áž... áá¯á¶ááááºááᯠááŒááºááœááºážááŸá¬ ááááºážááá¯á· ááœá±ážáá»ááºá
áá¬ááœá± ááŸááááºá
docker save
scp ááŸáááá·áº áá¯á¶ááᯠááá¯á·ááá¯ááºáá¯á¶áá«áá²... áá«áá±ááá·áº áá«á ááá¹áá¬ááá¯áẠááŸá¯ááºááŸá¬ážááŸá¯ááœá± á¡áá»á¬ážááŒá®ážáá«á ááá¯á·á¡ááŒááºá áááºáááá¯ááºááá¯ááºááá¯ááŸá±á¬ááºááŸá¯áá±á«áºáá¬áááºá¡áá "Crutch" ááŒá±ááŸááºážáá»ááºááŸáá·áºáá°áááºá docker-compose
. ááœááºááááºáá¬áá»á¬ážááá¯áááºáááºáááºáá¬ááá¯á¡ááºáááºá áá«áá«áá²á áá°á áááŒá¬ážáá¬á០ááá¯ááºááá¯ááºáá°ážáDocker-compose
áááºážáááá¯ááºáá»á¬ážá áááºážáááá¯ááºááá¯áẠsyntax áá¬ážááŸááºážáá»á¬ážá áœá¬ááŸááááºá áááºáá±á¬ááºáá² ááŒá±ááŒá¬áá¬ážáá«á á± áá°ááá¯á·áá²á· á á¬áááºážááᯠááááºáá»ááºáá°ážá áááŒá¬ážáááºááŸá¬á០áááá¯á¡ááºáá«áá°ážá- á¡ááœá²á·áá
áºááœá²á·ááœááºá¡áá¯ááºáá¯ááºáá±á¬á¡áá«á áá°á¡áá»á¬ážá
á¯ááẠDockerfile ááá¯á¡ááœááºáá±á¬ááºáá±á¬ááºáá«á¡á±á¬ááºáá±ážááŒáááºá áááºážááá¯áááºááŸáºáá¯ááºáá¯á¶ááá¯áá¬ážááááºáá«á áá°ááá¯á·ááá¯á¡ááºááá»áŸááŸáá·áºáá¯á¶ááœááºáááá¯á¡ááºáá±á¬á¡áá¬á¡á¬ážáá¯á¶ážááá¯ááá·áºáá«á Dockerhub ááœááºáááŸááá±á¬áá¯ááºáá¯á¶áá»á¬ážááá¯á·ááá¯ááºáá¯áá¹ááááááá¯ááŸá±á¬ááºáá¯á¶ááŸá¡áá»áá¯á·ááá¯áááºáá®ážáá«á
docker-compose
áá±áá¬áá±á·á áºáá»á¬ážáá«ááŸááá±á¬ ááá¯ááºáá»á¬ážááŸáá·áº áá¬ááŸáááá¯ááºáá«á áá áºáá»áááºáááºážááŸá¬áááºá developer áá»á¬ážááẠDocker ááẠá¡á±ážááŒáááºá á¡áá¬á¡á¬ážáá¯á¶ážááẠáááºážááá¯á·á¡ááœáẠááŒááºááœááºážááᬠá¡áá¯ááºáá¯ááºááŒá±á¬ááºáž áá¯ááºáá°á áœá¬ ááŒá±ááŒá¬áá²á·ááŒá®áž HR ááẠáá áºáááºáá±áá¬áá»á¬ážááœáẠá¡áá±ážááŒá®ážáááº- "áá»áœááºá¯ááºááá¯á·ááẠDocker ááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž ááá¯áá²á·ááá¯á·áá±á¬ á¡áá¯ááºá¡ááœá±á·á¡ááŒá¯á¶ááŸááá±á¬ ááá¯ááºá á¬ážááŸááºáá±á¬ááºážáá áºáŠáž ááá¯á¡ááºáá«áááºá" - Postgresqlá kafkaá redis ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒá¯á á¯áá»áá¯ážáá±á¬ááºááẠá áááºáá°ážáá»á¬ážááŒáá·áº áá»áœááºá¯ááºááẠá¡áááºáááŒáẠááŒá±á¬ááºááŸáá·áºáá±áá«áááºá á¡áá¬á¡á¬ážáá¯á¶ážááẠááœááºááááºáá¬áá»á¬ážááœáẠá¡áá¯ááºááá¯ááºááá·áºá¡ááœáẠáááºážáááºážá áá¬ááŒá áºááŒá®áž á¡áá¬á¡á¬ážáá¯á¶ážááᯠá á®á ááºáááºááŸááºá áá¯ááºáá±á¬ááºááẠááœááºáá°áááºááá¯ááºáá«á áááºážááᯠáá±á¬ááºážáá°ááá¯ááºááá¯ááºááŸááá¯ááºáá² ááŒááºááá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážá áá¶á·ááá¯ážáá¬ážáááºá á áá¬ážáá ááºá áá»ááºáá»ááºážáá±ážááœááºážáá±á«áºáá¬áááº- áá±á¬ááºážáá»áá°áá»á¬ážááẠDocker ááœáẠáááºážááá¯á·ááá¯ááºáá¯ááºáá»á¬ážááᯠááááºážááááºážááẠá áááºááá°áá«ááŸáá·áºá áááºážááẠá¡áááºááŒá±á¬áá·áºáááºážá áá áºáá¯áá¯ááᯠááááá¯ááºááááºážá
- ááœááºááááºáá¬áá±áá¬ááááºááŒá²ááŸá¯ááŸáá·áºáááºáááºááŒá®ážáá±ážááœááºážáá¯ááºáááºá ááŒá®ážáá±á¬á· host directory ááᯠmount áá¯ááºááá·áºááẠáá«ááŸááá¯áẠdocker volume áá
áºáá¯áááºáá®ážáᬠáá«ááŸááá¯áẠá¡áᯠdata container áá
áºáá¯áá¯ááºááá·áºáááºááá¯á· áááºáá«ááá¬ážá
deprecated
? á¡áááºá áá»áœááºá¯ááºááẠáááºážááœáŸááºáá áºáá¯ááᯠáááºáááºáá«áá ááœááºááááºáá¬á¡ááœááºážááŸá á¡áá¯á¶ážááŒá¯áá°á uid ááŸáá·áº gid ááẠááœááºááááºáá¬ááᯠá áááºá¡áá¯á¶ážááŒá¯áá°á ID ááŸáá·áº ááá¯ááºáá®ááŸá¯ááŸááááŸá áá±áá»á¬á á±ááẠááá¯á¡ááºááŒá®áž ááá¯ááºáá«á ááœááºááááºáá¬á០áááºáá®ážáá¬ážááá·áº ááá¯ááºáá»á¬ážááᯠroot áá¯ááºááá¯ááºááœáá·áºááŒáá·áº áááºáá®ážáááºááŒá áºáááºá áá«áá¯á¶ážáááºvolume
ááá¯á·áá±á¬áẠáá±áá¬á¡áá»áá¯á·ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áááºáá®ážáááºááŒá áºáááºá/usr/*
áááááá á¹á ááœááºáá²á·ááá¯á· uid ááŸáá·áº gid ááŸáá·áºáá°áá®áá±á¬áá¬ááºáááºážááŸááááá·áºáááºá á¡áááºá áááºááẠááŒááºááá¯áá¹ááá® á¡á áááºá¡ááá¯ááºážáá áºáá¯ááᯠá áááºáá¯ááºáá±á¬ááºáá±áá«áá áááºááẠá á¬ááœááºá á¬áááºážáá»á¬ážááᯠáááºááŸá¯ááŒá®áž áá±ážááœááºážáá¡ááŒá±ááᯠááŸá¬ááœá±ááẠááá¯á¡ááºáááº- "ááœááºááááºáá¬áááºážááœáŸááºáá»á¬ážáá²ááœáẠá¡á áááºá¡ááá¯ááºážááẠááá¯ááºáá»á¬ážááᯠáá±ážáá±ážáááº"
Docker áá²á· á¡áá»áááºá¡ááŒá¬ááŒá®ážááŒá±á¬áá±áá²á·ááá¬ááᯠá¡ááŒá²áááŒáá¯ááºáá°ážá áááŠážá¡ááá·áºááŸá¬- ááœááºááááºáá¬áá»á¬ážááá¯ááœáá·áºáááºážá áááºááá·áºáá¯á¶áá»á¬ážááŸá
áááºáááºá Docker command áá»á¬ážáá®ááá¯á· aliases áá»á¬ážáá«ááŸááá±á¬ Makefiles ááá¯áááºáá®ážáá²á·ááẠá docker áá±áá
áá
áºááŸá á¡ááŒá¬ážáááááá¬ááᯠááá±á·áá¬ááá¯áá±á¬ááŒá±á¬áá·áº docker-compose ááᯠáá¯ááºážáá®ážáá²á·áááºá AND docker-compose up
á¡áá°ážáááŒáá·áº áá°ááá¯á·á¡á²áá®ááŸá¬ááœá±á·áá±ážááẠá
áááºá¡ááŸá±á¬áá·áºá¡ááŸááºááŒá
áºááááºá build
áá±á«ááºážá
ááºááŒá®ážáá¬ážáá¯á¶ááœá±ááẠáááºáá±á¬ááºááŸá¯á ááááºááá¯áá»ááºáá¬á áá¯ááºáá¯ááºáá
áºáá¯ááᯠáááááá±á¬ááºáá±á¬ááºáá²á· ááŒááºááŒááºáááºááẠáááºáá®ážááá¯á·áá«áá²á áá«áá±ááá·áº docker ááᯠáááºááá¯áá¯á¶ážáááá²ááá¯áᬠáá»áœááºáá±á¬áº áá
ááºážá
á¬ážááá¯ááºáá²á·áá«áá°ážá
Ansible ááᯠááááºáááºááŒááºážá
áááŒá¬áá±ážáá® (ááœááºáá²á·ááá·áº áá¯á¶ážá) á áá»áœááºáá±á¬áºááẠDevOps á¡ááœá²á·ááŸáá·áº áá¯ááºáá±á¬ááºáá²á·ááŒá®áž á¡ááœá²á·áááºááá¯ááºážáá®ážáá«ážááẠDocker á¡áá±á«áº á¡ááá¯ážááŒááºáá±á¬ ááá±á¬áá¬ážááŸááááºá á¡ááŒá±á¬ááºážá¡áá»áá¯ážáá»áá¯ážááŒá±á¬áá·áº-
- docker ááẠiptables á ááºážáá»ááºážáá»á¬áž (ááẠdaemon.json ááœáẠáááºážááᯠdisable ááŒá¯áá¯ááºááá¯ááºáá±á¬áºáááºáž)
- docker ááẠbuggy ááŒá áºááŒá®áž áá»áœááºá¯ááºááá¯á· áááºážááᯠáá¯ááºáá¯ááºáá¬ááœáẠáá¯ááºáá±á¬ááºáááºááá¯ááºáá«á
- docker daemon áá»ááºááœá¬ážáá«áá á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážáá«ááŸááá±á¬ ááœááºááááºáá¬áá»á¬ážá¡á¬ážáá¯á¶ážááẠááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá á±áá«áááºá
- docker áááá¯á¡ááºáá«á
- Ansible ááŸáá·áº virtual machines ááŸááá»áŸáẠdocker ááẠá¡áááºááŒá±á¬áá·áºáááºáž
á¡áá¯ááºáá²ááŸá¬áá² áááŒá¬áž tool áá
áºáá¯ááŒá
áºáá²á· Ansible ááᯠáá»áœááºáá±á¬áº áááá¬áááºá áá
áºáá«á ááŒá¬ážáá°ážáá±ááá·áº ááá¯ááºááá¯ááºá
á¬á¡á¯ááºáá±ážááœá± áá±ážááá¯á· áááŒáá¯ážá
á¬ážáá²á·áá°ážá á¡áᯠáá»áœááºáá±á¬áº á¡áá¯ááºááœá± á
áá±ážáá±á¬á· áá»áœááºáá±á¬á·áº á¡ááŒááºá áá¯á¶ážá ááŒá±á¬ááºážáá²ááœá¬ážáááºá áá»áœááºá¯ááºááá±á¬áá±á«ááºáááá±á¬ááŒá±á¬áá·áº- Ansible ááœáẠáá°áá®áá±á¬ docker containersá image buildsá networks á
áááºááá¯á·ááᯠrun ááẠmodule áá»á¬ážááŸáááŒá®áž containers áá»á¬ážááᯠlocal ááœááºáá¬áá remote server áá»á¬ážááœááºáá« run ááá¯ááºáá«áááºá áá»áœááºá¯ááºááá»á±á¬áºááœáŸááºááŸá¯ááẠá¡ááá·áºá¡áááºáááŸááá« - áá¬áá¬ááºáááááá¬áá
áºáá¯ááᯠáá»áœááºá¯ááºááœá±á·ááŸáááŒá®áž áá»áœááºá¯ááºá Makefile ááŸáá·áº docker-compose ááá¯ááºáá»á¬ážááᯠá
áœáá·áºáá
áºááá¯ááºááŒá®áž áááºážááá¯á·ááᯠyaml á¡áá¯ááºáá»á¬ážááŒáá·áº á¡á
á¬ážááá¯ážáá¬ážáááºá áá²á·ááá¯á·áá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áá¯ááºááᯠáá»áŸá±á¬á·áá»áá²á·áááºá loop
, when
, etc
áá±áá¬áá±á·á áºáá»á¬ážáá²á·ááá¯á·áá±á¬ ááŒááºáá¡ááœá²á·á¡á ááºážá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠDocker
áááŒá¬áá±ážáá®á áá»áœááºá¯ááºááẠssh á¥áááºááá¯ááºáá±á«ááºážáá»á¬ážááŸáá·áº áááá»áœááºážáá¬áá²á·áááºá áá±ážáá¶áá±á«ááºáá®áá±á¬áá¬áá¬áááááºáááºážááᯠááŒááºááœááºážááááºáááºážáá áºáá¯ááá¯á· "ááŸá±á·áááºáááº" á¡ááœááºááœááºáá°ááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááºá á¡áá±ážááááºážáá¬áá¬ááẠcloud á¡ááœááºážááŸáá áẠááá¯á·ááá¯áẠVirtualBox ááœááºáááºáááºáá±ááá·áº virtual machine ááŒá áºááá¯ááºáááºá á¡áááºá áá»áœááºá¯ááºááá¯ááºáá±á¬áºááá¯ááºááẠááá¯á·ááá¯áẠáá»áœááºá¯ááºááẠáá±áá¬áá±á·á Ạ(ááá¯á·ááá¯áẠá¡ááŒá¬ážááŒááºááá¯áá¹ááá®á¡á áááºá¡ááá¯ááºážáá áºáᯠááá¯á¡ááºáá«á) áá»áœááºá¯ááºááá¯á·ááẠáá¬áá¬ááᯠá€á¡á áááºá¡ááá¯ááºážááŒáá·áº ááá¯ážááá¯ážááŸááºážááŸááºážá áááºááá¯ááºááŒá®áž áá¬áá¬áááá¯á¡ááºááá·áºá¡áá« áááºážááá¯ááááºááá¯ááºáááºá Port forwarding ááẠdocker container ááœááºá¡áá¯ááºáá¯ááºáá±á¬áá±áá¬áá±á·á áºáá²á·ááá¯á·áá°áá®áá±á¬á¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ááá¯áá±ážáááºá
á€á¡áááá·áºááẠáá»áœááºá¯ááºáááŒááºááœááºážááááºáááºážááᯠpostgresql áááºáááºáá±áá±á¬ á¡áá±ážááááºážáá¬áá¬ááá¯á· áá±ážááá¯á·áááº-
ssh -L 9000:localhost:5432 [á¡á®ážáá±ážááºááá¯áá¬ááœááºáá¬ážáááº]
á¡áá±ážááááºážáá¬áá¬ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠá¡áááºážááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŸáá·áºá¡áá° ááŒá¿áá¬ááᯠááŒá±ááŸááºážáá±ážáááºá ááá¯ááá¯á·áá±á¬áá¬áá¬ááᯠdeveloper á¡áá»á¬ážá¡ááŒá¬ážá áá áºááŒáá¯ááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áááºážááá¯á·ááẠpostgresql ááᯠconfigure áá¯ááºáááºá Docker ááŸáá·áº á¡ááŒá¬ážáá±á¬ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááᯠáá¬ážáááºááẠáááá¯á¡ááºáá«á áááá»áá±á¬áá¬ážááŸááºážááá¯ááá·áºááœááºážáááºáááºáá²áá«áá áááºááẠá¡áá±ážááááºážáá¬áá¬ááœáẠáá°áá®áá±á¬áá±áá¬áá±á·á áºááᯠDocker ááá¯ááºááá¯ááºááá·áºááœááºážááá¯ááºáááºá developer áá»á¬ážá¡á¬ážáá¯á¶ážááẠssh á¡áá¯á¶ážááŒá¯ááœáá·áºááᯠáá±ážáá±á¬ááºááẠááá¯á¡ááºáá«áááºá
SSH tunnels áá»á¬ážááẠáá¯á¶ááŸáẠVPN á á¡ááá·áºá¡áááºááŸááá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá áºáá¯ááŒá áºááŒá±á¬ááºáž áááŒá¬áá±ážáá®á áá«áááºáá²á·áááºá OpenVPN ááá¯á·ááá¯áẠá¡ááŒá¬ážáá±á¬ VPN á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááᯠáááºááá¯ážááŸááºážá áœá¬ ááá·áºááœááºážááá¯ááºááŒá®áž á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠá áá áºááá·áºááœááºážááŒá®áž á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážááᯠáá±ážááá¯ááºáá«áááºá áá«á á¡áááºážááá¯ááºáááºá
áá¶áá±á¬ááºážáá±á¬ááºáá áœá¬á AWSá GoogleCloud ááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážááẠááá·áºá¡á¬áž áá áºááŸá áºá¡ááá²á· á¡áá¯á¶ážááŒá¯ááœáá·áºáá±ážáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠá¡áá¯á¶ážááŒá¯áá«á á¡áá¯á¶ážáááŒá¯áá»áááºááœáẠááááºáá«á á á»á±ážáááºáá¬áá«áááºá gcloud áá²á·ááá¯á·áá±á¬ á¡áá±ážááááºážáá¬áá¬ááᯠáá¬ááŒá±á¬áá·áº ááá¯á¡ááºááááºááá¯áᬠá¡ááŒá²ááœá±ážáá±áá¯á¶áááŒá®ážá á¡á²áá«ááœá±ááᯠááœá±á·ááá¯ááºááá«áááºá
áá±ááá¯á¶áž virtual machine áá áºáá¯á¡áá±ááŒáá·áºá docker containers ááœááºáááºááŒáœá áœá¬á¡áá¯á¶ážááŒá¯áá±áá±á¬ Alpine ááá¯áá² áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á ááºááá¯ááá¯ááá¯ááŒááºáááºá áœá¬á áááºááá¯ááºáááºá ááá¯á·ááá¯ááºá¡ááŒá¬ážáá±á«á·áá«ážáá±á¬ááŒáá·áºáá±ááŸá¯áá»á¬ážá¡áá»áá¯á·á
á¡á±á¬ááºááŒá±ááá¯ááºáž- áááºááẠá¡áá±ážááááºážáá¬áá¬áá»á¬áž ááá¯á·ááá¯áẠvirtualbox ááœáẠáá±áá¬áá±á·á áºáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááá¯ááºáᬠá¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááᯠáááºáá¯ááºáá±á¬ááºááá¯ááºáᬠáá¯ááºáá±á¬ááºááá·áºáááºá á€áááºááœááºáá»ááºáá»á¬ážá¡ááœáẠáá»áœááºá¯ááºááẠdocker áááá¯á¡ááºáá«á
docker áá¯á¶áá»á¬ážááŸáá·áºááŒáá·áºáá»á®ááŒááºážá¡ááŒá±á¬ááºážá¡áááºážáááº
áá«áá±ážááŒá®ážááŒá®
áá±á¬á·ááºáá²áá±á¬á·ááºáá²áá±ážááœá²áá°áá»á¬ážááẠáááºážááá¯á·ááá¯ááºáá¯ááºáá»á¬ážááᯠdocker áá¯á¶ááœááºáᬠááá¯á·ááá·áºáá±áá¬ááá¯ááºážááᯠáááºááŒááºáá°ážáá«ááá¬ážá
áá¯ááºáá¯ááºá¡áá»á¬ážá
á¯áááááºááẠáá®ážááŒá¬ážááááºáá±á¬ááºážáá
áºáá¯á¡ááœáẠbinary ááá¯ááºáá»á¬ážááŒá
áºáááºá áááºážááá¯á·ááᯠá¡ááá¯ááŸááá±á¬ platform ááŸá¡ááœá±áááºáá¶áá¬ážááá·áº docker image ááá¯á· ááá¯ážááá¯ážááŸááºážááŸááºážááá·áºááœááºážáá¬ážáááºá dockerhub ááŸá¬ áá¬ááŒá±á¬áá·áº á¡áá¬ážáá°áá¯á¶ááœá± á¡áá»á¬ážááŒá®ážááŸááá±áá¬áá² áááá»ááºáá°ážáá¬ážá á¥ááá¬á¡á¬ážááŒáá·áº nginx ááá¯ááá¯ááºááá·áºáá«á ááá°áá®áá±á¬áá°áá»á¬ážá០áá¯á¶áá±á«ááºáž 100500 ááá¯ááœá±á·ááá«áááºá á€áá°áá»á¬ážááẠnginx ááá¯ááºááá¯áẠáááœá¶á·ááŒáá¯ážáá²á·áá²á áááºážááá¯á·ááẠáááºážááá¯á·á docker áá¯á¶ááœáẠááá¬ážááẠnginx ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá±á«ááºážááá·áºáᬠááœááºááááºáá¬áá»á¬ážááᯠá
áááºááẠá¡áááºááŒá±á
á±ááẠáááºážááá¯á·á ááá¯ááºááá¯áẠconfigs áá»á¬ážááŒáá·áº áá»áááºááŸááá±ážáááºá
áá±áá¯áá»á¡á¬ážááŒáá·áºá áááºááẠáááºážááᯠtgz ááœáẠááá¯ážááá¯ážááŸááºážááŸááºáž ááááºážáááºážáá¬ážááá¯ááºááŒá®ážá áá
áºá
á¯á¶áá
áºáŠážá០áááºážááᯠdocker ááœáẠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áá ááá¯á·áá±á¬áẠáááºážááá¯á·ááᯠDockerfile ááá¯á· tgz áá±á«ááºážááá·áºá
á±áá¬á ááá¯áá»ááºáá±á¬áááºáááºážáá»ááºá០á¡ááœá±áááºáá¶áᬠtgz ááœáẠá¡ááá®áá±ážááŸááºážááá¯ááºááá¯ááºáááŒá±á¬ááºážáá²ááá·áº á¡ááá¯áá±á¬ááºážáá±á¬ááºáá»á¬ážááᯠáááºáá®ážáá«á docker image ááá¯áááºáá®ážááá·áºáá°ááá¯ááºážááẠtgz ááẠá¡áááºá¡áá¬ááŸáá·áº áá°áá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºááᯠáááááá·áºáááºá áá«á docker ááá¯áá¯á¶ážáá«áááºá
á¡á±á¬ááºááŒá±ááá¯ááºáž- áá»áœááºá¯ááºááẠdocker ááŸááºáá¯á¶áááºááẠáááá¯á¡ááºáá«á áá»áœááºá¯ááºááẠS3 áá áºáá»áá¯ážáá»áá¯áž ááá¯á·ááá¯áẠgoogle drive/dropbox áá²á·ááá¯á· ááá¯ááºááá¯ááŸá±á¬ááºáá¯á¶ááá¯áᬠá¡áá¯á¶ážááŒá¯áá«áááºá
CI ááœáẠDocker
áá»áœááºáá±á¬áºá¡áá¯ááºáá¯ááºáá°ážáá²á· áá¯áá¹ááá®ááœá±á¡á¬ážáá¯á¶ážá á¡áá¬ážáá°áá«áá²á áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº áá¯ááºá á¯á¶ááá¯ááºááœá±áá«á ááá¯ááá¯áááºááŸá¬ áááºážááá¯á·ááœáẠá¡ááºááá®áá±ážááŸááºážáá áºáá¯á áááºážááá¬á¡á á¯áá áºáᯠ(áá±á¬ááºážááŒá®á áááá¯ááááºážáááºážáá¬áá¬á áá¬ážááŸá áºáᯠááá¯á·ááá¯áẠáá¯á¶ážáá»áá¯áž ááŒá áºááá¯ááºáááº)á
á€áá¯áá¹ááá®áá»á¬ážááẠCI áá¯ááºáááºážá ááºáááºáááºááá·áº áááºážááá¯á·ááá¬áá¬áá»á¬ážááœáẠdocker ááá¯á¡áá¯á¶ážááŒá¯áááºá áá±ážááœááºáž- ááá·áºáá¬áá¬áá»á¬ážáá±á«áºááœáẠdocker container ááœáẠááá±á¬áá»ááºáá»á¬ážááᯠá¡áááºááŒá±á¬áá·áºáááºáá±á¬ááºááẠááá¯á¡ááºááááºážá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áááºáá±á¬ááºááŸá¯á¡ááœáẠáááºáááºážáá»ááºááᯠááŒááºáááºáá¯á¶áá»áŸáááá²á á¥ááá¬á áááºáá±á¬ááºááá·áº áá¬áá¬ááœáẠnodejsá phpá jdká phpá jdká áá±á¬áºáá®áá°ážáá°ááá·áº ssh áá±á¬á·á áááºááá¯á·ááᯠááá·áºááœááºážááá·áº Ansible playbook áá±ážáá«á
Docker ááẠáááºážá áá®ážááŒá¬ážááœá²áá¬ážááŒááºážááŒáá·áº áááºááá·áºá¡áá»áá¯ážá¡ááŒááºá០ááááŸááá±á¬ááŒá±á¬áá·áº áááºážááẠááá¯áá·áºááá¯ááºááá¯áẠááŒá±áá±á¬ááºááŒáá·áº áá áºáááºááŒááºážááŒá áºááŒá±á¬ááºáž ááᯠáá»áœááºá¯ááºáá¬ážáááºáá«áááºá docker ááœáẠCI ááŸáá·áº ááŒá¯á¶ááœá±á·ááá±á¬ ááŒá¿áá¬áá»á¬áž-
- áá áºáááºáááºáááºáá±á¬ááºááẠdocker áá¯á¶áá áºáá¯ááá¯á¡ááºáááºá áá¯á¶áá áºáá¯á¶ááᯠááŸá¬ááẠááá¯á·ááá¯áẠááá·áºááá¯ááºááá¯áẠdockerfile áá±ážááẠááá¯á¡ááºáááºá
- 90% ááẠdocker áá¯á¶ááá¯á· áááºááá±ážááá¯áá±á¬ ssh áá±á¬á·áá»á¬ážá áá»áŸáá¯á·ááŸááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážááá¯á·ááẠááá¯á¡ááºáááºá
- ááœááºááááºáá¬ááá¯áááºáá®ážááŒá®ážáá±áá¯á¶ážá áááºááŸáºáá»á¬ážá¡á¬ážáá¯á¶ážáááºážááŸáá·áºá¡áá°áá»á±á¬ááºáá¯á¶ážááœá¬ážááẠáá±á¬ááºáááºáá±á¬ááºááŸá¯ááœáẠá¡áá»áááºáá¯ááºááŒá®áž áááá±á¬ááºááŸá¯áááŸáááá·áº ááá±á¬áá»ááºááŸá®ááá¯ááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŒááºáááºáá±á«ááºážáá¯ááºáá¯ááºáááºááŒá áºááŒá®áž á¡áá»áááºááẠááœá±ááŒá áºáááºá
developer áá»á¬ážááẠdocker containers ááœáẠááá±á¬áá»ááºáá»á¬ážááᯠááá±á¬ááºáá« (áá»áœááºáá±á¬áºááẠáá áºáá»áááºá ááá¯ááá¯á·áá±á¬ á¡áá¬áá¶ááááááºáá áºáŠážááŒá áºáá²á·áá°ážáááºá á¡ááŸááºáááºá áá»áœááºá¯ááºááẠá¡ááááºááœáẠááá¯áá·áºááá¯ááºááᯠááá¬ážáááá«ááẠxD)á java ááœáẠáá¬ážááŸááºážáá»á¬ážá áœá¬ááŸáááá¯ááºááŒá®áž áááºážááá¯á·ááᯠcommand áá áºáá¯áááºážááŒáá·áº ááá¯áááºááá¯á¡ááºááá·áºáá áºáá¯ááá¯á· ááŒá±á¬ááºážáá²ááá¯ááºáááºá nodej ááŸá¬ á¡áá°áá°áá«áá²á nvm ááŸááááºá
áá±á¬ááºáá»ááº
docker ááẠá¡ááœááºá¡á áœááºážáááºááŒá®áž ááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ áááááá¬áá áºáá¯ááŒá áºáááºáᯠáá»áœááºáá±á¬áºáá¯á¶ááŒááºáááºá áááºážááẠáááºážáá¡á¬ážáááºážáá»ááºááŒá áºááẠ(áá°ážáááºážáááºá áá¯ááºáááº)á áááºážáá¡áá°á¡áá®ááŒáá·áº áá¯áá¹ááá®áá»á¬ážááẠáááºážááᯠá¡ááœááºááá°áá»áááºáááºááá¯ááºááŒá®áž ááá¯á¡ááºáááᯠáááá¯á¡ááºááá·áºáá±áá¬ááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážááẠáááºážááá¯á·á ááœááºááááºáá¬áá»á¬ážá áááºážááá¯á·á áááºáááºážáá»ááºá¡áá»áá¯á·ááᯠá áááºááá¯ááºááŒá®ážáá±á¬áẠáááºážááá¯á·á¡á¬ážáá¯á¶ážááᯠCI ááŸáá·áº áá¯ááºáá¯ááºáá±ážááá¯á· áá»á±á¬ááœá±á·á áœá¬ á á®ážáááºážááœá¬ážá á±áááºá DevOps á¡ááœá²á·ááẠá€ááœááºááááºáá¬áá»á¬ážááá¯áááºáááºáááºá¡ááœáẠáá¯ááºáá áºáá»áá¯ážáá»áá¯ážááᯠáá±ážáá¬ážáá±áá«áááºá
Docker ááá¯áá¬ááœáá·áºáá«á áááºááá±á¬ áááºááá¯ááºáááºážá¡ááœá¬ážá¡áá¬ááœáẠá¡ááá·áºá áááºážááᯠá¡á ááá¯ááºážááœáẠááá±á¬áá»ááºááá¯á· áááœá²áá«ááŸáá·áºá ááá·áºáá¯ááºáááºážááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážáá±ážáááºááá¯ááºáá«á áá°ááẠááŒá¿áá¬áá»á¬ážááᯠá¡ááŒá¬ážá¡ááá·áºááá¯á·áᬠááœáŸá±á·ááŒá®áž áá°á·ááá¯ááºááá¯ááºááŒá±ááŸááºážáááºážáá»á¬ážááᯠáá±ážáááá·áºáááºá áááºááẠá¡áá¯ááºááŸá áºáááºáá¯ááºáááá·áºáááºá
Docker ááá¯á¡ááºááá·áºá¡áá«: docker ááẠáá±ážáá¬ážáá±á¬ áá¯ááºáááºážá ááºááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáá¯ááºáá±á¬ááºáá¬ááœáẠá¡ááœááºáá±á¬ááºážááœááºááŒá±á¬ááºáž áááá¯á¶ážáá»á¯ááºááá±á¬áºáááºáž á¡ááŒá±áᶠáá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠáááºáá±á¬ááºááŒááºáž ááá¯ááºáá«á
á¡áááºá áááºááẠdocker ááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²ááŒá áºáá«áá
- á¡ááœááºááááá¬ážáá«á
- developer áá»á¬ážá¡á¬áž docker ááá¯á¡áá¯á¶ážááŒá¯ááẠá¡áááºážá¡ááŒááºááá¯ááºáá«ááŸáá·áº
- áááºážáá¡áá¯á¶ážááŒá¯ááŸá¯ááᯠáá áºáá±áá¬áááºážááœáẠáá±áá¬áá»áá¬ážáá«á áááºážááᯠDockefile ááŸáá·áº docker-compose repositories á¡á¬ážáá¯á¶ážááœáẠáááŒáá·áºáá«ááŸáá·áºá
PS:
- áááŒá¬áá±ážáááºáá០ááœá±á·áá²á·áááºá
áá¯ááºááá¯áž áááºážááá¯á·á Ansible ááŸáá·áº á¡ááœááºáá±á¬ááºážááœááºá áœá¬ áá¯ááºáá±á¬ááºáááºáᯠááá¯ááŒááŒá®áž áá¯á¶áá»á¬áž áááºáá±á¬ááºááŒááºáž áá¯ááºáááºážá áẠ(docker image á¡áá«á¡áááº) ááᯠáá±á«ááºážá ááºážááá¯ááºá á±ááẠdocker á¡ááŒá±á¬ááºážá á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬áá±á¬ááºážáá«áž
áááºááŸá¯ááŒááºážá¡ááœáẠáá»á±ážáá°ážáááºáá«áááºá áááºáááá á¹á á¡ááááŸáá·áº á¡áá»áá¯ážááŸáá á±ááá·áº á¡áá¯ááºáá±á·áááºáá»á¬ážááœáẠááœáá·áºáááºážááŒááºáá¬áá±á¬ áá¯á¶ážááŒááºáá»ááºáá»á¬ážáá»ááá¯ááºáá«á á±ááá¯á· áá¯áá±á¬ááºážáá«áááºá
source: www.habr.com