рдбреЙрдХрд░ рдФрд░ рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ

рдЯреАрдПрд▓;рдбреАрдЖрд░: рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ред рдбреЙрдХрд░ рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдбреЙрдХрд░ рдФрд░ рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ

рдпрд╣ рд╕рдм рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рдЗрд╕рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЗрддрд┐рд╣рд╛рд╕

рдХрд╣рд╛рдиреА

рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдкрд╣рд▓реА рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рдзрд┐ рдХреНрд░реЛрдЯ рд╣реИред рд╕рдорд╛рди рдирд╛рдо рдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрджрд▓ рдЧрдИ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕рдХреА рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЪреЗрд░реЛрдЯ рд╕реЗ "рдмрдЪ" рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди (рд░реИрдо, рдкреНрд░реЛрд╕реЗрд╕рд░), рд╕рд╛рде рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдПрдХреНрд╕реЗрд╕ рднреА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд░реНрдиреЗрд▓ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреВрд░реНрдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рдПрдХ рд╣реА рд╣реИ - рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдиреНрдЪ рдХрд░рдирд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╣реА рдХрд░реНрдиреЗрд▓ рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореБрдЦреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЪрд▓рддрд╛ рд╣реИред рдЗрдирдореЗрдВ Linux рдХреЗ рд▓рд┐рдП FreeBSD рдЬреЗрд▓, рд╕реЛрд▓рд╛рд░рд┐рд╕ рдЬрд╝реЛрди, OpenVZ рдФрд░ LXC рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЕрд▓рдЧрд╛рд╡ рди рдХреЗрд╡рд▓ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп, рд░реИрдо рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдмреИрдВрдбрд╡рд┐рдбреНрде рдкрд░ рд╕реАрдорд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЪреЗрд░реЛрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдХрдВрдЯреЗрдирд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реБрдкрд░рдпреВрдЬрд░ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХрдВрдЯреЗрдирд░ рдХреА рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрджреНрдпрддрд┐рдд рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдХрд░реНрдиреЗрд▓ (рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, рдХреБрдЫ рд╣рдж рддрдХ FreeBSD рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ), рдХрд░реНрдиреЗрд▓ рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рдХреЛ "рддреЛрдбрд╝рдиреЗ" рдФрд░ рдореБрдЦреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИред

рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдПрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо, рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд╕рд╛рде), рдЖрдк рддреБрд░рдВрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ (рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐) рдФрд░ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЗрдВ)ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕рдмрд╕реЗ рдкреНрд░рдореБрдЦ рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдбреЙрдХрд░ рд╣реИред рдкрд┐рдЫрд▓реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдЕрд▓рдЧрд╛рд╡ рддрдВрддреНрд░, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмреАрдЪ рд╡рд░реНрдЪреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдФрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рднреАрддрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рднреМрддрд┐рдХ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХрд▓ рд╕реБрд╕рдВрдЧрдд рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ - рдореИрдиреНрдпреБрдЕрд▓ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред

рдбрд╛рдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛ рдордЬрд╝рджреВрд░

рдбреЙрдХрд░ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░реАрдХрд░рдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИред рдЧреЛ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛, рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреА рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ - рд╕реАрдЧреНрд░реБрдкреНрд╕, рдиреЗрдорд╕реНрдкреЗрд╕, рдХреНрд╖рдорддрд╛рдУрдВ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрдлрд╝реНрд╕ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдЙрд╕рдХреЗ рдЬреИрд╕реЗ рдЕрдиреНрдп рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдбреЙрдХрд░ рдФрд░ рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ
рд╕реНрд░реЛрдд: рд╡рд┐рдХрд┐рдореАрдбрд┐рдпрд╛

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

рд╕рдВрд╕реНрдХрд░рдг 1.11 рд╕реЗ рдкрд╣рд▓реЗ, рдбреЙрдХрд░ рдПрдХ рдПрдХрд▓ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рдерд╛: рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐рдпрд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛, рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ред рд╕рдВрд╕реНрдХрд░рдг 1.11 рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рдбреЙрдХрд░ рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рдереЗ: рдХрдВрдЯреЗрдирд░, рдХрдВрдЯреЗрдирд░ рдХреЗ рдкреВрд░реЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рд▓реЙрдиреНрдЪ рдХрд░рдирд╛, рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛) рдФрд░ рд░рдирд╕реА, рдХрдВрдЯреЗрдирд░ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг, рд╕реАрдЧреНрд░реБрдк рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдбреЙрдХрд░ рд╕реЗрд╡рд╛ рд╕реНрд╡рдпрдВ рдмрдиреА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдХрдВрдЯреЗрдирд░рдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред

