
๐ฏ CI/CD์ ์๋ํ ํ์ดํ๋ผ์ธ์ ๋ฐฐ์ฐ๊ณ ํ์ดํ๋ผ์ธ ์๋ํ ๋๊ตฌ์ธ Docker์ ๋ํด ์ ๋ฆฌํฉ๋๋ค.
์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋จ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์์ ๋๋์ง ์์ต๋๋ค. ์ฝ๋๋ฅผ ์ผ๋ง๋ ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ ์ ์๋์ง๊ฐ ๊ฒฝ์๋ ฅ์ด ๋ฉ๋๋ค.
์ถ์ฒ: ๋งํฌ๋์ธ
์ ํต์ ์ธ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ ๋ณดํต ๊ฐ๋ฐ โ QA โ ์ด์์ ํ๋ฆ์ผ๋ก ์งํ๋ฉ๋๋ค.
๊ฐ๋ฐ : ๋ถ์ , ๊ณํ, ๊ตฌํ, ์ ๋ ํ ์คํธ, ๋ฐ๋ชจ
QA : ํตํฉ ํ ์คํธ, ์ฌ์ฉ์ ์์ฉ ํ ์คํธ, ๋น๊ธฐ๋ฅ์ ๋ถ์
์ด์ : ๊ณต๊ฐ, ๋ชจ๋ํฐ๋ง
๐ค FTP (File Transfer Protocol)๋?
์๊ฒฉ ์๋ฒ์ ํ์ผ์ ์ ๋ก๋ํ๊ฑฐ๋, ์๊ฒฉ ์๋ฒ์์ ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์๋ ํ๋กํ ์ฝ์ ๋๋ค.
FTP๊ฐ ์ง๊ธ ์ฐ์ด์ง ์๋ ์ด์ ๋ ์๋์ ๊ฐ์ต๋๋ค.
- ์ ์ก ๋ด์ฉ ๋ ธ์ถ : ์ํธํ ์์ด ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ตฌ์กฐ๋ก ๋ณด์ ์ํ์ฑ์ด ์์ต๋๋ค.
- ์์์ ์ค์ฌ์ ๋นํจ์จ : ์ฌ๋์ด ์ง์ ํ์ผ์ ์ ํํด์ ์ ๋ก๋ ํด์ผ ํฉ๋๋ค.
- ๋ฒ์ ๊ด๋ฆฌ์ ํ์ ์ ๋ถ์ ํฉ : ๋จ์ํ ํ์ผ ์ ์ก๋ง ๊ฐ๋ฅํ๊ณ , ๋ณ๊ฒฝ ์ด๋ ฅ ๊ด๋ฆฌ๋ ํ ๊ฐ ํ์ ๊ธฐ๋ฅ์ด ์ ํ ์์ต๋๋ค.
๋๋ฆฐ ๋ฐฐํฌ ์ฃผ๊ธฐ : ๊ฐ๋ฐ ์๊ตฌ์ฌํญ์ด ์ ์๋ ๋๋ก๋ถํฐ ์ ํ ์ ๋ฌ์ด ์๋ฃ๋๊ธฐ๊น์ง ๊ธด ์๊ฐ์ด ์์๋ฉ๋๋ค.
๋๋ฆฐ ํผ๋๋ฐฑ ๋ฃจํ : ๊ฐ๋ฐํ์ ํจ์จ์ฑ์ ๋จ์ด๋จ๋ฆฝ๋๋ค.
์๋ํ ๋ฏธ๋น : ๋ฆด๋ฆฌ์ค ํ์๊ฐ ์ ์ผ๋ฏ๋ก ์๋ํ ํ์ ๊ฐ์ โ ๋ฆด๋ฆฌ์ค ๊ธฐ๊ฐ ์์ธก ์ด๋ ค์์ง๋๋ค.
ํซํฝ์ค ์ํ์ฑ : ๊ธด๊ธํ ์ฝ๋ ๋ณ๊ฒฝ์ ๋ํ์ฌ ์ถฉ๋ถํ ํ ์คํธ๊ฐ ์ด๋ฃจ์ด์ง ์ ์๋ ์ํ์ด ์์ต๋๋ค.
๋นํจ์จ์ ๊ฐ๋ฐ ๋ฌธํ : ํ ์คํธ๋ ์ค, ์์ฌ์ํต ๋ถ์กฑ, ์ฑ ์์ ๋ถ์ฐ, ๋ฎ์ ์ ๋ฌด ๋ง์กฑ๋ ๋ฑ์ด ์์ต๋๋ค.
CI/CD๋ฅผ ํตํด ๊ฐ๋ฐ๋ถํฐ ๋ฐฐํฌ๊น์ง์ ๊ณผ์ ์ ์๋ํํด์, ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์ํํธ์จ์ด๋ฅผ ๋ฐฐํฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฉ์์ ํตํด ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ๊ฐ์ต๋๋ค.
๋น ๋ฅธ ์ ํ ๋ฐฐํฌ : ๋น ๋ฅด๊ฒ ์ ํ์ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์งง์ ํผ๋๋ฐฑ ์ฃผ๊ธฐ : ์ฌ์ฉ์๋ QA์ ํผ๋๋ฐฑ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ํ๋๊ฐ ๋ฎ์ ๋ฆด๋ฆฌ์ค : ๋ฐ๋ณต์ ์ธ ๋ฐฐํฌ์ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํด ์์ ์ ์ธ ์ด์์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ์ฐํ ๋ฆด๋ฆฌ์ค ์ ์ฑ ๊ฒฐ์ ๊ฐ๋ฅ : ํน์ ๊ธฐ๋ฅ๋ง ๋ฐฐํฌํ๊ฑฐ๋ ์ ์ง์ ์ผ๋ก ์ ์ฉํ๋ ์ ๋ต๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ค CI/CD๋?
CI๋ ์ง์์ ํตํฉ(Continuous Integration)์ผ๋ก ๊ฐ๋ฐ์๋ค์ด ์์ ํ ์ฝ๋๋ฅผ ๊ณต์ฉ ์ ์ฅ์(Git ๋ฑ)์ ์์ฃผ ํตํฉํ๋ ๋ฐฉ์์ ๋๋ค.
CD๋ ์ง์์ ๋ฐฐํฌ ๋๋ ์ง์์ ์ ๋ฌ(Continuous Deployment / Continuous Delivery)์ ์ค์๋ง๋ก ๋ณ๊ฒฝ ์ฌํญ์ด ์น์ธ๋๋ฉด ์ด์ ์๋ฒ์๊น์ง ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ์์ ๋๋ค.
์ถ์ฒ: servicenow
์ฝ๋ ๋ณ๊ฒฝ โ ์ง์์ ํตํฉ โ ์๋ํ ํ ์คํธ โ ๋น๋ โ ๊ตฌ์ฑ ๊ด๋ฆฌ โ ๋ฐฐํฌ
๐ ์๋ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ด๋?
์ฝ๋๋ฅผ ์์ฑํ ๋ค, ๋ฐฐํฌ(์๋ฒ์ ์ฌ๋ฆฌ๋ ๊ฒ)๊น์ง ๋ชจ๋ ๊ณผ์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ฆ์ ๋๋ค.
์ง์์ ํตํฉ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๊ณ ์๋์ง ์๋์ผ๋ก ํ์ธํ๋ ๊ณผ์ ์ ๋๋ค.
์ฝ๋ ์ฒดํฌ์์ : ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ต์ ์ฝ๋๋ฅผ ๋ฐ์์ต๋๋ค.
๋น๋ ๋ฐ ํ ์คํธ : ์ปดํ์ผ, ๋งํฌ๋ฅผ ์ํํ ํ ๋จ์ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋ฆฌํฌํธ ์์ฑ : ์์ค์ฝ๋์ ์ด๋ ๋ถ๋ถ๊น์ง ๊ฒ์ฌํ๊ณ ์๋์ง๋ฅผ ํ์ธํฉ๋๋ค.
์ ์ ๋ถ์ ์ํ : ์ฝ๋ฉ ๊ท์น ์๋ฐ, ์ฝ๋ ์คํ์ผ ๋ฑ์ ์๋ ์ ๊ฒํฉ๋๋ค.
๊ฐ๋ฐ์์๊ฒ ํผ๋๋ฐฑ ์ ๊ณต : ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ๋ก ์๋ฆผ์ ๋ฐ์ต๋๋ค.
์ธ์ ํ ์คํธ(UAT; User Acceptance Test)๋ ๊ณ ๊ฐ์ด ์ํ๋ ๊ธฐ๋ฅ์ด ๋ง๋์ง ํ์ธํ๋ ๋จ๊ณ์ ๋๋ค.
์ ํต์ ์ผ๋ก QA ํ์ด ๋งก๋ ์ญํ ์ ์๋ํํฉ๋๋ค.
ํตํฉ ํ ์คํธ, ๋น๊ธฐ๋ฅ์ ํ ์คํธ(์ฑ๋ฅ/๋ณด์ ๋ฑ)๋ ํฌํจ๋ฉ๋๋ค.
CD ํ์ดํ๋ผ์ธ์ ํตํฉ๋์ด, ๊ฐ๋ฐ์๊ฐ ๊ตฌํ์ ๋ง์น์๋ง์ ๋ฐ๋ก ๊ฒ์ฆ์ด ๊ฐ๋ฅํด์ง๋๋ค.
๋ฆด๋ฆฌ์ค ๊ฒฐ์ ์ ์๋์ผ๋ก ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค.
๊ตฌ์ฑ ๊ด๋ฆฌ (Configuration Management)๋ ๋จ์ํ ์ฝ๋๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ๋์ด, ์ด์ ํ๊ฒฝ์ ์๋์ผ๋ก ์ค๋นํ๊ณ ๊ตฌ์ฑํ๋ ๊ณผ์ ๊น์ง ํฌํจํฉ๋๋ค.
ํ์ํ ํจํค์ง ์ค์น, ํ๊ฒฝ ๋ณ์ ์ค์ ๋ฑ ์์คํ ์ ๊ตฌ์ฑํฉ๋๋ค.
์ฌ๋ฌ ์๋น์ค ์ธ์คํด์ค์ ๋ฐฐํฌ ๋ฒ์ ์ ๊ด๋ฆฌํฉ๋๋ค.
๊ตฌ์ฑ ํ์ผ์ Git ๋ฑ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ํฉ๋๋ค.
์ด๋ฌํ ์ ํต ๋ฐฉ์์์ ์ด์ํ์ด ๋งก๋ ๋ฐฉ์์ ์๋ํํด์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ด์ ํ๊ฒฝ์ ์ฐจ์ด๋ก ์ธํ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ง์์ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ๊ธฐ์ ์ ์ธ ์กฐ๊ฑด์ด ํ์ํฉ๋๋ค.
์๋ํ : ๋น๋, ํ ์คํธ, ํจํค์ง, ๋ฐฐํฌ๊น์ง ์ ๋ถ ์๋์ผ๋ก ์งํ๋ผ์ผ ํฉ๋๋ค.
์๋ : ์ปค๋ฐ ๋ฐ์ํ ๋๋ง๋ค ํ์ดํ๋ผ์ธ์ด ์คํ๋์ด์ผ ํ๋ฏ๋ก ์คํ ์๋๊ฐ ๋นจ๋ผ์ผ ํฉ๋๋ค.
์ฅ์ ๋ณต๊ตฌ : ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ฆ์ ๋กค๋ฐฑํ ์ ์์ด์ผ ์ฆ์ ๋ฐฐํฌ๋ ์์ ํ๊ฒ ์ํ๋ฉ๋๋ค.
๋ฌด์ค๋จ ๋ฐฐํฌ : ์ฌ์ฉ์ ์ ์ฅ์์ ๋ฐฐํฌ ์ค์๋ ์๋น์ค๊ฐ ์ค๋จ๋์ง ์์์ผ ํฉ๋๋ค.
ํธ๋ ํฌ ๊ธฐ๋ฐ ๊ฐ๋ฐ : ๋ฉ์ธ ๋ธ๋์น ์ค์ฌ์ผ๋ก ๊ฐ๋ฐํ์ฌ ํตํฉ ์ฃผ๊ธฐ๋ฅผ ์งง๊ฒ ์ ์งํด์ผ ํฉ๋๋ค.
๐ค ํธ๋ ํฌ(trunk)๋ ๋ฌด์จ ๋ป์ผ๊น?
๋๋ฌด์ ์ค์ ์ค๊ธฐ๋ฅผ ๋ปํ ๋ง๋ก ์ค์(main) ๋ธ๋์น, ์ฆ ๋ชจ๋ ์ฝ๋๊ฐ ๋ชจ์ด๋ โ๊ธฐ๋ณธ ์ค๊ธฐโ๋ฅผ ๋ปํฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํธ๋ ํฌ ๊ธฐ๋ฐ ๊ฐ๋ฐ์ด๋ ๊ฐ๋ฐ์๋ค์ด ์งง์ ์๊ฐ ์์ ์์ฃผ ํธ๋ ํฌ์ ๋ณํฉํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค.
์ปจํ ์ด๋ ๊ฐ์ํ ๋ฐ ํด๋ฌ์คํฐ ์ด์ฉ
CI ์๋ฒ
๊ตฌ์ฑ ๊ด๋ฆฌ ์๋ํ
์ํํธ์จ์ด ๋ฒ์ ๊ด๋ฆฌ (SCM; Software Code Management)
๊ทธ ์ธ
์ปจํ ์ด๋๋ ์์ฉ ํ๋ก๊ทธ๋จ๋ฟ๋ง ์๋๋ผ ๊ทธ ํ๋ก๊ทธ๋จ์ด ์ ๋๋ก ์คํ๋๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ๊ฒ์ ํ๋์ ๋จ์๋ก ๋ฌถ์ด์ ์คํ.ํ ์ ์๋ ๊ธฐ์ ์ ๋๋ค.
๊ฐ๋ฐ๋ถํฐ ๋ฐฐํฌ๊น์ง ์ผ๊ด์ฑ ์ ์ง : ์ด๋์ ์คํํ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
๊ฐ์ ๋จธ์ ์ ๋์ฒด ํน์ ๋ณด์ : ๋ฌด๊ฑฐ์ด ํ์ดํผ๋ฐ์ด์ ๊ธฐ๋ฐ ๊ฐ์๋จธ์ (VM) ๋ฐฉ์ ๋์ , ์ปจํ ์ด๋๋ ๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ์คํํ ์ ์๋ ๋์์ด ๋ฉ๋๋ค.
๋์ ์ด์์ฑ : ์ด์์ฒด์ ๋ ํ๋์จ์ด์ ๋ ์์กด์ ์ด๊ฒ ๋์ด ์์คํ ์ ์ด์์ด ์ฉ์ดํด์ง ๋๋ถ์ ํด๋ผ์ฐ๋, ๋ก์ปฌ, ํ ์คํธ ์๋ฒ ์ด๋์๋ ์คํ ๊ฐ๋ฅํฉ๋๋ค.
๐ค ๊ฐ์ ๋จธ์ ๊ณผ ์ปจํ ์ด๋๋ ๊ตฌ์กฐ์ ์ผ๋ก ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
์ถ์ฒ: netadmin
1๋ฒ: ์ ํต์ ์ธ ๊ฐ์ ๋จธ์ ๊ตฌ์กฐ (VM ๊ธฐ๋ฐ)
์ธํ๋ผ โ Host OS โ Hypervisor โ Guest OS โ ์ฑ ์คํ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๊ฐ ์๊ธฐ๋ง์ ์ด์์ฒด์ (Guest OS) ์์์ ๋์๊ฐ๋ ๋ฐฉ์์ ๋๋ค. ๊ฐ ์ฑ๋ง๋ค OS๋ฅผ ๋ฐ๋ก ์ฌ๋ ค์ผ ํ๋ฏ๋ก ๋ฌด๊ฒ๊ณ , ๋๋ฆฝ๋๋ค.
ํ์ดํผ๋ฐ์ด์ (hypervisor)๋ ๊ฐ์ ๋จธ์ (VM)์ ๋ง๋ค์ด์ฃผ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ํ ์ปดํจํฐ ์์์ ๊ฐ์ง ์ปดํจํฐ(๊ฐ์ ๋จธ์ )๋ฅผ ์ฌ๋ฌ ๊ฐ ๋๋ฆด ์ ์๊ฒ ํด์ค๋๋ค.
๊ฐ์ ๋จธ์ (VM)์
2๋ฒ: ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ตฌ์กฐ (Docker ๊ธฐ๋ฐ)
์ธํ๋ผ โ OS โ Docker Engine โ ์ฑ ์คํ๋ชจ๋ ์ฑ์ด ํ๋์ OS๋ฅผ ๊ณต์ ํ๋ฉด์ ์คํ๋๋ฉฐ Docker Engine์ด ๊ฐ๊ฐ์ ์ฑ์ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ฒ๋ผ ๋ถ๋ฆฌํด์ค๋๋ค.
3๋ฒ: ์ปจํ ์ด๋ + ๊ฐ์ ๋จธ์ ํผํฉ ๊ตฌ์กฐ (ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋จ)
์ธํ๋ผ โ Host OS โ Hypervisor โ Guest OS โ Docker Engine โ ์ฑ ์คํVM ์์์ Docker ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ตฌ์กฐ๋ก ํด๋ผ์ฐ๋์์๋ ์ด ๊ตฌ์กฐ๊ฐ ์ผ๋ฐ์ ์ ๋๋ค. (ex. AWS EC2 ์์์ Docker ๋๋ฆฌ๋ ๋ฐฉ์)
๐ก ํด๋ผ์ฐ๋ ์ ๊ณต์(AWS, GCP ๋ฑ)์ ๋ฌผ๋ฆฌ ์๋ฒ๋ฅผ ์ฌ๋ฌ ๊ณ ๊ฐ์ด ๋์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ ๊ณ ๊ฐ์๊ฒ ๋ถ๋ฆฌ๋ ํ๊ฒฝ(=๊ฐ์ ๋จธ์ )์ ์ ๊ณตํด์ผ ๋ณด์๊ณผ ์์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ์ํ(Virtualization)๋ ์ปดํจํ ์์์ ๋ ์ ์ฐํ๊ณ ํจ์จ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํด ํ๋์จ์ด๋ฅผ ์ํํธ์จ์ด๋ก ์ถ์ํํ๋ ๊ธฐ์ ์ ๋งํฉ๋๋ค.
์ฆ, ํ ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ปดํจํฐ ์์์ ์ฌ๋ฌ ๊ฐ์ โ๊ฐ์ง ์ปดํจํฐโ๋ฅผ ๋ง๋ค์ด ๊ฐ๊ฐ ๋ค๋ฅธ ์์ ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ ๋๋ค.
[์์คํ ์ธก๋ฉด]
์์ ํ์ฉ๋ฅ ํฅ์ : ์๋ฒ ํ๋๋ก ์ฌ๋ฌ ์์คํ ์ ์ด์ํฉ๋๋ค.
๋ณต์๊ณผ ๋ฐฑ์ ์ด ์ฌ์ : ์ค์ ๋ ์ํ๋ฅผ ์ค๋ ์ท์ฒ๋ผ ์ ์ฅํ๊ณ ์ฝ๊ฒ ๋ณต์ํฉ๋ใ ใท.
[๋น์ง๋์ค ์ธก๋ฉด]
๋น์ฉ ์ ๊ฐ : ๋ฌผ๋ฆฌ ์๋ฒ ์๊ฐ ์ค์ด๋๋ ์ ์ง๋น๋ ์ ์ฝํฉ๋๋ค.
๋ค์ดํ์ ์ต์ํ : ์์คํ ์ด ์ค๋จ๋๋ ์๊ฐ์ ์ค์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ์๋น์ค ์ด์ฉ์ด ์ค๋ ๋ฉ์ถ์ง ์๋๋ก ํฉ๋๋ค.
๋ฐ์ดํฐ์ผํฐ ๊ด๋ฆฌ ๊ฐ์ํ : ๊ณต๊ฐ๊ณผ ์ ๋ ฅ ์๋ชจ๋ ์ค์ผ ์ ์์ต๋๋ค.
์ฌํด ๋ณต๊ตฌ์ ๊ฐํจ : ๋ฐฑ์ VM์ ๋ฐ๋ก ๋์ ๋์ฒด ๊ฐ๋ฅํฉ๋๋ค.
[๊ฐ๋ฐ์ ์ ์ฅ]
ํต์ผ๋ ํ๊ฒฝ ์ ๊ณต : ๊ฐ๋ฐํ ์ํํธ์จ์ด์ ๋ฐฐํฌ, ํ ์คํธ, ๊ตฌ์ฑ ๊ด๋ฆฌ ๋ฑ์ ํต์ผ๋ ํ๊ฒฝ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์๋ํ ํ๋ก์ธ์ค ์ต์ ํ : ์ํํธ์จ์ด ํตํฉ/์ธ๋ ํ๋ก์ธ์ค์ ์๋ํ์ ์ ์ฉํ๊ธฐ๊ฐ ์ข์ต๋๋ค.
ํ์ดํผ๋ฐ์ด์ (Hypervisor)๋ผ๋ ์ํํธ์จ์ด๊ฐ ๋ฌผ๋ฆฌ์ ์ธ ์ปดํจํฐ ์์์ ๋๋ ์ ์ฌ๋ฌ ์ด์์ฒด์ ๋ฅผ ๋์์ ์คํํ ์ ์๊ฒ ํด์ค๋๋ค.
Type 1(๋ค์ดํฐ๋ธ ๋๋ ๋ฒ ์ด๋ฉํํ) : ๋ฌผ๋ฆฌ ์๋ฒ์ ์ง์ ์ค์น๋ฉ๋๋ค.
์ ๊ฐ์ํ : ๊ฐ์ ๋จธ์ ์ด ์ค์ ํ๋์จ์ด๋ฅผ ๊ทธ๋๋ก ํ๋ด๋ด๋ ๋ฐฉ์
๋ฐ๊ฐ์ํ : ์ด์์ฒด์ ๋ฅผ ์ฝ๊ฐ ์์ ํด์ ํ์ดํผ๋ฐ์ด์ ์ ์ง์ ํต์ ํ๋ ๋ฐฉ์
Type 2(ํธ์คํธํ) : ๊ธฐ์กด OS ์์ ์ค์น๋ฉ๋๋ค.
์ถ์ฒ: ์ํคํผ๋์
๊ฐ์ ๋จธ์ ๊ณผ ๋น์ทํ์ง๋ง, ์ด์์ฒด์ ๋ฅผ ๋ฐ๋ก ์ฌ๋ฆฌ์ง ์๊ณ , ํธ์คํธ OS์ ์ปค๋์ ๊ณต์ ํ๋ฉด์๋ ์ฑ ์คํ ํ๊ฒฝ์ ๊ฒฉ๋ฆฌ์ํต๋๋ค.
์ด์์ฒด์ ๋ฅผ ํฌํจํ์ง ์์ ํจ์ฌ ๊ฐ๋ณ๊ณ ๋น ๋ฆ ๋๋ค.
์ฑ๋ง๋ค ์ปจํ ์ด๋๋ก ๊ฐ์ธ์ ์คํ ํ๊ฒฝ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง์ํต๋๋ค.
๐ค ํธ์คํธ์ ๊ฒ์คํธ์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
ํธ์คํธ : ๋ค๋ฅธ ์์คํ ์ ๊ฐ์ํํ์ฌ ์คํํ๋ ์ปดํจํฐ
๊ฒ์คํธ: ํธ์คํธ ์์คํ ์์ ๊ฐ์ํ๋์ด ์ ๊ณต๋๋ ๊ฐ์ ์์คํ
Docker๋ ๋๋ฆฌ ์ด์ฉ๋๊ณ ์๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ฐ์ํ ํ๋ซํผ์ผ๋ก, ์ด์์ฒด์ ์ ์๊ด์์ด ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋ ํ๊ฒฝ์์ ์คํํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ฃผ๋ ์คํ ์์ค ๋๊ตฌ์ ๋๋ค.
Docker์์๋ ๋ณดํต Dockerfile์ด๋ผ๋ ์ค์ ํ์ผ์ ์์ฑํ์ฌ ์ด๋ฏธ์ง(Image)๋ฅผ ๋ง๋ค๊ณ , ์ด ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋(Container)๋ฅผ ์คํํฉ๋๋ค.
์ถ์ฒ: dataminded
Docker Desktop : ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI)๋ฅผ ์ ๊ณตํ๋ฉฐ, Docker Engine์ด ํฌํจ๋์ด ์๋ ํตํฉ ๋๊ตฌ์ ๋๋ค. ์๋์ฐ๋ macOS์ ๊ฐ์ ์ด์์ฒด์ ์์๋ ๋ฆฌ๋ ์ค ํ๊ฒฝ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๋จธ์ (VM) ์์์ ์คํ๋ฉ๋๋ค.
Docker Engine : ๋์ปค์ ํต์ฌ ๊ธฐ์ ๋ก, ์ปจํ ์ด๋์ ์ด๋ฏธ์ง ๋ฑ ๋์ปค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์ฌ์ฉ์๋ Docker CLI(๋ช ๋ น์ค ๋๊ตฌ)๋ฅผ ํตํด ์์ฒญ์ ๋ณด๋ด๊ณ , Docker Daemon์ด ๊ทธ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ด๋ถ์ ์ผ๋ก๋ ๋ฆฌ๋
์ค์ ์ปค๋ ๊ธฐ๋ฅ, ํนํ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ๋ฅผ ์ํ Namespace(์๋ก ๋ณด์ด์ง ์๊ฒ ๊ฒฉ๋ฆฌ)์ ๋ฆฌ์์ค ์ ํ์ ์ํ Control Group(CPUยท๋ฉ๋ชจ๋ฆฌ ์ ํ)์ ํ์ฉํ์ฌ, ํธ์คํธ ์ปค๋์ ์์์ ๊ณต์ ํ๋ฉด์๋ ์๋ก ๊ฒฉ๋ฆฌ๋ ์ปจํ
์ด๋ ํ๊ฒฝ์ ์คํํ ์ ์๋๋ก ํด์ค๋๋ค.
์ถ์ฒ: dev community
docker infodocker run hello-worldhello-world ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํด์ ์ปจํ
์ด๋๋ก ์คํํฉ๋๋ค.
๋์ปค ์ด๋ฏธ์ง (Docker Image)
์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ํ์ผ๋ค๊ณผ ์คํ ๋ฐฉ๋ฒ์ ํ๋๋ก ๋ฌถ์ ์คํ ํจํค์ง์ ๋๋ค.
์ด๋ฏธ์ง๋ ๋ถ๋ณ(immutable)ํ๋ฉฐ, ์ํ๋ฅผ ์ ์ฅํ์ง ์๋ ๊ตฌ์กฐ์ ๋๋ค. โ ๋คํธ์ํฌ๋ก ์ ์กํ๊ฑฐ๋, ๋์ปค ๋ ์ง์คํธ๋ฆฌ(Docker Hub ๋ฑ)์ ์ ์ฅํ ์ ์์ผ๋ฉฐ, ์ด๋ฆ๊ณผ ๋ฒ์ (tag)์ ์ง์ ํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ๊ตฌ์กฐ๋ ๊ณ์ธตํ(layered)๋์ด ์์ด, ํ๋์ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
๐ค ์ด๋ฏธ์ง๋ ๋ฌด์์ผ๊น?
๋์ปค์์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์ด๋ฏธ์ง(Image) ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฏธ์ง๋ ์ฝ๊ฒ ๋งํด, ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ธฐ์ด ํ ํ๋ฆฟ์ ๋งํฉ๋๋ค. ์ด ์ด๋ฏธ์ง ์์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ํ ๋ชจ๋ ํ๊ฒฝ์ด ๋ค์ด ์๋๋ฐ, ๊ตฌ์ฒด์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ค์ด ํฌํจ๋ฉ๋๋ค.
๋์ปค ์ด๋ฏธ์ง๋ ํ๋์ ์ปค๋ค๋ ํ์ผ ๋ฉ์ด๋ฆฌ๊ฐ ์๋๋ผ, ์ฌ๋ฌ ๊ฐ์ ๋ ์ด์ด(layer)๊ฐ ์ธต์ธต์ด ์์ฌ์ ๋ง๋ค์ด์ง ๊ตฌ์กฐ์ ๋๋ค.
๊ฐ ๋ ์ด์ด๋ ์ด์ ๋ ์ด์ด ์์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ์ฌํญ๋ง์ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฌํ ๋ฐฉ์ ๋๋ถ์ ์ค๋ณต์ ์ค์ด๊ณ ํจ์จ์ ์ธ ์ ์ฅ๊ณผ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ถ์ฒ: tistory
- ์ด์์ฒด์
- ๋์ปค ์์ฒด๊ฐ ์๋ ๋ฆฌ๋ ์ค ์ปค๋์ ๊ธฐ์ ์ ์ด์ฉํด์ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์
Ubuntu,Alpine์ฒ๋ผ ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ ์ด์์ฒด์ ๊ฐ ๋ฒ ์ด์ค๋ก ๋ค์ด๊ฐ๋๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๋ ์ด๋ค ์ด์์ฒด์ ์์์๋ ๋์ผํ๊ฒ ์คํ๋ ์ ์๋ ์ผ๊ด๋ ๊ธฐ๋ฐ์ ์ ๊ณตํด, ์๋์ฐ๋ ๋งฅ์ด๋ ์ด๋์๋ ์ปจํ ์ด๋๊ฐ ์์ ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํด์ค๋๋ค.
- ํ์ ์ํํธ์จ์ด
- ์๋ฅผ ๋ค์ด ์น ์๋ฒ(
nginx,Apache)๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL,PostgreSQL) ๊ฐ์ ํ์ ์คํ ํ๋ก๊ทธ๋จ๋ค์ด ํ์ํฉ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจํค์ง
- Python, Node.js ๊ฐ์ ๋ฐํ์ ํ๊ฒฝ์ด๋, ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ํด ํ์ํ ์ข ์์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ ํจ๊ป ํฌํจ๋ฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋
- ์ง์ ๋ง๋ ์น ์๋น์ค๋ API ์๋ฒ ์ฝ๋, HTML/CSS ํ์ผ ๋ฑ์ด ๋ค์ด๊ฐ ์ค์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ์ค์ ํ์ผ ๋ฐ ๋ช ๋ น์ด
- ์คํ ์ ํ์ํ ํ๊ฒฝ ๋ณ์, ์ค์ ํ์ผ(
.env,config.json๋ฑ), ๊ทธ๋ฆฌ๊ณ ์์ ๋ช ๋ น์ด ๋ฑ์ด ํจ๊ป ์ ์๋์ด ์์ต๋๋ค.
๋์ปค ์ปจํ ์ด๋ (Docker Container)
๋์ปค ์ด๋ฏธ์ง๋ก๋ถํฐ ๋ง๋ค์ด์ง ์คํ ๊ฐ๋ฅํ ์ธ์คํด์ค์ ๋๋ค.
ํ๋์ ์ด๋ฏธ์ง๋ก๋ถํฐ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋์ผํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ํ๊ฒฝ์์ ๋์์ ์คํํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋๋ ์ด๋ฏธ์ง์ ๋ฌ๋ฆฌ ์คํ ์ค์ ์ํ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. โ ํ์ผ์ ์์ฑํ๊ฑฐ๋ ์ค์ ์ ๋ณ๊ฒฝํ๋ฉด ๊ทธ ๋ด์ฉ์ด ์ปจํ ์ด๋ ๋ด๋ถ์ ์ ์ฅ๋ฉ๋๋ค.
docker run <์ด๋ฏธ์ง ์ด๋ฆ> : ์ด๋ฆ์ด ์ฃผ์ด์ง ์ด๋ฏธ์ง๋ฅผ ๋ก์ปฌ์์ ๋๋ ๋ ์ง์คํธ๋ฆฌ์์ ๊ฐ์ ธ๋ค๊ฐ ์ปจํ
์ด๋๋ฅผ ๋ง๋ค์ด์ ์คํํฉ๋๋ค.๐ค ์น์ ๋์ฐ๊ณ ์ถ๋ค๋ฉด?
docker run -p [ํธ์คํธํฌํธ]:[์ปจํ ์ด๋ํฌํธ] ์ด๋ฏธ์ง์ด๋ฆ
-p: ํฌํธํฌ์๋ฉ (ํธ์คํธ : ์ปจํ ์ด๋)
์ด๋ฏธ์ง ์ปจํ ์ด๋ ํฌํธ nginx / httpd (Apache) 80 mysql 3306 redis 6379 postgres 5432 mongo 27017
localhost:8080๋ก ์คํํ ๊ฒฐ๊ณผ
docker ps : ํ์ฌ ์คํ ์ค์ธ ์ปจํ
์ด๋๋ค์ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
docker ps -a : ์ค๋จ๋์ด ์๋ ๊ฒ๊น์ง ํฌํจํ์ฌ ์ปจํ
์ด๋ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.docker images : ๋ก์ปฌ ์ปดํจํฐ์์ ๊ฐ์ง๊ณ ์๋ ์ด๋ฏธ์ง๋ค์ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
docker stop <์ปจํ
์ด๋ ์ด๋ฆ/ID> : ํ์ฌ ์คํ ์ค์ธ ์ปจํ
์ด๋์ ์คํ์ ์ค๋จํฉ๋๋ค. ์ปจํ
์ด๋๊ฐ ์์ด์ง์ง๋ ์์ต๋๋ค.
docker rm <์ปจํ
์ด๋ ์ด๋ฆ/ID> : ์ปจํ
์ด๋๋ฅผ ์ญ์ ํฉ๋๋ค.
docker rmi <์ด๋ฏธ์ง ์ด๋ฆ/ID> : ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํฉ๋๋ค.
docker run --name <์ปจํ
์ด๋ ์ด๋ฆ> <์ด๋ฏธ์ง> : ๋์ปค ์ปจํ
์ด๋ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.docker container prune : ์ปจํ
์ด๋ ์ ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค. docker image prune -e : ์ด๋ฏธ์ง ์ ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค. โ ๏ธ ๋ฐ์ํ ์ค๋ฅ
์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ๋ ค ํ๋๋ฐ
container is using its referenced image์ค๋ฅ๊ฐ ๋ฐ์ํ์์ต๋๋ค. ์ด๋ ์ด ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ปจํ ์ด๋๊ฐ ์กด์ฌํ๊ณ ์์ด์ ์ญ์ ๊ฐ ๋์ง ์๋ ์ค๋ฅ์ ๋๋ค.
๐ก ํด๊ฒฐ ๊ณผ์
์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๊ณ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ์์ต๋๋ค.
๊ธฐ์กด httpd ์ด๋ฏธ์ง๋ฅผ ์คํํ ๋ค, ์ปจํ
์ด๋ ๋ด๋ถ์์ ๊ธฐ๋ณธ ์น ํ์ด์ง(It works!)๋ฅผ ์์ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋ก์ด ์ด๋ฏธ์ง๋ก ์ ์ฅํ์ฌ, ์ดํ์๋ ์์ ๋ ํ์ด์ง๊ฐ ๊ธฐ๋ณธ ํ์ด์ง๋ก ํ์๋๋๋ก ํฉ๋๋ค.
docker run -it -p 8080:80 httpd /bin/bash
httpd ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ์คํํ๊ณ , bash ์์ ์ง์
ํฉ๋๋ค.
grep DocumentRoot /usr/local/apache2/conf/httpd.conf
/usr/local/apache2/htdocs)
cd htdocs
ls -l
cat index.html

