TL; DR: เจเฉฐเจเฉเจจเจฐเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจฒเจฃ เจตเจพเจฒเฉเจเจ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฒเจ เจซเจฐเฉเจฎเจตเจฐเจ เจฆเฉ เจคเฉเจฒเจจเจพ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจธเฉฐเจเฉเจช เจเจพเจเจกเฅค เจกเฉเจเจฐ เจ เจคเฉ เจนเฉเจฐ เจธเจฎเจพเจจ เจชเฉเจฐเจฃเจพเจฒเฉเจเจ เจฆเฉเจเจ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ 'เจคเฉ เจตเจฟเจเจพเจฐ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค
เจเจน เจธเจญ เจเจฟเฉฑเจฅเฉเจ เจเจเจ เจเจธ เจฆเจพ เจเฉฑเจ เจเฉเจเจพ เจเจฟเจนเจพ เจเจคเจฟเจนเจพเจธ
ะััะพัะธั
เจเจฟเจธเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจ เจฒเฉฑเจ เจเจฐเจจ เจฆเจพ เจชเจนเจฟเจฒเจพ เจเจพเจฃเจฟเจ-เจชเจเจพเจฃเจฟเจ เจคเจฐเฉเจเจพ chroot เจนเฉเฅค เจเจธเฉ เจจเจพเจฎ เจฆเฉ เจธเจฟเจธเจเจฎ เจเจพเจฒ เจเจน เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉ เจเจฟ เจฐเฉเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเจฆเจฒเฉ เจเจ เจนเฉ - เจเจธ เจคเจฐเฉเจนเจพเจ เจเจน เจธเฉเจจเจฟเจธเจผเจเจฟเจค เจเจฐเจฆเจพ เจนเฉ เจเจฟ เจเจธ เจจเฉเฉฐ เจฌเฉเจฒเจพเจเจฃ เจตเจพเจฒเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจธเจฟเจฐเจซเจผ เจเจธ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ เจซเจพเจเจฒเจพเจ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจนเฉเฅค เจชเจฐ เจเฉเจเจฐ เจเจฟเจธเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจ เฉฐเจฆเจฐเฉเจจเฉ เจคเฉเจฐ 'เจคเฉ เจฐเฉเจ เจตเจฟเจธเจผเฉเจธเจผ เจ เจงเจฟเจเจพเจฐ เจฆเจฟเฉฑเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจคเจพเจ เจเจน เจธเฉฐเจญเจพเจตเฉ เจคเฉเจฐ 'เจคเฉ เจเฉเจฐเฉเจ เจคเฉเจ "เจฌเจ" เจธเจเจฆเจพ เจนเฉ เจ เจคเฉ เจฎเฉเฉฑเจ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจชเฉเจฐเจพเจชเจค เจเจฐ เจธเจเจฆเจพ เจนเฉเฅค เจจเจพเจฒ เจนเฉ, เจฐเฉเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจคเฉเจ เจเจฒเจพเจตเจพ, เจนเฉเจฐ เจธเจฐเฉเจค (RAM, เจชเฉเจฐเฉเจธเฉเจธเจฐ), เจ เจคเฉ เจจเจพเจฒ เจนเฉ เจจเฉเฉฑเจเจตเจฐเจ เจชเจนเฉเฉฐเจ, เจธเฉเจฎเจฟเจค เจจเจนเฉเจ เจนเจจเฅค
เจ เจเจฒเจพ เจคเจฐเฉเจเจพ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจเจฐเจจเจฒ เจฆเฉเจเจ เจตเจฟเจงเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจเฉฑเจ เจเฉฐเจเฉเจจเจฐ เจฆเฉ เจ เฉฐเจฆเจฐ เจเฉฑเจ เจชเฉเจฐเจพ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจฒเจพเจเจ เจเจฐเจจเจพ เจนเฉเฅค เจเจธ เจตเจฟเจงเฉ เจจเฉเฉฐ เจตเฉฑเจ-เจตเฉฑเจ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎเจพเจ เจตเจฟเฉฑเจ เจตเฉฑเจเจฐเฉ เจคเฉเจฐ 'เจคเฉ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ, เจชเจฐ เจธเจพเจฐ เจเฉฑเจ เจนเฉ เจนเฉ - เจเจ เจธเฉเจคเฉฐเจคเจฐ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเจจเจพ, เจเจฟเจจเฉเจนเจพเจ เจตเจฟเฉฑเจเฉเจ เจนเจฐ เจเฉฑเจ เจเจนเฉ เจเจฐเจจเจฒ เจเจฒเจพเจเจเจฆเจพ เจนเฉ เจเจฟเจธ 'เจคเฉ เจฎเฉเฉฑเจ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจเฉฑเจฒเจฆเจพ เจนเฉเฅค เจเจนเจจเจพเจ เจตเจฟเฉฑเจ เจฒเฉเจจเจเจธ เจฒเจ FreeBSD เจเฉเจฒเฉเจนเจพเจ, เจธเฉเจฒเจพเจฐเจฟเจธ เจเจผเฉเจจ, OpenVZ เจ เจคเฉ LXC เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจ เจฒเฉฑเจ-เจฅเจฒเฉฑเจ เจจเจพ เจธเจฟเจฐเจซเจผ เจกเจฟเจธเจ เจธเจชเฉเจธ เจฆเฉเจเจฐเจพ, เจธเจเฉเจ เจนเฉเจฐ เจธเจฐเฉเจคเจพเจ เจฆเฉเจเจฐเจพ เจตเฉ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจ เจเจพเจเจฆเจพ เจนเฉ; เจเจพเจธ เจคเฉเจฐ 'เจคเฉ, เจนเจฐเฉเจ เจเฉฐเจเฉเจจเจฐ เจตเจฟเฉฑเจ เจชเฉเจฐเฉเจธเฉเจธเจฐ เจฆเฉ เจธเจฎเฉเจ, RAM เจ เจคเฉ เจจเฉเฉฑเจเจตเจฐเจ เจฌเฉเจเจกเจตเจฟเจกเจฅ เจฆเฉเจเจ เจธเฉเจฎเจพเจตเจพเจ เจนเฉ เจธเจเจฆเฉเจเจ เจนเจจเฅค เจเฉเจฐเฉเจ เจฆเฉ เจฎเฉเจเจพเจฌเจฒเฉ, เจเฉฐเจเฉเจจเจฐ เจจเฉเฉฐ เจเฉฑเจกเจฃเจพ เจตเจงเฉเจฐเฉ เจฎเฉเจธเจผเจเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจฟเจเจเจเจฟ เจเฉฐเจเฉเจจเจฐ เจตเจฟเฉฑเจ เจธเฉเจชเจฐเจฏเฉเจเจผเจฐ เจเฉเจฒ เจธเจฟเจฐเจซ เจเฉฐเจเฉเจจเจฐ เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจนเจพเจฒเจพเจเจเจฟ, เจเฉฐเจเฉเจจเจฐ เจฆเฉ เจ เฉฐเจฆเจฐ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจจเฉเฉฐ เจ เจช เจเฉ เจกเฉเจ เจฐเฉฑเจเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจ เจคเฉ เจชเฉเจฐเจพเจฃเฉ เจธเฉฐเจธเจเจฐเจฃเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจฆเฉ เจเจพเจฐเจจ เจเจฐเจจเจฒ เจฆเฉ (เจฒเฉเจจเจเจธ เจฒเจ เจขเฉเจเจตเฉเจ, เจเฉเจ เจนเฉฑเจฆ เจคเฉฑเจ FreeBSD), เจเจฐเจจเจฒ เจเจเจธเฉเจฒเฉเจธเจผเจจ เจธเจฟเจธเจเจฎ เจจเฉเฉฐ "เจคเฉเฉเจจ" เจ เจคเฉ เจฎเฉเฉฑเจ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเฉ เจธเฉฐเจญเจพเจตเจจเจพ เจเฉเจฐ-เจเจผเฉเจฐเฉ เจนเฉเฅค
เจเฉฑเจ เจเฉฐเจเฉเจจเจฐ (เจเฉฑเจ เจธเจผเฉเจฐเฉเจเจคเฉ เจธเจฟเจธเจเจฎ, เจชเฉเจเฉเจ เจฎเฉเจจเฉเจเจฐ, เจเจฆเจฟ เจฆเฉ เจจเจพเจฒ) เจตเจฟเฉฑเจ เจเฉฑเจ เจชเฉเจฐเจพ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจฒเจพเจเจ เจเจฐเจจ เจฆเฉ เจฌเจเจพเจ, เจคเฉเจธเฉเจ เจคเฉเจฐเฉฐเจค เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจฎเฉเฉฑเจ เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจ เจเจฟเจนเจพ เจฎเฉเจเจพ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจจเจพ (เจฒเฉเฉเฉเจเจฆเฉ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉเจเจ เจฆเฉ เจฎเฉเจเฉเจฆเจเฉ) เจ เจคเฉ เจนเฉเจฐ เจซเจพเจเจฒเจพเจ)เฅค เจเจน เจตเจฟเจเจพเจฐ เจเฉฐเจเฉเจจเจฐเจพเจเจเจผเจก เจเจชเจฒเฉเจเฉเจธเจผเจจ เจตเจฐเจเฉเจ เจฒเจพเจเจเจผเฉเจธเจผเจจ เจฒเจ เจเจงเจพเจฐ เจตเจเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ, เจเจฟเจธเจฆเจพ เจธเจญ เจคเฉเจ เจชเฉเจฐเจฎเฉเฉฑเจ เจ เจคเฉ เจฎเจธเจผเจนเฉเจฐ เจชเฉเจฐเจคเฉเจจเจฟเจงเฉ เจกเฉเจเจฐ เจนเฉเฅค เจชเจฟเจเจฒเฉ เจธเจฟเจธเจเจฎเจพเจ เจฆเฉ เจฎเฉเจเจพเจฌเจฒเฉ, เจเฉฐเจเฉเจจเจฐ เจฆเฉ เจ เฉฐเจฆเจฐ เจเฉฐเจเฉเจจเจฐเจพเจ เจ เจคเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจธเจเฉเจ เจเฉเจฐเฉเจเจฟเฉฐเจ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจตเจฐเจเฉเจ เจฒ เจจเฉเจเจตเจฐเจ เจฒเจ เจฌเจฟเจฒเจ-เจเจจ เจธเจฎเจฐเจฅเจจ เจฆเฉ เจจเจพเจฒ, เจตเจงเฉเจฐเฉ เจฒเจเจเจฆเจพเจฐ เจ เจฒเฉฑเจ-เจฅเจฒเฉฑเจ เจตเจฟเจงเฉ, เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจตเฉฑเจกเฉ เจเจฟเจฃเจคเฉ เจตเจฟเฉฑเจ เจญเฉเจคเจฟเจ เจธเจฐเจตเจฐเจพเจ เจคเฉเจ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ เจ เจจเฉเจเฉเจฒ เจตเจพเจคเจพเจตเจฐเจฃ เจฌเจฃเจพเจเจฃ เจฆเฉ เจธเจฎเจฐเฉฑเจฅเจพ เจฆเฉ เจจเจคเฉเจเฉ เจตเจเฉเจ - เจฆเจธเจคเฉ เจธเจฐเฉเจค เจชเฉเจฐเจฌเฉฐเจงเจจ เจฆเฉ เจฒเฉเฉ เจคเฉเจ เจฌเจฟเจจเจพเจเฅค
เจกเฉเจเจฐ
เจกเฉเจเจฐ เจธเจญ เจคเฉเจ เจฎเจธเจผเจนเฉเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจเฉฐเจเฉเจจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจธเฉเจซเจเจตเฉเจ เจฐ เจนเฉเฅค เจเฉ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ, เจเจน เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ เจฆเฉเจเจ เจฎเจฟเจเจฐเฉ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉ - cgroups, เจจเฉเจฎเจธเจชเฉเจธ, เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ, เจเจฆเจฟ, เจจเจพเจฒ เจนเฉ Aufs เจซเจพเจเจฒ เจธเจฟเจธเจเจฎ เจ เจคเฉ เจนเฉเจฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเฉ เจกเจฟเจธเจ เจธเจชเฉเจธ เจฌเจเจพเจเจฃ เจฒเจเฅค
เจธเจฐเฉเจค: เจตเจฟเจเฉเจฎเฉเจกเฉเจ
เจเจฐเจเฉเจเฉเจเจเจฐ
เจธเฉฐเจธเจเจฐเจฃ 1.11 เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจกเฉเจเจฐ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ เจธเฉเจตเจพ เจฆเฉ เจคเฉเจฐ เจคเฉ เจเฉฐเจฎ เจเจฐเจฆเจพ เจธเฉ เจเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจฆเฉ เจจเจพเจฒ เจธเจพเจฐเฉ เจธเฉฐเจเจพเจฒเจจ เจเจฐเจฆเจพ เจธเฉ: เจเฉฐเจเฉเจจเจฐเจพเจ เจฒเจ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจเจพ, เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเจจเจพ, API เจฌเฉเจจเจคเฉเจเจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเจจเจพเฅค เจธเฉฐเจธเจเจฐเจฃ 1.11 เจฆเฉ เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเฉเจ, เจกเฉเจเจฐ เจจเฉเฉฐ เจเจ เจนเจฟเฉฑเจธเจฟเจเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ เจธเฉ เจเฉ เจเฉฑเจ เจฆเฉเจเฉ เจจเจพเจฒ เจเฉฐเจเจฐเฉเจเจ เจเจฐเจฆเฉ เจนเจจ: เจเฉฐเจเฉเจจเจฐ, เจเฉฐเจเฉเจจเจฐเจพเจ เจฆเฉ เจชเฉเจฐเฉ เจเฉเจตเจจ เจเฉฑเจเจฐ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเจจ เจฒเจ (เจกเจฟเจธเจ เจธเจชเฉเจธ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจเจพ, เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจเจพ, เจจเฉเจเจตเจฐเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ, เจฒเจพเจเจ เจเจฐเจจเจพ, เจธเจฅเจพเจชเจฟเจค เจเจฐเจจเจพ เจ เจคเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจฆเฉ เจธเจฅเจฟเจคเฉ เจฆเฉ เจจเจฟเจเจฐเจพเจจเฉ) เจ เจคเฉ runC, เจเฉฐเจเฉเจจเจฐ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจเจจเจตเจพเจเจฐเจฎเฉเจเจ, cgroups เจฆเฉ เจตเจฐเจคเฉเจ เจ เจคเฉ เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ เจฆเฉเจเจ เจนเฉเจฐ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ 'เจคเฉ เจเจงเจพเจฐเจฟเจค เจนเฉเฅค เจกเฉเจเจฐ เจธเฉเจตเจพ เจเจชเจฃเฉ เจเจช เจฐเจนเจฟเฉฐเจฆเฉ เจนเฉ, เจชเจฐ เจนเฉเจฃ เจเจน เจธเจฟเจฐเจซ เจเฉฐเจเฉเจจเจฐเจก เจตเจฟเฉฑเจ เจ เจจเฉเจตเจพเจฆ เจเฉเจคเฉ API เจฌเฉเจจเจคเฉเจเจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฒเจ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเฉเฅค
เจเฉฐเจธเจเจพเจฒเฉเจธเจผเจจ เจ เจคเฉ เจธเฉฐเจฐเจเจจเจพ
เจกเฉเจเจฐ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฆเจพ เจฎเฉเจฐเจพ เจฎเจจเจชเจธเฉฐเจฆ เจคเจฐเฉเจเจพ เจกเฉเจเจฐ-เจฎเจธเจผเฉเจจ เจนเฉ, เจเฉ เจเจฟ เจฐเจฟเจฎเฉเจ เจธเจฐเจตเจฐเจพเจ (เจตเฉฑเจ-เจตเฉฑเจ เจเจฒเจพเจเจกเจธ เจธเจฎเฉเจค) 'เจคเฉ เจกเฉเจเจฐ เจจเฉเฉฐ เจธเจฟเฉฑเจงเจพ เจธเจฅเจพเจชเจฟเจค เจ เจคเฉ เจธเฉฐเจฐเจเจฟเจค เจเจฐเจจ เจคเฉเจ เจเจฒเจพเจตเจพ, เจฐเจฟเจฎเฉเจ เจธเจฐเจตเจฐเจพเจ เจฆเฉ เจซเจพเจเจฒ เจธเจฟเจธเจเจฎเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ เจ เจคเฉ เจเจ เจเจฎเจพเจเจกเจพเจ เจจเฉเฉฐ เจตเฉ เจเจฒเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจนเจพเจฒเจพเจเจเจฟ, 2018 เจคเฉเจ, เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฎเฉเจธเจผเจเจฟเจฒ เจจเจพเจฒ เจตเจฟเจเจธเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจเจธเจฒเจ เจ เจธเฉเจ เจเจธเจจเฉเฉฐ เจเจผเจฟเจเจฆเจพเจคเจฐ เจฒเฉเจจเจเจธ เจกเจฟเจธเจเจฐเฉเจฌเจฟเจเจธเจผเจจเจพเจ เจฒเจ เจฎเจฟเจเจฐเฉ เจคเจฐเฉเจเฉ เจจเจพเจฒ เจธเจฅเจพเจชเจฟเจค เจเจฐเจพเจเจเฉ - เจเฉฑเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจเฉเฉเจจเจพ เจ เจคเฉ เจฒเฉเฉเฉเจเจฆเฉ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจเจพเฅค
เจเจน เจตเจฟเจงเฉ เจธเจตเฉเจเจฒเจฟเจค เจธเจฅเจพเจชเจจเจพ เจฒเจ เจตเฉ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ Ansible เจเจพเจ เจนเฉเจฐ เจธเจฎเจพเจจ เจชเฉเจฐเจฃเจพเจฒเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ, เจชเจฐ เจฎเฉเจ เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ เจเจธ เจฌเจพเจฐเฉ เจตเจฟเจเจพเจฐ เจจเจนเฉเจ เจเจฐเจพเจเจเจพเฅค
เจธเจฅเจพเจชเจจเจพ Centos 7 'เจคเฉ เจเฉเจคเฉ เจเจพเจตเฉเจเฉ, เจฎเฉเจ เจเฉฑเจ เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจจเฉเฉฐ เจธเจฐเจตเจฐ เจตเจเฉเจ เจตเจฐเจคเจพเจเจเจพ, เจเฉฐเจธเจเจพเจฒ เจเจฐเจจ เจฒเจ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉเจเจ เจเจฎเจพเจเจกเจพเจ เจจเฉเฉฐ เจเจฒเจพเจตเจพเจเจเจพ:
# yum install -y yum-utils
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce docker-ce-cli containerd.io
เจเฉฐเจธเจเจพเจฒเฉเจธเจผเจจ เจคเฉเจ เจฌเจพเจ เจฆ, เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉเจตเจพ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจธเจเจพเจฐเจเจ เฉฑเจช เจตเจฟเฉฑเจ เจชเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
# systemctl enable docker
# systemctl start docker
# firewall-cmd --zone=public --add-port=2377/tcp --permanent
เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจคเฉเจธเฉเจ เจเฉฑเจ เจกเฉเจเจฐ เจธเจฎเฉเจน เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ, เจเจฟเจธ เจฆเฉ เจเจชเจญเฉเจเจคเจพ เจฌเจฟเจจเจพเจ เจธเฉเจกเฉ เจฆเฉ เจกเฉเจเจฐ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเจฃเจเฉ, เจฒเฉเจเจฟเฉฐเจ เจธเฉเจ เจ เจช เจเจฐ เจธเจเจฃเจเฉ, เจฌเจพเจนเจฐเฉเจ API เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจเจฐ เจธเจเจฃเจเฉ, เจ เจคเฉ เจซเจพเจเจฐเจตเจพเจฒ เจจเฉเฉฐ เจตเจงเฉเจฐเฉ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจเจพ เจจเจพ เจญเฉเฉฑเจฒเฉ (เจนเจฐ เจเฉเจเจผ เจเจฟเจธเจฆเฉ เจเจเจพเจเจผเจค เจจเจนเฉเจ เจนเฉ) เจเฉฑเจชเจฐ เจ เจคเฉ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉเจเจ เจเจฆเจพเจนเจฐเจฃเจพเจ เจตเจฟเฉฑเจ เจฎเจจเจพเจนเฉ เจนเฉ - เจฎเฉเจ เจเจธเจจเฉเฉฐ เจธเจพเจฆเจเฉ เจ เจคเฉ เจธเจชเจธเจผเจเจคเจพ เจฒเจ เจเฉฑเจก เจฆเจฟเฉฑเจคเจพ เจนเฉ), เจชเจฐ เจฎเฉเจ เจเฉฑเจฅเฉ เจตเจงเฉเจฐเฉ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจจเจนเฉเจ เจเจพเจตเจพเจเจเจพเฅค
เจนเฉเจฐ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ
เจเฉฑเจชเจฐ เจฆเฉฑเจธเฉ เจกเฉเจเจฐ เจฎเจธเจผเฉเจจ เจคเฉเจ เจเจฒเจพเจตเจพ, เจกเฉเจเจฐ เจฐเจเจฟเจธเจเจฐเฉ เจตเฉ เจนเฉ, เจเฉฐเจเฉเจจเจฐเจพเจ เจฒเจ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจเฉเจฒ, เจจเจพเจฒ เจนเฉ เจกเฉเจเจฐ เจเฉฐเจชเฉเจเจผ, เจเฉฐเจเฉเจจเจฐเจพเจ เจตเจฟเฉฑเจ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฆเฉ เจคเฉเจจเจพเจคเฉ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฒเจค เจเจฐเจจ เจฒเจ เจเฉฑเจ เจเฉเจฒ, YAML เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจธเฉฐเจฐเจเจฟเจค เจเจฐเจจ เจฒเจ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจ เจคเฉ เจนเฉเจฐ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจเฉเจเจผเจพเจ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจจเฉเฉฑเจเจตเจฐเจ, เจธเจเฉเจฐเฉเจเจผ เจกเฉเจเจพ เจฒเจ เจจเจฟเจฐเฉฐเจคเจฐ เจซเจพเจเจฒ เจธเจฟเจธเจเจฎ)เฅค
เจเจธเจฆเฉ เจตเจฐเจคเฉเจ CICD เจฒเจ เจเจจเจตเฉเจ เจฐเจพเจ เจจเฉเฉฐ เจธเฉฐเจเจ เจฟเจค เจเจฐเจจ เจฒเจ เจตเฉ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเฉเฅค เจเฉฑเจ เจนเฉเจฐ เจฆเจฟเจฒเจเจธเจช เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจเจฒเฉฑเจธเจเจฐ เจฎเฉเจก เจตเจฟเฉฑเจ เจเฉฐเจฎ เจเจฐ เจฐเจนเฉ เจนเฉ, เจ เจเฉเจคเฉ เจธเจตเฉเจฐเจฎ เจฎเฉเจก (เจตเจฐเจเจจ 1.12 เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจเจธเจจเฉเฉฐ เจกเฉเจเจฐ เจธเจตเฉเจฐเจฎ เจตเจเฉเจ เจเจพเจฃเจฟเจ เจเจพเจเจฆเจพ เจธเฉ), เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจเจ เจธเจฐเจตเจฐเจพเจ เจคเฉเจ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเฉ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค เจธเจพเจฐเฉ เจธเจฐเจตเจฐเจพเจ เจฆเฉ เจธเจฟเจเจฐ 'เจคเฉ เจเฉฑเจ เจตเจฐเจเฉเจ เจฒ เจจเฉเจเจตเจฐเจ เจฒเจ เจธเจฎเจฐเจฅเจจ เจนเฉ, เจเฉฑเจ เจฌเจฟเจฒเจ-เจเจจ เจฒเฉเจก เจฌเฉเจฒเฉเจเจธเจฐ เจนเฉ, เจ เจคเฉ เจจเจพเจฒ เจนเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจฒเจ เจฐเจพเจเจผ เจฒเจ เจธเจฎเจฐเจฅเจจ เจนเฉ.
เจกเฉเจเจฐ เจเฉฐเจชเฉเจเจผ เจคเฉเจ YAML เจซเจพเจเจฒเจพเจ, เจฎเจพเจฎเฉเจฒเฉ เจธเฉเจงเจพเจ เจฆเฉ เจจเจพเจฒ, เจ
เจเจฟเจนเฉ เจเจฒเฉฑเจธเจเจฐเจพเจ เจฒเจ เจตเจฐเจคเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจ, เจตเฉฑเจ-เจตเฉฑเจ เจเจฆเฉเจธเจผเจพเจ เจฒเจ เจเฉเจเฉ เจ
เจคเฉ เจฎเฉฑเจงเจฎ เจเจเจพเจฐ เจฆเฉ เจเจฒเฉฑเจธเจเจฐเจพเจ เจฆเฉ เจฐเฉฑเจ-เจฐเจเจพเจ
เจจเฉเฉฐ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจธเจตเฉเจเจฒเจฟเจค เจเจฐเจฆเฉเจเจ เจนเจจเฅค เจตเฉฑเจกเฉ เจเจฒเฉฑเจธเจเจฐเจพเจ เจฒเจ, เจเฉเจฌเจฐเจจเฉเจเจธ เจคเจฐเจเฉเจนเฉ เจนเจจ เจเจฟเจเจเจเจฟ เจเฉเฉฐเจก เจฎเฉเจก เจฆเฉ เจฐเฉฑเจ-เจฐเจเจพเจ
เจฆเฉ เจเจฐเจเฉ เจเฉเจฌเจฐเจจเฉเจเจธ เจคเฉเจ เจตเฉฑเจง เจนเฉ เจธเจเจฆเฉ เจนเจจเฅค RunC เจคเฉเจ เจเจฒเจพเจตเจพ, เจคเฉเจธเฉเจ เจเฉฐเจธเจเจพเจฒ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฐเจเฉเจจเจฐ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจตเจพเจคเจพเจตเจฐเจจ เจฆเฉ เจคเฉเจฐ เจคเฉ
เจกเฉเจเจฐ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ
เจเฉฐเจธเจเจพเจฒเฉเจธเจผเจจ เจ
เจคเฉ เจเฉเจเจซเจฟเจเจฐเฉเจธเจผเจจ เจคเฉเจ เจฌเจพเจ
เจฆ, เจ
เจธเฉเจ เจเฉฑเจ เจเจฒเฉฑเจธเจเจฐ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจพเจเจเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจ
เจธเฉเจ เจตเจฟเจเจพเจธ เจเฉเจฎ เจฒเจ เจเจฟเฉฑเจเจฒเฉเจฌ เจ
เจคเฉ เจกเฉเจเจฐ เจฐเจเจฟเจธเจเจฐเฉ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจพเจเจเฉเฅค เจฎเฉเจ เจธเจฐเจตเจฐเจพเจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจคเจฟเฉฐเจจ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจพเจเจเจพ, เจเจฟเจธ 'เจคเฉ เจฎเฉเจ เจตเจฟเจคเจฐเจฟเจค FS GlusterFS เจจเฉเฉฐ เจตเฉ เจคเฉเจจเจพเจค เจเจฐเจพเจเจเจพ; เจฎเฉเจ เจเจธเจจเฉเฉฐ เจกเฉเจเจฐ เจตเจพเจฒเฉเจ
เจฎ เจธเจเฉเจฐเฉเจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจตเจฐเจคเจพเจเจเจพ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจกเฉเจเจฐ เจฐเจเจฟเจธเจเจฐเฉ เจฆเฉ เจเฉฑเจ เจจเฉเจเจธ-เจธเจนเจฟเจฃเจธเจผเฉเจฒ เจธเฉฐเจธเจเจฐเจฃ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจเฅค เจเจฒเจพเจเจฃ เจฒเจ เจฎเฉเฉฑเจ เจญเจพเจ: เจกเฉเจเจฐ เจฐเจเจฟเจธเจเจฐเฉ, Postgresql, Redis, GitLab Swarm เจฆเฉ เจธเจฟเจเจฐ 'เจคเฉ GitLab เจฐเจจเจฐ เจฒเจ เจธเจฎเจฐเจฅเจจ เจฆเฉ เจจเจพเจฒเฅค เจ
เจธเฉเจ เจเจฒเฉฑเจธเจเจฐเจฟเฉฐเจ เจจเจพเจฒ Postgresql เจฒเจพเจเจ เจเจฐเจพเจเจเฉ
GlusterFS เจจเฉเฉฐ เจธเจพเจฐเฉ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจคเฉเจจเจพเจค เจเจฐเจจ เจฒเจ (เจเจนเจจเจพเจ เจจเฉเฉฐ node1, node2, node3 เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ), เจคเฉเจนเจพเจจเฉเฉฐ เจชเฉเจเฉเจ เจเฉฐเจธเจเจพเจฒ เจเจฐเจจ, เจซเจพเจเจฐเจตเจพเจฒ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
# yum -y install centos-release-gluster7
# yum -y install glusterfs-server
# systemctl enable glusterd
# systemctl start glusterd
# firewall-cmd --add-service=glusterfs --permanent
# firewall-cmd --reload
# mkdir -p /srv/gluster
# mkdir -p /srv/docker
# echo "$(hostname):/docker /srv/docker glusterfs defaults,_netdev 0 0" >> /etc/fstab
เจเฉฐเจธเจเจพเจฒเฉเจธเจผเจจ เจคเฉเจ เจฌเจพเจ เจฆ, GlusterFS เจจเฉเฉฐ เจธเฉฐเจฐเจเจฟเจค เจเจฐเจจ 'เจคเฉ เจเฉฐเจฎ เจจเฉเฉฐ เจเฉฑเจ เจจเฉเจก เจคเฉเจ เจเจพเจฐเฉ เจฐเฉฑเจเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ node1:
# gluster peer probe node2
# gluster peer probe node3
# gluster volume create docker replica 3 node1:/srv/gluster node2:/srv/gluster node3:/srv/gluster force
# gluster volume start docker
เจซเจฟเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจจเจคเฉเจเฉ เจตเจพเจฒเฉ เจตเจพเจฒเฉเจ เจฎ เจจเฉเฉฐ เจฎเจพเจเจเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ (เจเจฎเจพเจเจก เจจเฉเฉฐ เจธเจพเจฐเฉ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจเจฒเจพเจเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ):
# mount /srv/docker
เจธเจตเฉเจฐเจฎ เจฎเฉเจก เจจเฉเฉฐ เจเฉฑเจ เจธเจฐเจตเจฐ 'เจคเฉ เจเฉเจเจซเจฟเจเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจเฉ เจเจฟ เจฒเฉเจกเจฐ เจนเฉเจตเฉเจเจพ, เจฌเจพเจเฉ เจจเฉเฉฐ เจเจฒเฉฑเจธเจเจฐ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจนเฉเจฃเจพ เจชเจเจเจพ, เจเจธ เจฒเจ เจชเจนเจฟเจฒเฉ เจธเจฐเจตเจฐ 'เจคเฉ เจเจฎเจพเจเจก เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเฉ เจจเจคเฉเจเฉ เจจเฉเฉฐ เจจเจเจฒ เจเจฐเจจ เจ เจคเฉ เจฆเฉเจเจฟเจเจ 'เจคเฉ เจเจฒเจพเจเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉเจเจเฉเฅค
เจธเจผเฉเจฐเฉเจเจคเฉ เจเจฒเฉฑเจธเจเจฐ เจธเฉเฉฑเจเจ เฉฑเจช, เจฎเฉเจ node1 'เจคเฉ เจเจฎเจพเจเจก เจเจฒเจพเจเจเจฆเจพ เจนเจพเจ:
# docker swarm init
Swarm initialized: current node (a5jpfrh5uvo7svzz1ajduokyq) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0c5mf7mvzc7o7vjk0wngno2dy70xs95tovfxbv4tqt9280toku-863hyosdlzvd76trfptd4xnzd xx.xx.xx.xx:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
# docker swarm join-token manager
เจ เจธเฉเจ เจฆเฉเจเฉ เจเจฎเจพเจเจก เจฆเฉ เจจเจคเฉเจเฉ เจฆเฉ เจจเจเจฒ เจเจฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจเจธเจจเฉเฉฐ node2 เจ เจคเฉ node3 'เจคเฉ เจเจฒเจพเจเจเจฆเฉ เจนเจพเจ:
# docker swarm join --token SWMTKN-x-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxx xx.xx.xx.xx:2377
This node joined a swarm as a manager.
เจเจธ เจฌเจฟเฉฐเจฆเฉ 'เจคเฉ, เจธเจฐเจตเจฐเจพเจ เจฆเฉ เจธเจผเฉเจฐเฉเจเจคเฉ เจธเฉฐเจฐเจเจจเจพ เจชเฉเจฐเฉ เจนเฉ เจเจ เจนเฉ, เจเจ เจธเฉเจตเจพเจตเจพเจ เจจเฉเฉฐ เจธเจฅเจพเจชเจค เจเจฐเจจ เจฒเจ เจ เฉฑเจเฉ เจตเจงเฉเจ; เจเจฒเจพเจเจฃ เจฒเจ เจเจฎเจพเจเจกเจพเจ node1 เจคเฉเจ เจฒเจพเจเจ เจเฉเจคเฉเจเจ เจเจพเจฃเจเฉเจเจ, เจเจฆเฉเจ เจคเฉฑเจ เจเจฟ เจนเฉเจฐ เจจเจฟเจฐเจงเจพเจฐเจฟเจค เจจเจพ เจเฉเจคเจพ เจเจฟเจ เจนเฉเจตเฉเฅค
เจธเจญ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจเจ เจเฉฐเจเฉเจจเจฐเจพเจ เจฒเจ เจจเฉเฉฑเจเจตเจฐเจ เจฌเจฃเจพเจเจ:
# docker network create --driver=overlay etcd
# docker network create --driver=overlay pgsql
# docker network create --driver=overlay redis
# docker network create --driver=overlay traefik
# docker network create --driver=overlay gitlab
เจซเจฟเจฐ เจ เจธเฉเจ เจธเจฐเจตเจฐเจพเจ เจจเฉเฉฐ เจเจฟเฉฐเจจเฉเจนเจฟเจค เจเจฐเจฆเฉ เจนเจพเจ, เจเฉเจ เจธเฉเจตเจพเจตเจพเจ เจจเฉเฉฐ เจธเจฐเจตเจฐเจพเจ เจจเจพเจฒ เจเฉเฉเจจ เจฒเจ เจเจน เจเจผเจฐเฉเจฐเฉ เจนเฉ:
# docker node update --label-add nodename=node1 node1
# docker node update --label-add nodename=node2 node2
# docker node update --label-add nodename=node3 node3
เจ เฉฑเจเฉ, เจ เจธเฉเจ etcd เจกเฉเจเจพ, KV เจธเจเฉเจฐเฉเจ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจจ เจฒเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ, เจเฉ เจเจฐเฉเจซเจฟเจ เจ เจคเฉ เจธเจเฉเจฒเจจ เจฒเจ เจฒเฉเฉเฉเจเจฆเจพ เจนเฉเฅค Postgresql เจฆเฉ เจธเจฎเจพเจจ, เจเจน เจธเจฐเจตเจฐเจพเจ เจจเจพเจฒ เจเฉเฉเฉ เจเฉฐเจเฉเจจเจฐ เจนเฉเจฃเจเฉ, เจเจธเจฒเจ เจ เจธเฉเจ เจธเจพเจฐเฉ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจเจน เจเจฎเจพเจเจก เจเจฒเจพเจเจเจฆเฉ เจนเจพเจ:
# mkdir -p /srv/etcd
เจ เฉฑเจเฉ, etcd เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจซเจพเจเจฒ เจฌเจฃเจพเจ เจ เจคเฉ เจเจธเจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉ:
00etcd.yml
version: '3.7'
services:
etcd1:
image: quay.io/coreos/etcd:latest
hostname: etcd1
command:
- etcd
- --name=etcd1
- --data-dir=/data.etcd
- --advertise-client-urls=http://etcd1:2379
- --listen-client-urls=http://0.0.0.0:2379
- --initial-advertise-peer-urls=http://etcd1:2380
- --listen-peer-urls=http://0.0.0.0:2380
- --initial-cluster=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- --initial-cluster-state=new
- --initial-cluster-token=etcd-cluster
networks:
- etcd
volumes:
- etcd1vol:/data.etcd
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node1]
etcd2:
image: quay.io/coreos/etcd:latest
hostname: etcd2
command:
- etcd
- --name=etcd2
- --data-dir=/data.etcd
- --advertise-client-urls=http://etcd2:2379
- --listen-client-urls=http://0.0.0.0:2379
- --initial-advertise-peer-urls=http://etcd2:2380
- --listen-peer-urls=http://0.0.0.0:2380
- --initial-cluster=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- --initial-cluster-state=new
- --initial-cluster-token=etcd-cluster
networks:
- etcd
volumes:
- etcd2vol:/data.etcd
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node2]
etcd3:
image: quay.io/coreos/etcd:latest
hostname: etcd3
command:
- etcd
- --name=etcd3
- --data-dir=/data.etcd
- --advertise-client-urls=http://etcd3:2379
- --listen-client-urls=http://0.0.0.0:2379
- --initial-advertise-peer-urls=http://etcd3:2380
- --listen-peer-urls=http://0.0.0.0:2380
- --initial-cluster=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- --initial-cluster-state=new
- --initial-cluster-token=etcd-cluster
networks:
- etcd
volumes:
- etcd3vol:/data.etcd
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node3]
volumes:
etcd1vol:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/etcd"
etcd2vol:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/etcd"
etcd3vol:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/etcd"
networks:
etcd:
external: true
# docker stack deploy --compose-file 00etcd.yml etcd
เจเฉเจ เจธเจฎเฉเจ เจฌเจพเจ เจฆ, เจ เจธเฉเจ เจเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจ เจเจฟ etcd เจเจฒเฉฑเจธเจเจฐ เจเฉฑเจชเจฐ เจนเฉ:
# docker exec $(docker ps | awk '/etcd/ {print $1}') etcdctl member list
ade526d28b1f92f7: name=etcd1 peerURLs=http://etcd1:2380 clientURLs=http://etcd1:2379 isLeader=false
bd388e7810915853: name=etcd3 peerURLs=http://etcd3:2380 clientURLs=http://etcd3:2379 isLeader=false
d282ac2ce600c1ce: name=etcd2 peerURLs=http://etcd2:2380 clientURLs=http://etcd2:2379 isLeader=true
# docker exec $(docker ps | awk '/etcd/ {print $1}') etcdctl cluster-health
member ade526d28b1f92f7 is healthy: got healthy result from http://etcd1:2379
member bd388e7810915853 is healthy: got healthy result from http://etcd3:2379
member d282ac2ce600c1ce is healthy: got healthy result from http://etcd2:2379
cluster is healthy
เจ เจธเฉเจ Postgresql เจฒเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ, เจธเจพเจฐเฉ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจเจฎเจพเจเจก เจเจฒเจพเจเจเจฆเฉ เจนเจพเจ:
# mkdir -p /srv/pgsql
เจ เฉฑเจเฉ, Postgresql เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจซเจพเจเจฒ เจฌเจฃเจพเจ:
01pgsql.yml
version: '3.7'
services:
pgsentinel:
image: sorintlab/stolon:master-pg10
command:
- gosu
- stolon
- stolon-sentinel
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
- --log-level=debug
networks:
- etcd
- pgsql
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 30s
order: stop-first
failure_action: pause
pgkeeper1:
image: sorintlab/stolon:master-pg10
hostname: pgkeeper1
command:
- gosu
- stolon
- stolon-keeper
- --pg-listen-address=pgkeeper1
- --pg-repl-username=replica
- --uid=pgkeeper1
- --pg-su-username=postgres
- --pg-su-passwordfile=/run/secrets/pgsql
- --pg-repl-passwordfile=/run/secrets/pgsql_repl
- --data-dir=/var/lib/postgresql/data
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
environment:
- PGDATA=/var/lib/postgresql/data
volumes:
- pgkeeper1:/var/lib/postgresql/data
secrets:
- pgsql
- pgsql_repl
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node1]
pgkeeper2:
image: sorintlab/stolon:master-pg10
hostname: pgkeeper2
command:
- gosu
- stolon
- stolon-keeper
- --pg-listen-address=pgkeeper2
- --pg-repl-username=replica
- --uid=pgkeeper2
- --pg-su-username=postgres
- --pg-su-passwordfile=/run/secrets/pgsql
- --pg-repl-passwordfile=/run/secrets/pgsql_repl
- --data-dir=/var/lib/postgresql/data
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
environment:
- PGDATA=/var/lib/postgresql/data
volumes:
- pgkeeper2:/var/lib/postgresql/data
secrets:
- pgsql
- pgsql_repl
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node2]
pgkeeper3:
image: sorintlab/stolon:master-pg10
hostname: pgkeeper3
command:
- gosu
- stolon
- stolon-keeper
- --pg-listen-address=pgkeeper3
- --pg-repl-username=replica
- --uid=pgkeeper3
- --pg-su-username=postgres
- --pg-su-passwordfile=/run/secrets/pgsql
- --pg-repl-passwordfile=/run/secrets/pgsql_repl
- --data-dir=/var/lib/postgresql/data
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
environment:
- PGDATA=/var/lib/postgresql/data
volumes:
- pgkeeper3:/var/lib/postgresql/data
secrets:
- pgsql
- pgsql_repl
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node3]
postgresql:
image: sorintlab/stolon:master-pg10
command: gosu stolon stolon-proxy --listen-address 0.0.0.0 --cluster-name stolon-cluster --store-backend=etcdv3 --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 30s
order: stop-first
failure_action: rollback
volumes:
pgkeeper1:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/pgsql"
pgkeeper2:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/pgsql"
pgkeeper3:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/pgsql"
secrets:
pgsql:
file: "/srv/docker/postgres"
pgsql_repl:
file: "/srv/docker/replica"
networks:
etcd:
external: true
pgsql:
external: true
เจ เจธเฉเจ เจฐเจพเจเจผ เจคเจฟเจเจฐ เจเจฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจซเจพเจเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ:
# </dev/urandom tr -dc 234567890qwertyuopasdfghjkzxcvbnmQWERTYUPASDFGHKLZXCVBNM | head -c $(((RANDOM%3)+15)) > /srv/docker/replica
# </dev/urandom tr -dc 234567890qwertyuopasdfghjkzxcvbnmQWERTYUPASDFGHKLZXCVBNM | head -c $(((RANDOM%3)+15)) > /srv/docker/postgres
# docker stack deploy --compose-file 01pgsql.yml pgsql
เจเฉเจ เจธเจฎเฉเจ เจฌเจพเจ เจฆ (เจเจฎเจพเจเจก เจฆเฉ เจเจเจเจชเฉเฉฑเจ เจตเฉเจเฉ เจกเฉเจเจฐ เจธเฉเจตเจพ lsเจเจฟ เจธเจพเจฐเฉเจเจ เจธเฉเจตเจพเจตเจพเจ เจชเฉเจฐเฉเจเจ เจนเฉ เจเจเจเจ เจนเจจ) เจ เจธเฉเจ Postgresql เจเจฒเฉฑเจธเจเจฐ เจจเฉเฉฐ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเจพเจ:
# docker exec $(docker ps | awk '/pgkeeper/ {print $1}') stolonctl --cluster-name=stolon-cluster --store-backend=etcdv3 --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 init
Postgresql เจเจฒเฉฑเจธเจเจฐ เจฆเฉ เจคเจฟเจเจฐเฉ เจฆเฉ เจเจพเจเจ เจเจฐ เจฐเจฟเจนเจพ เจนเฉ:
# docker exec $(docker ps | awk '/pgkeeper/ {print $1}') stolonctl --cluster-name=stolon-cluster --store-backend=etcdv3 --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 status
=== Active sentinels ===
ID LEADER
26baa11d false
74e98768 false
a8cb002b true
=== Active proxies ===
ID
4d233826
9f562f3b
b0c79ff1
=== Keepers ===
UID HEALTHY PG LISTENADDRESS PG HEALTHY PG WANTEDGENERATION PG CURRENTGENERATION
pgkeeper1 true pgkeeper1:5432 true 2 2
pgkeeper2 true pgkeeper2:5432 true 2 2
pgkeeper3 true pgkeeper3:5432 true 3 3
=== Cluster Info ===
Master Keeper: pgkeeper3
===== Keepers/DB tree =====
pgkeeper3 (master)
โโpgkeeper2
โโpgkeeper1
เจ เจธเฉเจ เจฌเจพเจนเจฐเฉเจ เจเฉฐเจเฉเจจเจฐเจพเจ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจเฉเจฒเฉเจนเจฃ เจฒเจ เจเฉเจฐเฉเจซเจฟเจ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจฆเฉ เจนเจพเจ:
03traefik.yml
version: '3.7'
services:
traefik:
image: traefik:latest
command: >
--log.level=INFO
--providers.docker=true
--entryPoints.web.address=:80
--providers.providersThrottleDuration=2
--providers.docker.watch=true
--providers.docker.swarmMode=true
--providers.docker.swarmModeRefreshSeconds=15s
--providers.docker.exposedbydefault=false
--accessLog.bufferingSize=0
--api=true
--api.dashboard=true
--api.insecure=true
networks:
- traefik
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
replicas: 3
placement:
constraints:
- node.role == manager
preferences:
- spread: node.id
labels:
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`traefik.example.com`)
- traefik.http.services.traefik.loadbalancer.server.port=8080
- traefik.docker.network=traefik
networks:
traefik:
external: true
# docker stack deploy --compose-file 03traefik.yml traefik
เจ เจธเฉเจ Redis เจเจฒเฉฑเจธเจเจฐ เจฒเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจ, เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ เจ เจธเฉเจ เจธเจพเจฐเฉ เจจเฉเจกเจพเจ 'เจคเฉ เจธเจเฉเจฐเฉเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ:
# mkdir -p /srv/redis
05redis.yml
version: '3.7'
services:
redis-master:
image: 'bitnami/redis:latest'
networks:
- redis
ports:
- '6379:6379'
environment:
- REDIS_REPLICATION_MODE=master
- REDIS_PASSWORD=xxxxxxxxxxx
deploy:
mode: global
restart_policy:
condition: any
volumes:
- 'redis:/opt/bitnami/redis/etc/'
redis-replica:
image: 'bitnami/redis:latest'
networks:
- redis
ports:
- '6379'
depends_on:
- redis-master
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis-master
- REDIS_MASTER_PORT_NUMBER=6379
- REDIS_MASTER_PASSWORD=xxxxxxxxxxx
- REDIS_PASSWORD=xxxxxxxxxxx
deploy:
mode: replicated
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: any
redis-sentinel:
image: 'bitnami/redis:latest'
networks:
- redis
ports:
- '16379'
depends_on:
- redis-master
- redis-replica
entrypoint: |
bash -c 'bash -s <<EOF
"/bin/bash" -c "cat <<EOF > /opt/bitnami/redis/etc/sentinel.conf
port 16379
dir /tmp
sentinel monitor master-node redis-master 6379 2
sentinel down-after-milliseconds master-node 5000
sentinel parallel-syncs master-node 1
sentinel failover-timeout master-node 5000
sentinel auth-pass master-node xxxxxxxxxxx
sentinel announce-ip redis-sentinel
sentinel announce-port 16379
EOF"
"/bin/bash" -c "redis-sentinel /opt/bitnami/redis/etc/sentinel.conf"
EOF'
deploy:
mode: global
restart_policy:
condition: any
volumes:
redis:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: "/srv/redis"
networks:
redis:
external: true
# docker stack deploy --compose-file 05redis.yml redis
เจกเฉเจเจฐ เจฐเจเจฟเจธเจเจฐเฉ เจธเจผเจพเจฎเจฒ เจเจฐเฉ:
06registry.yml
version: '3.7'
services:
registry:
image: registry:2.6
networks:
- traefik
volumes:
- registry_data:/var/lib/registry
deploy:
replicas: 1
placement:
constraints: [node.role == manager]
restart_policy:
condition: on-failure
labels:
- traefik.enable=true
- traefik.http.routers.registry.rule=Host(`registry.example.com`)
- traefik.http.services.registry.loadbalancer.server.port=5000
- traefik.docker.network=traefik
volumes:
registry_data:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/registry"
networks:
traefik:
external: true
# mkdir /srv/docker/registry
# docker stack deploy --compose-file 06registry.yml registry
เจ เจคเฉ เจ เฉฐเจค เจตเจฟเฉฑเจ - GitLab:
08gitlab-runner.yml
version: '3.7'
services:
gitlab:
image: gitlab/gitlab-ce:latest
networks:
- pgsql
- redis
- traefik
- gitlab
ports:
- 22222:22
environment:
GITLAB_OMNIBUS_CONFIG: |
postgresql['enable'] = false
redis['enable'] = false
gitlab_rails['registry_enabled'] = false
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "XXXXXXXXXXX"
gitlab_rails['db_host'] = "postgresql"
gitlab_rails['db_port'] = "5432"
gitlab_rails['db_database'] = "gitlab"
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['redis_host'] = 'redis-master'
gitlab_rails['redis_port'] = '6379'
gitlab_rails['redis_password'] = 'xxxxxxxxxxx'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.yandex.ru"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "xxxxxxxxx"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
external_url 'http://gitlab.example.com/'
gitlab_rails['gitlab_shell_ssh_port'] = 22222
volumes:
- gitlab_conf:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)
- traefik.http.services.gitlab.loadbalancer.server.port=80
- traefik.docker.network=traefik
gitlab-runner:
image: gitlab/gitlab-runner:latest
networks:
- gitlab
volumes:
- gitlab_runner_conf:/etc/gitlab
- /var/run/docker.sock:/var/run/docker.sock
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
gitlab_conf:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/conf"
gitlab_logs:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/logs"
gitlab_data:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/data"
gitlab_runner_conf:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/runner"
networks:
pgsql:
external: true
redis:
external: true
traefik:
external: true
gitlab:
external: true
# mkdir -p /srv/docker/gitlab/conf
# mkdir -p /srv/docker/gitlab/logs
# mkdir -p /srv/docker/gitlab/data
# mkdir -p /srv/docker/gitlab/runner
# docker stack deploy --compose-file 08gitlab-runner.yml gitlab
เจเจฒเฉฑเจธเจเจฐ เจ เจคเฉ เจธเฉเจตเจพเจตเจพเจ เจฆเฉ เจ เฉฐเจคเจฎ เจธเจฅเจฟเจคเฉ:
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
lef9n3m92buq etcd_etcd1 replicated 1/1 quay.io/coreos/etcd:latest
ij6uyyo792x5 etcd_etcd2 replicated 1/1 quay.io/coreos/etcd:latest
fqttqpjgp6pp etcd_etcd3 replicated 1/1 quay.io/coreos/etcd:latest
hq5iyga28w33 gitlab_gitlab replicated 1/1 gitlab/gitlab-ce:latest *:22222->22/tcp
dt7s6vs0q4qc gitlab_gitlab-runner replicated 1/1 gitlab/gitlab-runner:latest
k7uoezno0h9n pgsql_pgkeeper1 replicated 1/1 sorintlab/stolon:master-pg10
cnrwul4r4nse pgsql_pgkeeper2 replicated 1/1 sorintlab/stolon:master-pg10
frflfnpty7tr pgsql_pgkeeper3 replicated 1/1 sorintlab/stolon:master-pg10
x7pqqchi52kq pgsql_pgsentinel replicated 3/3 sorintlab/stolon:master-pg10
mwu2wl8fti4r pgsql_postgresql replicated 3/3 sorintlab/stolon:master-pg10
9hkbe2vksbzb redis_redis-master global 3/3 bitnami/redis:latest *:6379->6379/tcp
l88zn8cla7dc redis_redis-replica replicated 3/3 bitnami/redis:latest *:30003->6379/tcp
1utp309xfmsy redis_redis-sentinel global 3/3 bitnami/redis:latest *:30002->16379/tcp
oteb824ylhyp registry_registry replicated 1/1 registry:2.6
qovrah8nzzu8 traefik_traefik replicated 3/3 traefik:latest *:80->80/tcp, *:443->443/tcp
เจนเฉเจฐ เจเฉ เจธเฉเจงเจพเจฐ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ? https เจเฉฑเจคเฉ เจเฉฐเจเฉเจจเจฐ เจเจฒเจพเจเจฃ เจฒเจ Traefik เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจเจพ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจ, Postgresql เจ เจคเฉ Redis เจฒเจ tls เจเจจเจเฉเจฐเจฟเจชเจธเจผเจจ เจธเจผเจพเจฎเจฒ เจเจฐเฉเฅค เจชเจฐ เจเจฎ เจคเฉเจฐ 'เจคเฉ, เจเจน เจชเจนเจฟเจฒเจพเจ เจนเฉ เจกเจฟเจตเฉเจฒเจชเจฐเจพเจ เจจเฉเฉฐ เจชเฉเจเจธเฉ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจฆเจฟเฉฑเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเจ เจนเฉเจฃ เจกเฉเจเจฐ เจฆเฉ เจตเจฟเจเจฒเจชเจพเจ เจจเฉเฉฐ เจตเฉเจเฉเจ.
เจชเฉเจกเจฎเฉเจจ
เจชเฉเจกเจพเจ เจฆเฉเจเจฐเจพ เจธเจฎเฉเจน เจเฉเจคเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจเฉฑเจ เจนเฉเจฐ เจเจพเจซเจผเฉ เจเจพเจฃเจฟเจ-เจชเจเจพเจฃเจฟเจ เจเฉฐเจเจฃ (เจชเฉเจก, เจเฉฑเจเจ เฉ เจคเฉเจจเจพเจค เจเฉฐเจเฉเจจเจฐเจพเจ เจฆเฉ เจธเจฎเฉเจน)เฅค เจกเฉเจเจฐ เจฆเฉ เจเจฒเจ, เจเจธ เจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐ เจเจฒเจพเจเจฃ เจฒเจ เจเจฟเจธเฉ เจธเฉเจตเจพ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ; เจธเจพเจฐเจพ เจเฉฐเจฎ เจฒเจฟเจฌเจชเฉเจก เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจฆเฉเจเจฐเจพ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจเฉ เจตเจฟเฉฑเจ เจตเฉ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉ, เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจเฉฑเจ OCI-เจ เจจเฉเจเฉเจฒ เจฐเจจเจเจพเจเจฎ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจเจฟเจตเฉเจ เจเจฟ runCเฅค
เจชเฉเจกเจฎเฉเจจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจกเฉเจเจฐ เจฒเจ เจเจธ เจฆเฉ เจฏเจพเจฆ เจฆเจฟเจตเจพเจเจเจฆเจพ เจนเฉ, เจเจธ เจฌเจฟเฉฐเจฆเฉ เจคเฉฑเจ เจเจฟ เจคเฉเจธเฉเจ เจเจธเจจเฉเฉฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ (เจเจฟเจตเฉเจ เจเจฟ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจฒเฉเจเจพเจ เจฆเฉเจเจฐเจพ เจเจฟเจนเจพ เจเจฟเจ เจนเฉ เจเจฟเจจเฉเจนเจพเจ เจจเฉ เจเจธ เจฒเฉเจ เจฆเฉ เจฒเฉเจเจ เจธเจฎเฉเจค เจเจธเจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเฉเจคเฉ เจนเฉ):
$ alias docker=podman
เจ เจคเฉ เจคเฉเจธเฉเจ เจเฉฐเจฎ เจเจฐเจจเจพ เจเจพเจฐเฉ เจฐเฉฑเจ เจธเจเจฆเฉ เจนเฉเฅค เจเจฎ เจคเฉเจฐ 'เจคเฉ, เจชเฉเจกเจฎเฉเจจ เจฆเฉ เจจเจพเจฒ เจธเจฅเจฟเจคเฉ เจฌเจนเฉเจค เจฆเจฟเจฒเจเจธเจช เจนเฉ, เจเจฟเจเจเจเจฟ เจเฉเจเจฐ เจเฉเจฌเจฐเจจเฉเจเจธ เจฆเฉ เจธเจผเฉเจฐเฉเจเจคเฉ เจธเฉฐเจธเจเจฐเจฃเจพเจ เจจเฉ เจกเฉเจเจฐ เจจเจพเจฒ เจเฉฐเจฎ เจเฉเจคเจพ เจธเฉ, เจคเจพเจ 2015 เจฆเฉ เจเจธเจชเจพเจธ, เจเฉฐเจเฉเจจเจฐเจพเจ เจฆเฉ เจฆเฉเจจเฉเจ (เจเจธเฉเจเจ - เจเจชเจจ เจเฉฐเจเฉเจจเจฐ เจเจจเฉเจธเจผเฉเจเจเจฟเจต) เจฆเฉ เจฎเจพเจจเจเฉเจเจฐเจจ เจ เจคเฉ เจกเฉเจเจฐ เจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐ เจ เจคเฉ เจฐเจจเจธเฉ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฃ เจคเฉเจ เจฌเจพเจ เจฆ, เจเฉเจฌเจฐเจจเฉเจเจธ เจตเจฟเฉฑเจ เจเฉฑเจฒเจฃ เจฒเจ เจกเฉเจเจฐ เจฆเจพ เจเฉฑเจ เจตเจฟเจเจฒเจช เจตเจฟเจเจธเจค เจเฉเจคเจพ เจเจพ เจฐเจฟเจนเจพ เจนเฉ: CRI-O. เจเจธ เจธเจฌเฉฐเจง เจตเจฟเฉฑเจ เจชเฉเจกเจฎเฉเจจ เจกเฉเจเจฐ เจฆเจพ เจเฉฑเจ เจตเจฟเจเจฒเจช เจนเฉ, เจเฉเจฌเจฐเจจเฉเจเจธ เจฆเฉ เจธเจฟเจงเจพเจเจคเจพเจ 'เจคเฉ เจฌเจฃเจพเจเจ เจเจฟเจ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจเจฐเฉเฉฑเจช เจเจฐเจจเจพ เจธเจผเจพเจฎเจฒ เจนเฉ, เจชเจฐ เจชเฉเจฐเฉเจเฉเจเจ เจฆเจพ เจฎเฉเฉฑเจ เจเจฆเฉเจธเจผ เจตเจพเจงเฉ เจธเฉเจตเจพเจตเจพเจ เจฆเฉ เจฌเจฟเจจเจพเจ เจกเฉเจเจฐ-เจธเจผเฉเจฒเฉ เจฆเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเจจเจพ เจนเฉเฅค เจธเจชเฉฑเจธเจผเจ เจเจพเจฐเจจเจพเจ เจเจฐเจเฉ, เจเฉเจ เจเฉเฉฐเจก เจฎเฉเจก เจจเจนเฉเจ เจนเฉ, เจเจฟเจเจเจเจฟ เจกเจฟเจตเฉเจฒเจชเจฐ เจธเจชเฉฑเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจเจนเจฟเฉฐเจฆเฉ เจนเจจ เจเจฟ เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจเจฒเฉฑเจธเจเจฐ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ, เจคเจพเจ เจเฉเจฌเจฐเจจเฉเจเจธ เจฒเจ.
เจธเฉเจเจฟเฉฐเจ
Centos 7 'เจคเฉ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฒเจ, เจธเจฟเจฐเจซเจผ เจเจเจธเจเจฐเจพ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจจเฉเฉฐ เจธเจฐเจเจฐเจฎ เจเจฐเฉ, เจ เจคเฉ เจซเจฟเจฐ เจเจฎเจพเจเจก เจจเจพเจฒ เจธเจญ เจเฉเจ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ:
# yum -y install podman
เจนเฉเจฐ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ
เจชเฉเจกเจฎเฉเจจ เจธเจฟเจธเจเจฎเจก เจฒเจ เจเจเจพเจเจเจ เจคเจฟเจเจฐ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจเจธ เจคเจฐเฉเจนเจพเจ เจธเจฐเจตเจฐ เจฐเฉเจฌเฉเจ เจคเฉเจ เจฌเจพเจ เจฆ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฆเฉ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจธเจฟเจธเจเจฎเจก เจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐ เจตเจฟเฉฑเจ pid 1 เจฆเฉ เจคเฉเจฐ เจคเฉ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจเฉเจธเจผเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจเฉฑเจ เจตเฉฑเจเจฐเจพ เจฌเจฟเจฒเจกเจน เจเฉเจฒ เจนเฉ, เจเฉฑเจฅเฉ เจฅเจฐเจก-เจชเจพเจฐเจเฉ เจเฉเจฒ เจตเฉ เจนเจจ - เจกเฉเจเจฐ-เจเฉฐเจชเฉเจเจผ เจฆเฉ เจเจจเจพเจฒเจพเจ, เจเฉ เจเจฟ เจเฉเจฌเจฐเจจเฉเจเจธ เจฆเฉ เจ เจจเฉเจเฉเจฒ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒเจพเจ เจตเฉ เจคเจฟเจเจฐ เจเจฐเจฆเฉ เจนเจจ, เจเจธเจฒเจ เจชเฉเจกเจฎเฉเจจ เจคเฉเจ เจเฉเจฌเจฐเจจเฉเจเจธ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉ เจจเฉเฉฐ เจเจฟเฉฐเจจเจพ เจธเฉฐเจญเจต เจนเฉ เจธเจเฉ เจธเจฐเจฒ เจฌเจฃเจพเจเจ เจเจพเจเจฆเจพ เจนเฉเฅค
เจชเฉเจกเจฎเฉเจจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ
เจเจฟเจเจเจเจฟ เจเฉฑเจฅเฉ เจเฉเจ เจเฉเฉฐเจก เจฎเฉเจก เจจเจนเฉเจ เจนเฉ (เจเฉเจเจฐ เจเจฟเจธเฉ เจเจฒเฉฑเจธเจเจฐ เจฆเฉ เจฒเฉเฉ เจนเฉ เจคเจพเจ เจธเจพเจจเฉเฉฐ เจเฉเจฌเจฐเจจเฉเจเจธ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ), เจ เจธเฉเจ เจเจธเจจเฉเฉฐ เจตเฉฑเจเจฐเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจตเจฟเฉฑเจ เจเจเฉฑเจ เจพ เจเจฐเจพเจเจเฉเฅค
เจชเฉเจกเจฎเฉเจจ-เจเฉฐเจชเฉเจเจผ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ:
# yum -y install python3-pip
# pip3 install podman-compose
เจชเฉเจกเจฎเฉเจจ เจฒเจ เจจเจคเฉเจเฉ เจตเจพเจฒเฉ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจฅเฉเฉเฉ เจตเฉฑเจเจฐเฉ เจนเฉ, เจเจธเจฒเจ เจเจฆเจพเจนเจฐเจจ เจฒเจ เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจตเจพเจฒเฉเจ เจฎ เจธเฉเจเจธเจผเจจ เจจเฉเฉฐ เจธเฉเจตเจพเจตเจพเจ เจตเจพเจฒเฉ เจธเฉเจเจธเจผเจจ เจตเจฟเฉฑเจ เจธเจฟเฉฑเจงเจพ เจญเฉเจเจฃเจพ เจชเจฟเจเฅค
gitlab-podman.yml
version: '3.7'
services:
gitlab:
image: gitlab/gitlab-ce:latest
hostname: gitlab.example.com
restart: unless-stopped
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['gitlab_shell_ssh_port'] = 22222
ports:
- "80:80"
- "22222:22"
volumes:
- /srv/podman/gitlab/conf:/etc/gitlab
- /srv/podman/gitlab/data:/var/opt/gitlab
- /srv/podman/gitlab/logs:/var/log/gitlab
networks:
- gitlab
gitlab-runner:
image: gitlab/gitlab-runner:alpine
restart: unless-stopped
depends_on:
- gitlab
volumes:
- /srv/podman/gitlab/runner:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
networks:
- gitlab
networks:
gitlab:
# podman-compose -f gitlab-runner.yml -d up
เจจเจคเฉเจเจพ:
# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da53da946c01 docker.io/gitlab/gitlab-runner:alpine run --user=gitlab... About a minute ago Up About a minute ago 0.0.0.0:22222->22/tcp, 0.0.0.0:80->80/tcp root_gitlab-runner_1
781c0103c94a docker.io/gitlab/gitlab-ce:latest /assets/wrapper About a minute ago Up About a minute ago 0.0.0.0:22222->22/tcp, 0.0.0.0:80->80/tcp root_gitlab_1
เจเจ เจฆเฉเจเฉเจ เจเจฟ เจเจน เจธเจฟเจธเจเจฎเจก เจ เจคเฉ เจเฉเจฌเจฐเจจเฉเจเจธ เจฒเจ เจเฉ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ, เจเจธเจฆเฉ เจฒเจ เจธเจพเจจเฉเฉฐ เจชเฉเจก เจฆเจพ เจจเจพเจฎ เจเจพเจ เจเจเจกเฉ เจฒเฉฑเจญเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
# podman pod ls
POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID
71fc2b2a5c63 root Running 11 minutes ago 3 db40ab8bf84b
เจเฉเจฌเจฐเจจเฉเจเจธ:
# podman generate kube 71fc2b2a5c63
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-1.6.4
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-07-29T19:22:40Z"
labels:
app: root
name: root
spec:
containers:
- command:
- /assets/wrapper
env:
- name: PATH
value: /opt/gitlab/embedded/bin:/opt/gitlab/bin:/assets:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: HOSTNAME
value: gitlab.example.com
- name: container
value: podman
- name: GITLAB_OMNIBUS_CONFIG
value: |
gitlab_rails['gitlab_shell_ssh_port'] = 22222
- name: LANG
value: C.UTF-8
image: docker.io/gitlab/gitlab-ce:latest
name: rootgitlab1
ports:
- containerPort: 22
hostPort: 22222
protocol: TCP
- containerPort: 80
hostPort: 80
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
volumeMounts:
- mountPath: /var/opt/gitlab
name: srv-podman-gitlab-data
- mountPath: /var/log/gitlab
name: srv-podman-gitlab-logs
- mountPath: /etc/gitlab
name: srv-podman-gitlab-conf
workingDir: /
- command:
- run
- --user=gitlab-runner
- --working-directory=/home/gitlab-runner
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: HOSTNAME
- name: container
value: podman
image: docker.io/gitlab/gitlab-runner:alpine
name: rootgitlab-runner1
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
volumeMounts:
- mountPath: /etc/gitlab-runner
name: srv-podman-gitlab-runner
- mountPath: /var/run/docker.sock
name: var-run-docker.sock
workingDir: /
volumes:
- hostPath:
path: /srv/podman/gitlab/runner
type: Directory
name: srv-podman-gitlab-runner
- hostPath:
path: /var/run/docker.sock
type: File
name: var-run-docker.sock
- hostPath:
path: /srv/podman/gitlab/data
type: Directory
name: srv-podman-gitlab-data
- hostPath:
path: /srv/podman/gitlab/logs
type: Directory
name: srv-podman-gitlab-logs
- hostPath:
path: /srv/podman/gitlab/conf
type: Directory
name: srv-podman-gitlab-conf
status: {}
เจธเจฟเจธเจเจฎเจก:
# podman generate systemd 71fc2b2a5c63
# pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
# autogenerated by Podman 1.6.4
# Thu Jul 29 15:23:28 EDT 2020
[Unit]
Description=Podman pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
Documentation=man:podman-generate-systemd(1)
Requires=container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
Before=container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
[Service]
Restart=on-failure
ExecStart=/usr/bin/podman start db40ab8bf84bf35141159c26cb6e256b889c7a98c0418eee3c4aa683c14fccaa
ExecStop=/usr/bin/podman stop -t 10 db40ab8bf84bf35141159c26cb6e256b889c7a98c0418eee3c4aa683c14fccaa
KillMode=none
Type=forking
PIDFile=/var/run/containers/storage/overlay-containers/db40ab8bf84bf35141159c26cb6e256b889c7a98c0418eee3c4aa683c14fccaa/userdata/conmon.pid
[Install]
WantedBy=multi-user.target
# container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
# autogenerated by Podman 1.6.4
# Thu Jul 29 15:23:28 EDT 2020
[Unit]
Description=Podman container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
Documentation=man:podman-generate-systemd(1)
RefuseManualStart=yes
RefuseManualStop=yes
BindsTo=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
After=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
[Service]
Restart=on-failure
ExecStart=/usr/bin/podman start da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864
ExecStop=/usr/bin/podman stop -t 10 da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864
KillMode=none
Type=forking
PIDFile=/var/run/containers/storage/overlay-containers/da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864/userdata/conmon.pid
[Install]
WantedBy=multi-user.target
# container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service
# autogenerated by Podman 1.6.4
# Thu Jul 29 15:23:28 EDT 2020
[Unit]
Description=Podman container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service
Documentation=man:podman-generate-systemd(1)
RefuseManualStart=yes
RefuseManualStop=yes
BindsTo=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
After=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
[Service]
Restart=on-failure
ExecStart=/usr/bin/podman start 781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3
ExecStop=/usr/bin/podman stop -t 10 781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3
KillMode=none
Type=forking
PIDFile=/var/run/containers/storage/overlay-containers/781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3/userdata/conmon.pid
[Install]
WantedBy=multi-user.target
เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ, เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเจจ เจคเฉเจ เจเจฒเจพเจตเจพ, เจธเจฟเจธเจเจฎเจก เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจเจพเจ เจนเฉเจฐ เจเฉเจ เจจเจนเฉเจ เจเจฐเจฆเฉ เจนเฉ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเจฆเฉเจ เจ เจเจฟเจนเฉ เจธเฉเจตเจพ เจฎเฉเฉ เจเจพเจฒเฉ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจคเจพเจ เจชเฉเจฐเจพเจฃเฉ เจเฉฐเจเฉเจจเจฐเจพเจ เจจเฉเฉฐ เจธเจพเจซเจผ เจเจฐเจจเจพ), เจเจธ เจฒเจ เจคเฉเจนเจพเจจเฉเฉฐ เจ เจเจฟเจนเฉเจเจ เจเฉเจเจผเจพเจ เจเฉเจฆ เจฒเจฟเจเจฃเฉเจเจ เจชเฉเจฃเจเฉเจเจเฅค
เจธเจฟเจงเจพเจเจคเจ เจคเฉเจฐ 'เจคเฉ, เจชเฉเจกเจฎเฉเจจ เจเจน เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจจ เจฒเจ เจเจพเจซเจผเฉ เจนเฉ เจเจฟ เจเฉฐเจเฉเจจเจฐ เจเฉ เจนเจจ, เจกเฉเจเจฐ-เจเฉฐเจชเฉเจเจผ เจฒเจ เจชเฉเจฐเจพเจฃเฉเจเจ เจธเฉฐเจฐเจเจจเจพเจตเจพเจ เจจเฉเฉฐ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐเฉ, เจ เจคเฉ เจซเจฟเจฐ เจเฉเจฌเจฐเจจเฉเจเจธ เจตเฉฑเจฒ เจตเจงเฉ, เจเฉเจเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจเจฒเฉฑเจธเจเจฐ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจเจพเจ เจกเฉเจเจฐ เจฒเจ เจตเจฐเจคเฉเจ เจตเจฟเฉฑเจ เจเจธเจพเจจ เจตเจฟเจเจฒเจช เจชเฉเจฐเจพเจชเจค เจเจฐเฉเฅค
เจเจฐ เจเฉ เจเฉ
เจชเฉเจฐเฉเจเฉเจเจ
เจชเจฒเจพเจธ
เจนเฉเจฐ
เจธเจฟเฉฑเจเจพ
เจเฉเจฌเจฐเจจเฉเจเจธ เจฆเฉ เจธเจฅเจฟเจคเฉ เจฌเจนเฉเจค เจฆเจฟเจฒเจเจธเจช เจนเฉ: เจเฉฑเจ เจชเจพเจธเฉ, เจกเฉเจเจฐ เจจเจพเจฒ เจคเฉเจธเฉเจ เจเฉฑเจ เจเจฒเฉฑเจธเจเจฐ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ (เจธเจตเจพเจฐเจฎ เจฎเฉเจก เจตเจฟเฉฑเจ), เจเจฟเจธ เจจเจพเจฒ เจคเฉเจธเฉเจ เจเจพเจนเจเจพเจ เจฒเจ เจเจคเจชเจพเจฆ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ เจเจฒเจพ เจธเจเจฆเฉ เจนเฉ, เจเจน เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจเฉเจเฉเจเจ เจเฉเจฎเจพเจ (3-5 เจฒเฉเจ) เจฒเจ เจธเฉฑเจ เจนเฉเฅค , เจเจพเจ เจเฉฑเจ เจเฉเจเฉ เจธเจฎเฉเฉฑเจเฉ เจฒเฉเจก เจฆเฉ เจจเจพเจฒ, เจเจพเจ เจเฉเจฌเจฐเจจเฉเจเจธ เจธเจฅเจพเจชเจค เจเจฐเจจ เจฆเฉเจเจ เจชเฉเจเฉเจฆเจเฉเจเจ เจจเฉเฉฐ เจธเจฎเจเจฃ เจฆเฉ เจเฉฑเจเจพ เจฆเฉ เจเจพเจ, เจเจฟเจธ เจตเจฟเฉฑเจ เจเฉฑเจ เจฒเฉเจก เจธเจผเจพเจฎเจฒ เจนเจจเฅค
เจชเฉเจกเจฎเฉเจจ เจชเฉเจฐเฉ เจ เจจเฉเจเฉเจฒเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจจเจนเฉเจ เจเจฐเจฆเจพ, เจชเจฐ เจเจธเจฆเจพ เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจซเจพเจเจฆเจพ เจนเฉ - เจเฉเจฌเจฐเจจเฉเจเจธ เจจเจพเจฒ เจ เจจเฉเจเฉเจฒเจคเจพ, เจเจฟเจธ เจตเจฟเฉฑเจ เจตเจพเจงเฉ เจเฉเจฒ (เจฌเจฟเจฒเจกเจพเจน เจ เจคเฉ เจนเฉเจฐ) เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจเจธ เจฒเจ, เจฎเฉเจ เจเฉฐเจฎ เจฒเจ เจเฉฑเจ เจธเจพเจงเจจ เจฆเฉ เจเฉเจฃ เจฒเจ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจ เจจเฉเจธเจพเจฐ เจชเจนเฉเฉฐเจ เจเจฐเจพเจเจเจพ: เจเฉเจเฉเจเจ เจเฉเจฎเจพเจ เจฒเจ, เจเจพเจ เจเฉฑเจ เจธเฉเจฎเจค เจฌเจเจ เจฆเฉ เจจเจพเจฒ - เจกเฉเจเจฐ (เจธเฉฐเจญเจพเจตเฉ เจเฉเฉฐเจก เจฎเฉเจก เจฆเฉ เจจเจพเจฒ), เจเฉฑเจ เจจเจฟเฉฑเจเฉ เจฒเฉเจเจฒเจนเฉเจธเจ 'เจคเฉ เจเจชเจฃเฉ เจฒเจ เจตเจฟเจเจพเจธ เจเจฐเจจ เจฒเจ - เจชเฉเจกเจฎเฉเจจ เจเจพเจฎเจฐเฉเจกเจธ, เจ เจคเฉ เจนเจฐ เจเจฟเจธเฉ เจฒเจ - เจเฉเจฌเจฐเจจเฉเจเจธเฅค
เจฎเฉเจจเฉเฉฐ เจฏเจเฉเจจ เจจเจนเฉเจ เจนเฉ เจเจฟ เจกเฉเจเจฐ เจจเจพเจฒ เจธเจฅเจฟเจคเฉ เจญเจตเจฟเฉฑเจ เจตเจฟเฉฑเจ เจจเจนเฉเจ เจฌเจฆเจฒเฉเจเฉ, เจเจเจผเจฐเจเจพเจฐ, เจเจน เจชเจพเจเจจเฉเจ เจฐ เจนเจจ, เจ เจคเฉ เจนเฉเจฒเฉ-เจนเฉเจฒเฉ เจเจฆเจฎ เจฆเจฐ เจเจฆเจฎ เจฎเจฟเจเจฐเฉ เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเจจ, เจชเจฐ เจชเฉเจกเจฎเฉเจจ, เจเจชเจฃเฉเจเจ เจธเจพเจฐเฉเจเจ เจเจฎเฉเจเจ เจฒเจ (เจธเจฟเจฐเจซเจผ เจฒเฉเจจเจเจธ 'เจคเฉ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ, เจเฉเจ เจเจฒเฉฑเจธเจเจฐเจฟเฉฐเจ เจจเจนเฉเจ, เจ เจธเฉเจเจฌเจฒเฉ เจ เจคเฉ เจนเฉเจฐ เจเจพเจฐเจตเจพเจเจเจ เจคเฉเจเฉ-เจงเจฟเจฐ เจฆเฉ เจนเฉฑเจฒ เจนเจจ) เจญเจตเจฟเฉฑเจ เจธเจชเจธเจผเจ เจนเฉ, เจเจธ เจฒเจ เจฎเฉเจ เจเจฟเฉฑเจชเจฃเฉเจเจ เจตเจฟเฉฑเจ เจเจนเจจเจพเจ เจเฉเจเจพเจ เจฌเจพเจฐเฉ เจเจฐเจเจพ เจเจฐเจจ เจฒเจ เจธเจพเจฐเจฟเจเจ เจจเฉเฉฐ เจธเฉฑเจฆเจพ เจฆเจฟเฉฐเจฆเจพ เจนเจพเจเฅค
PS 3 เจ
เจเจธเจค เจจเฉเฉฐ เจ
เจธเฉเจ เจฒเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจ "
เจฐเจฟเจฒเฉเจเจผ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจชเฉเจฐเจต-เจเจฐเจกเจฐ เจฆเฉ เจเฉเจฎเจค: 5000 เจฐเฉเจฌเจฒเฅค เจคเฉเจธเฉเจ เจกเฉเจเจฐ เจตเฉเจกเฉเจ เจเฉเจฐเจธ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ
เจธเจฐเฉเจค: www.habr.com