рдбреЙрдХрд░ рдФрд░ рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ

рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕

рдбреЙрдХрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рддрд░реАрдХрд╛ рдбреЙрдХрд░-рдорд╢реАрди рд╣реИ, рдЬреЛ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ (рд╡рд┐рднрд┐рдиреНрди рдХреНрд▓рд╛рдЙрдб рд╕рд╣рд┐рдд) рдкрд░ рдбреЙрдХрд░ рдХреЛ рд╕реАрдзреЗ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрдорд╛рдВрдб рднреА рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, 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

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдк рдПрдХ рдбреЙрдХрд░ рд╕рдореВрд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдбреЛ рдХреЗ рдмрд┐рдирд╛ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВрдЧреЗ, рд▓реЙрдЧрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░ рд╕рдХреЗрдВрдЧреЗ, рдмрд╛рд╣рд░ рд╕реЗ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХреЗрдВрдЧреЗ, рдФрд░ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬрд┐рд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ) рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╣реИ - рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд░рд▓рддрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред

рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдЙрдкрд░реНрдпреБрдХреНрдд рдбреЙрдХрд░ рдорд╢реАрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рднреА рд╣реИ, рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рд╕рд╛рде рд╣реА рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝, рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдЪреАрдЬреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ, рднрдВрдбрд╛рд░рдг рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо)ред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдЖрдИрд╕реАрдбреА рдХреЗ рд▓рд┐рдП рдХрдиреНрд╡реЗрдпрд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рддрдерд╛рдХрдерд┐рдд рд╕реНрд╡рд╛рд░реНрдо рдореЛрдб (рд╕рдВрд╕реНрдХрд░рдг 1.12 рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдбреЙрдХрд░ рд╕реНрд╡рд╛рд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛), рдЬреЛ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдПрдХ рдПрдХрд▓ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рд╣реИ, рд╕рд╛рде рд╣реА рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рднреА рд╣реИред

рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рд╕реЗ YAML рдлрд╝рд╛рдЗрд▓реЗрдВ, рдорд╛рдореВрд▓реА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде, рдРрд╕реЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдФрд░ рдордзреНрдпрдо рдЖрдХрд╛рд░ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИрдВред рдмрдбрд╝реЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЭреБрдВрдб рдореЛрдб рдХреА рд░рдЦрд░рдЦрд╛рд╡ рд▓рд╛рдЧрдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдирд╕реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХрдВрдЯреЗрдирд░ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░

рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХреЗ рд▓рд┐рдП GitLab рдФрд░ Docker рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВрдЧреЗред рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рддреАрди рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЬрд┐рди рдкрд░ рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдПрдлрдПрд╕ рдЧреНрд▓рд╕реНрдЯрд░рдПрдлрдПрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░реВрдВрдЧрд╛; рдореИрдВ рдЗрд╕реЗ рдбреЙрдХрд░ рд╡реЙрд▓реНрдпреВрдо рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдШрдЯрдХ: рдбреЙрдХрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реНрдХреНрд▓, рд░реЗрдбрд┐рд╕, рдЧрд┐рдЯрд▓реИрдм рд╕реНрд╡рд╛рд░реНрдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЧрд┐рдЯрд▓реИрдм рд░рдирд░ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рдеред рд╣рдо Postgresql рдХреЛ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ рднреВрд╕реНрддрд░реА, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ Postgresql рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GlasterFS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╢реЗрд╖ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдЧреНрд▓рд╕реНрдЯрд░рдПрдлрдПрд╕ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЧреНрд▓рд╕реНрдЯрд░рдПрдлрдПрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЗрдиреНрд╣реЗрдВ рдиреЛрдб 1, рдиреЛрдб 2, рдиреЛрдб 3 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЖрдкрдХреЛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ, рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

# 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

рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЧреНрд▓рд╕реНрдЯрд░рдПрдлрдПрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдПрдХ рдиреЛрдб рд╕реЗ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреЛрдб 1:

# 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

рдЭреБрдВрдб рдореЛрдб рдХреЛ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд▓реАрдбрд░ рд╣реЛрдЧрд╛, рдмрд╛рдХреА рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЖрд░рдВрднрд┐рдХ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗрдЯрдЕрдк, рдореИрдВ рдиреЛрдб1 рдкрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВ:

# 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

рд╣рдо рджреВрд╕рд░реЗ рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдиреЛрдб 2 рдФрд░ рдиреЛрдб 3 рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