cat > index.html
<html><body><h1>New page!</h1></body></html>
์ HTML ๋ด์ฉ์ ์ ๋ ฅํ์ฌ ๊ธฐ๋ณธ ํ์ด์ง๋ฅผ ์์ ํฉ๋๋ค.
์
๋ ฅ์ ์๋ฃํ ํ Ctrl + D๋ฅผ ๋๋ฌ ์ ์ฅํฉ๋๋ค.

httpd-foreground
exit

docker ps -a

docker start <์ปจํ
์ด๋ ID/์ด๋ฆ>
docker exec -it <์ปจํ
์ด๋ ID/์ด๋ฆ> /bin/bash
/bin/bash๋ ์
ธ ํ๊ฒฝ์ผ๋ก ์ง์
ํ๊ธฐ ์ํ ๋ช
๋ น์
๋๋ค.

cat ./htdocs/index.html
index.html ํ์ผ์ด ์๋์ง ํ์ธํฉ๋๋ค.
httpd-foreground
localhost:8080 ์ ์์ ํ๋ฉด ๋ฐ๊พผ ํ์ด์ง๋ก ๋์ต๋๋ค.
exit
Ctrl + C๋ก ๋น ์ ธ๋์จ ํ exit์ผ๋ก ์ปจํ
์ด๋์์ ๋น ์ ธ๋์ต๋๋ค.docker commit <์ปจํ
์ด๋ ID ๋๋ ์ด๋ฆ> <์ ์ฅํ _์ด๋ฏธ์ง_์ด๋ฆ>:<ํ๊ทธ>
docker images

docker run -d -p 8080:80 my_httpd:0.1 httpd-foreground
localhost:8080์์ ๋ฐ๋ก ์ ์์ด ๊ฐ๋ฅํด์ง๋๋ค.
1๏ธโฃ Dockerfile ์์ฑ ๋ฐ ํ์ธ
FROM [--platform=<platform>]<image>[AS <name>]
RUN <command>
ENTRYPOINT ["executable", "param1", "param2"]
Dockerfile : ๋์ปค ์ด๋ฏธ์ง ์์ฑ ์ ์ฐจ๋ฅผ ๊ธฐ์ ํ๋ ๊ณ์ธต ๊ตฌ์กฐ ๊ธฐ๋ฐ์ ํ์ผ์ ๋๋ค.
FROM : ์ด๋ค ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ง ์ ํจ
RUN : ์ด๋ฏธ์ง ์์ฑ ์ค์ ๋ช
๋ น์ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํฌํจ
ENTRYPOINT : ์ปจํ
์ด๋๊ฐ ์คํ๋ ๋ ์๋์ผ๋ก ์คํํ ๋ช
๋ น ์ง์

cat ๋ช
๋ น์ด๋ก ๋ด์ฉ์ ํ์ธํฉ๋๋ค.2๏ธโฃ ์ด๋ฏธ์ง ๋น๋
docker build -t my_httpd:0.2 .
docker build : ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ Dockerfile์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค. -t : ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ(tag)๋ฅผ ์ง์ ํด์ฃผ๋ ์ต์
(t๋ tag์ ์ฝ์)์
๋๋ค.
my_httpd:0.2 : ์ด๋ฏธ์ง ์ด๋ฆ์ด my_httpd, ํ๊ทธ๋ 0.2๋ผ๋ ๋ป์
๋๋ค.
. : ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ๋น๋ ์ปจํ
์คํธ(build context)๋ก ์ฌ์ฉํ๋ค๋ ๋ป์
๋๋ค.
โ ์ฆ, Dockerfile์ด ์๋ ์์น