# docker swarm join --token SWMTKN-x-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxx xx.xx.xx.xx:2377
This node joined a swarm as a manager.

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╕рд░реНрд╡рд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЖрдЗрдП рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ; рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрджреЗрд╢ рдиреЛрдб 1 рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдПрдВ:

# 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

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрджрд┐ рдбреЗрдЯрд╛, рдХреЗрд╡реА рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЯреНрд░реИрдлрд┐рдХ рдФрд░ рд╕реНрдЯреЛрд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред Postgresql рдХреЗ рд╕рдорд╛рди, рдпреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдВрдЯреЗрдирд░ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рд╕рднреА рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

# mkdir -p /srv/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

рдХреБрдЫ рд╕рдордп рдХреЗ рдмрд╛рдж, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЖрджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдЪрд╛рд▓реВ рд╣реИ:

# 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

рдХреБрдЫ рд╕рдордп рдмрд╛рдж (рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ рдбреЙрдХрд░ рд╕реЗрд╡рд╛ рдПрд▓рдПрд╕рдХрд┐ рд╕рднреА рд╕реЗрд╡рд╛рдПрдБ рдЪрд╛рд▓реВ рд╣реИрдВ) рд╣рдо 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

рд╣рдо рд░реЗрдбрд┐рд╕ рдХреНрд▓рд╕реНрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рдПрдХ рд╕реНрдЯреЛрд░реЗрдЬ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ:

# 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 рдкрд░ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, Postgresql рдФрд░ Redis рдХреЗ рд▓рд┐рдП tls рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЬреЛрдбрд╝реЗрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ PoC рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЕрдм рдбреЙрдХрд░ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдирдЬрд░ рдбрд╛рд▓реЗрдВред

рдкреЛрдбрдореИрди

рдкреЙрдбреНрд╕ (рдкреЙрдбреНрд╕, рдПрдХ рд╕рд╛рде рддреИрдирд╛рдд рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рдореВрд╣) рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХреГрдд рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдХрд╛рдлреА рдкреНрд░рд╕рд┐рджреНрдз рдЗрдВрдЬрдиред рдбреЙрдХрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕реЗ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рд╕рднреА рдХрд╛рдо рд▓рд┐рдмрдкреЛрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреЛ рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рд╣реИ, рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╕реАрдЖрдИ-рд╕рдВрдЧрдд рд░рдирдЯрд╛рдЗрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд░рдирд╕реАред

рдбреЙрдХрд░ рдФрд░ рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ, рд╕рдм рдХреБрдЫ

рдкреЙрдбрдореИрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рдбреЙрдХрд░ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ, рдЗрд╕ рд╣рдж рддрдХ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рд╕рд╣рд┐рдд рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдХрд╣рд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ):

$ alias docker=podman

рдФрд░ рдЖрдк рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ. рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреЙрдбрдореИрди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдиреЗ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рддреЛ 2015 рдХреЗ рдЖрд╕рдкрд╛рд╕, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рдорд╛рдирдХреАрдХрд░рдг (рдУрд╕реАрдЖрдИ - рдУрдкрди рдХрдВрдЯреЗрдирд░ рдЗрдирд┐рд╢рд┐рдПрдЯрд┐рд╡) рдФрд░ рдбреЙрдХрд░ рдХреЗ рдХрдВрдЯреЗрдирд░рдб рдФрд░ рд░рдирд╕реА рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдмрд╛рдж, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ: рд╕реАрдЖрд░рдЖрдИ-рдУред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреЙрдбрдореИрди рдбреЙрдХрд░ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ рд╕рд╣рд┐рдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдбреЙрдХрд░-рд╢реИрд▓реА рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдХреЛрдИ рдЭреБрдВрдб рдореЛрдб рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд▓реЗрдВред

рд╕реНрдерд╛рдкрдирд╛

Centos 7 рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХреНрд╕реНрдЯреНрд░рд╛рдЬрд╝ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:

# yum -y install podman

рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдкреЙрдбрдореИрди рд╕рд┐рд╕реНрдЯрдордбреА рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдЗрдпрд╛рдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рд░реНрд╡рд░ рд░реАрдмреВрдЯ рдХреЗ рдмрд╛рдж рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╕рд┐рд╕реНрдЯрдордбреА рдХреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреАрдЖрдИрдбреА тАЛтАЛ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

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рд╕реНрдЯрдордбреА рдХреЗ рд▓рд┐рдП рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдЗрдХрд╛рдИ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реА рд╕реЗрд╡рд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдкреБрд░рд╛рдиреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛), рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдиреА рд╣реЛрдВрдЧреАред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкреЙрдбрдореИрди рдпрд╣ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреНрдпрд╛ рд╣реИрдВ, рдбреЙрдХрд░-рдХрдВрдкреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдУрд░ рдмрдврд╝реЗрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