3๏ธโฃ ์ด๋ฏธ์ง ํ์ธ
docker images

4๏ธโฃ ์ปจํ ์ด๋ ์คํ
docker run -d -p 8080:80 my_httpd:0.2
-d : ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
-p 8080:80 : ํธ์คํธ์ 8080 ํฌํธ๋ฅผ ์ปจํ
์ด๋์ 80 ํฌํธ์ ์ฐ๊ฒฐ
my_httpd:0.2 : ์ฌ์ฉํ ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ


๐ ๋์ปค ํ๋ธ์ ๊ณ์ ์ด ์์ด์ผ ์งํํ ์ ์์ต๋๋ค.
1๏ธโฃ ๋์ปค ๋ก๊ทธ์ธ
docker login

2๏ธโฃ ์ด๋ฏธ์ง ํ๊ทธ ์ค์
docker tag <์ด๋ฏธ์ง ์ด๋ฆ> <[๋ด ๋์ปค ์์ด๋]/[๋ด๊ฐ ์ํ๋ ์ด๋ฆ]>

3๏ธโฃ ์ด๋ฏธ์ง ํธ์ (์ ๋ก๋)
docker push <๋ฐฉ๊ธ ๋ง๋ ์ด๋ฏธ์ง>

๋์ปค ํ๋ธ์ repository๊ฐ ์ฌ๋ผ๊ฐ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.

Ubuntu 22.04 ํ๊ฒฝ์ Python3๋ฅผ ์ค์นํ๊ณ , hello.py๋ฅผ ์คํํ๋ ์ปจํ
์ด๋๋ฅผ ๋ง๋๋ ์ค์ต์
๋๋ค.
1๏ธโฃ hello.py ์์ฑ
import os
print("Hello Wolrd from %s!" % os.environ["NAME"])
os.environ["NAME"] : ์์คํ
ํ๊ฒฝ๋ณ์ NAME์ ๋ถ๋ฌ์์ ์ถ๋ ฅํฉ๋๋ค.2๏ธโฃ Dockerfile ์์ฑ
FROM ubuntu:22.04
ENV NAME=Grepp
RUN apt-get update && apt-get install -y python3
COPY hello.py .
ENTRYPOINT ["python3", "hello.py"]
ENV NAME=Grepp : Docker ์ด๋ฏธ์ง ์์์ NAME์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํฉ๋๋ค. hello.py์์ os.environ.get("NAME")์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
RUN : ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ์คํ๋๋ ๋ช
๋ น์ด๋ก python3์ ์ค์นํฉ๋๋ค. (apt ์
๋ฐ์ดํธ ํฌํจ)
COPY hello.py . : ํธ์คํธ์ hello.py ํ์ผ์ ์ปจํ
์ด๋ ๋ด๋ถ ์์
๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํฉ๋๋ค.
ENTRYPOINT : ์ปจํ
์ด๋๊ฐ ์คํ๋ ๋ ์๋์ผ๋ก python3 hello.py๋ฅผ ์คํํ๊ฒ ์ค์ ํฉ๋๋ค.
3๏ธโฃ ์ด๋ฏธ์ง ๋น๋
docker build -t hello:0.2 .
4๏ธโฃ ๋น๋ ์คํ
4-1. ๊ธฐ๋ณธ ์คํ (Dockerfile์ ENV ๊ฐ ์ฌ์ฉ)
docker run hello:0.2
Hello World from Grepp! ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. 4-2. ์คํ ์ ํ๊ฒฝ๋ณ์ ๋ฎ์ด์ฐ๊ธฐ
docker run -e NAME=Programmers hello:0.2
Hello World from Programmers! ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ๐ก
--rm์ต์ ์ ๋ถ์ด๋ฉด ์คํ ์๋ฃ์ ํจ๊ป ์ปจํ ์ด๋๊ฐ ์ญ์ ๋ฉ๋๋ค.
docker run --rm -e NAME=ChatGPT hello:0.2
1๏ธโฃ ์ปจํ ์ด๋ ์คํ
docker run --rm -d -p 8080:80 --name my_nginx nginx:latest