RKT

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреБрд░рд╛рд▓реЗрдЦ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд▓рдЧрднрдЧ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ RedHat рдиреЗ рдЗрд╕реЗ рдЦрд░реАрджрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЗрд╕рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рднрд╛рд╡ рдЫреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдбреЙрдХрд░ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреЙрдбрдореИрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдВрдпреЛрдЬрди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЖрд░рдХреЗрдЯреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдХреЛрд░рдУрдПрд╕ рд╡рд┐рддрд░рдг рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рдбреЙрдХрд░ рдерд╛), рд▓реЗрдХрд┐рди рд░реЗрдбрд╣реИрдЯ рдЦрд░реАрдж рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред

рдЫрдк-рдЫрдк

рдЕрдзрд┐рдХ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдЬрд┐рд╕рдХреЗ рд▓реЗрдЦрдХ рд╕рд┐рд░реНрдл рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд▓реЗрдЦрдХ рдиреЗ рдорд╛рдирдХреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдмрд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЙрд╕рдиреЗ рдХрд┐рдпрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдПрдХ рдУрд░, рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдЖрдк рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ (рдЭреБрдВрдб рдореЛрдб рдореЗрдВ) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рдж рд╡рд╛рддрд╛рд╡рд░рдг рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рдЯреАрдореЛрдВ (3-5 рд▓реЛрдЧреЛрдВ) рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИред , рдпрд╛ рдПрдХ рдЫреЛрдЯреЗ рд╕рдордЧреНрд░ рднрд╛рд░ рдХреЗ рд╕рд╛рде, рдпрд╛ рдЙрдЪреНрдЪ рднрд╛рд░ рд╕рд╣рд┐рдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреА рдХрдореАред

рдкреЙрдбрдореИрди рдкреВрд░реНрдг рдЕрдиреБрдХреВрд▓рддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╣реИ - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рддрд╛, рдЬрд┐рд╕рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдХрд░рдг (рдмрд┐рд▓реНрдбрд╛рд╣ рдФрд░ рдЕрдиреНрдп) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдкрд╕рдВрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЛрдЪреВрдВрдЧрд╛: рдЫреЛрдЯреА рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╛ рд╕реАрдорд┐рдд рдмрдЬрдЯ рдХреЗ рд╕рд╛рде - рдбреЙрдХрд░ (рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЭреБрдВрдб рдореЛрдб рдХреЗ рд╕рд╛рде), рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП - рдкреЙрдбрдореИрди рдХрд╛рдорд░реЗрдб, рдФрд░ рдмрд╛рдХреА рд╕рднреА рдХреЗ рд▓рд┐рдП - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реЗрдЧреА, рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рдЕрдЧреНрд░рдгреА рд╣реИрдВ, рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЪрд░рдг рджрд░ рдЪрд░рдг рдорд╛рдирдХреАрдХреГрдд рднреА рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреЙрдбрдореИрди, рдЕрдкрдиреА рд╕рднреА рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж (рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдирд╣реАрдВ, рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ) рднрд╡рд┐рд╖реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рднреА рдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрди рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдкреБрдирд╢реНрдЪ 3 рдЕрдЧрд╕реНрдд рдХреЛ рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ''рдбреЙрдХрд░ рд╡реАрдбрд┐рдпреЛ рдХреЛрд░реНрд╕", рдЬрд╣рд╛рдВ рдЖрдк рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдХреЗ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ: рдмреБрдирд┐рдпрд╛рджреА рдЕрдореВрд░реНрдд рд╕реЗ рд▓реЗрдХрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкреИрд░рд╛рдореАрдЯрд░ рддрдХ, рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВред рдЖрдк рддрдХрдиреАрдХ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рд╕рдордЭ рдЬрд╛рдПрдВрдЧреЗ рдХрд┐ рдбреЙрдХрд░ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рд╣рдо рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдорд╛рдорд▓реЗ рднреА рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗред

рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реА-рдСрд░реНрдбрд░ рдХреАрдордд: RUB 5000ред рдЖрдк рдбреЙрдХрд░ рд╡реАрдбрд┐рдпреЛ рдХреЛрд░реНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдкрд╛рдареНрдпрдХреНрд░рдо рдкреГрд╖реНрда рдкрд░.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