2๏ธโฃ ์ปจํ ์ด๋ ๋ด๋ถ ์ ์
docker exec -it my_nginx /bin/bash
docker exec : ์คํ ์ค์ธ ์ปจํ
์ด๋ ์์์ ๋ช
๋ น์ด๋ฅผ ์ง์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ช
๋ น์ด์
๋๋ค.
-it : ํฐ๋ฏธ๋์์ ์ํธ์์ฉ ๋ชจ๋๋ก ์คํ๋ฉ๋๋ค.
-i : ํ์ค ์
๋ ฅ(stdin)์ ์ด์ด๋ฌ์, ๋ช
๋ น์ด๋ฅผ ์ง์ ์
๋ ฅํ ์ ์๊ฒ ํด์ค๋๋ค. (--interactive)
-t : ๊ฐ์ง ํฐ๋ฏธ๋(TTY)์ ๋ง๋ค์ด์, ์ฌ๋์ด ๋ณด๋ ํฐ๋ฏธ๋์ฒ๋ผ ์ถ๋ ฅ์ด ๋ณด์ด๊ฒ ํด์ค๋๋ค. (--tty)
3๏ธโฃ ์ปจํ ์ด๋์ ํธ์คํธ ๊ฐ ํ์ผ ๋ณต์ฌ
docker cp <ํธ์คํธํ์ผ> <์ปจํ
์ด๋์ด๋ฆ>:<๊ฒฝ๋ก>
docker cp <์ปจํ
์ด๋์ด๋ฆ>:<๊ฒฝ๋ก> <ํธ์คํธ๊ฒฝ๋ก>
cp : docker cp ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ์ ๋ณต์ฌํ ๋ ์ฌ์ฉํฉ๋๋ค. ๐ก ํ์ผ์ด ์๋ ๊ฒฝ๋ก์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
docker cp index.html my_nginx:/usr/share/nginx/html
docker cp my_nginx:/usr/share/nginx/html/50x.html .

4๏ธโฃ ์ด๋ฏธ์ง ๋น๋ ์ ํ์ผ ์ถ๊ฐ
FROM nginx:latest
ADD ./index.html /usr/share/nginx/html/new.html
CMD ["nginx", "-g", "daemon off;"]
Dockerfile์์ ์ด๋ฏธ์ง ๋ง๋ค ๋ ํ์ผ์ ๋ฏธ๋ฆฌ ๋ฃ์ด๋๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค.
ADD ๋๋ COPY : Dockerfile์์ ์ฐ๋ ๋ช
๋ น์ด๋ก ํธ์คํธ์ ํ์ผ์ ์ปจํ
์ด๋ ์์ผ๋ก ํฌํจ์ํต๋๋ค.docker build -t your_nginx .
5๏ธโฃ ๋ฐ์ธ๋ ๋ง์ดํธ
docker run -it -v <ํธ์คํธ๊ฒฝ๋ก>:<์ปจํ
์ด๋๊ฒฝ๋ก> <์ด๋ฏธ์ง> /bin/bash
ํธ์คํธ์ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ์ ์ง์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ๋๋ค.
์ปจํ ์ด๋์์ ํ์ผ์ ์์ ํ๋ฉด โ ํธ์คํธ์๋ ๋ฐ๋ก ๋ฐ์๋ฉ๋๋ค.
-v <ํธ์คํธ๊ฒฝ๋ก>:<์ปจํ
์ด๋๊ฒฝ๋ก> : ํธ์คํธ์ <ํธ์คํธ๊ฒฝ๋ก> ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ
์ด๋์<์ปจํ
์ด๋๊ฒฝ๋ก>์ ์ฐ๊ฒฐํฉ๋๋ค.
docker run -it -v ~/work/vol:/host_directory ubuntu:22.04 /bin/bash
cat > /host_directory/B.txt
This is a test file called B.txt
exit
6๏ธโฃ ๋์ปค ๋ณผ๋ฅจ
docker volume create <๋ณผ๋ฅจ์ด๋ฆ>
docker run -v <๋ณผ๋ฅจ์ด๋ฆ>:<์ปจํ
์ด๋๊ฒฝ๋ก> <์ด๋ฏธ์ง>
๋์ปค ๋ณผ๋ฅจ์ Docker๊ฐ ์์ฒด์ ์ผ๋ก ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ ์ ์ฅ์ ๊ณต๊ฐ์ผ๋ก ํธ์คํธ์ ์ ํํ ๊ฒฝ๋ก๋ ์จ๊ฒจ์ ธ ์๊ณ , Docker๊ฐ ์์์ ์ ์ฅ ์์น๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
docker run --rm -d -p 8888:80 -v my-volume:/usr/share/nginx/html --name my_nginx nginx:latest
sudo ls -l /var/lib/docker/volumes/my-volume/_data
docker exec -it my_nginx /bin/bash
cd /usr/share/nginx/html
cat > new.html
This file is created inside the container.
exit
sudo ls -l /var/lib/docker/volumes/my-volume/_data
๋์ปค ๋ณผ๋ฅจ์ ์์ฑํด์ Nginx ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๊ณ , ์ปจํ ์ด๋ ์์์ ํ์ผ์ ๋ง๋ค๊ณ , ๊ทธ ํ์ผ์ด ํธ์คํธ(๋ก์ปฌ)์ Docker ๋ณผ๋ฅจ ์์น์ ์ค์ ๋ก ์ ์ฅํฉ๋๋ค.
/var/lib/docker/volumes/<๋ณผ๋ฅจ์ด๋ฆ>/_data ์ ์ค์ ๋ก ์ ์ฅ๋ฉ๋๋ค.ํ์ดํ๋ผ์ธ๊ณผ docker์ ๋ํ ๋ง์ ๊ฐ๋ ๋ค์ ์ ๋ฆฌํ๋ฉด์ ๊ฐ์ ๋จธ์ ๊ณผ ๋์ปค์ ๋ํด ๋ง์ด ์๊ฒ ๋์๋ค.