ํค์๋
- Docker
- Docker Hub
- Docker Image
- Docker Container
- Docker Compose
Client ์ Server
๋ ๋ค ์ปดํจํฐ
Client : ๊ณ ๊ฐ, ์ฆ ๋ญ๊ฐ๋ฅผ ์์ฒญ
ํ๋ ์ญํ
Server : ์๋ฒ, ์ฆ ๋ญ๊ฐ๋ฅผ ์ ๊ณต
ํ๋ ์ญํ -> ๋ณดํต IDC(Internet Data Center)์ ์๋ฒ์ฉ ์ปดํจํฐ๋ค์ด ๋๊ฐ๊ธฐ์ ํจ๊ป ๊ตฌ์ถ๋์ด์์ต๋๋ค.
ip ์ port
IP
- Internet Protocol๋ก
์ธํฐ๋ท ์์์ ์ฌ์ฉํ๋ ์ฃผ์ ์ฒด๊ณ
๋ฅผ ์๋ฏธ - ํ์ฌ๋ ๋ค ๋ฉ์ด์ ์ซ์๋ก ์ด๋ฃจ์ด์ง IPv4๊ฐ ์ฃผ๋ฅผ ์ด๋ฃจ๊ณ ์๊ณ ์ ์ฐจ IPv6๋ก ์ ํํ๋ ์ค(ip ์ฃผ์๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์)
- localhost, 127.0.0.1 : ํ์ฌ ์ฌ์ฉ ์ค์ธ ๋ก์ปฌPC๋ฅผ ์ง์นญ(๋ณธ์ธ PC)
PORT
- IP ๋ด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ํธ ๊ตฌ๋ถ(ํ๋ก์ธ์ค ๊ตฌ๋ถ)์ ์ํด ์ฌ์ฉํ๋ ๋ฒํธ
- ํฌํธ ์ซ์๋ IP ์ฃผ์๊ฐ ๊ฐ๋ฆฌํค๋ PC์ ์ ์ํ ์ ์๋ ํต๋ก(์ฑ๋)์ ์๋ฏธํฉ๋๋ค.
- ์ด๋ฏธ ์ฌ์ฉ์ค์ธ ํฌํธ๋ ์ค๋ณตํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ex) 127.0.0.1 ๋ค์ :3000 ๊ณผ ๊ฐ์ ํ์์ผ๋ก ํํ
์ง์ฃผ์์์ IP๊ฐ ์ํํธ ์ด๋ฆ๊น์ง ๋ํ๋ธ๋ค๋ฉด, ํฌํธ๋ ๊ทธ ๋ค์ ๋ฌด์จ ๋, ๋ช ํธ ์ธ์ง ๋ฅผ ๋ํ๋ด์ฃผ๋ ๊ฐ๋ ์ ๋๋ค.
Linux Container
๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ ๊ธฐ์ ์ค ํ๋
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ชจ์์ ๋ณ๋์ ์๋ฒ์ฒ๋ผ ๊ตฌ์ฑ
- ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๋คํธ์ํฌ ์ค์ , ํ๊ฒฝ ๋ณ์ ๋ฑ์ ์์คํ ์์์ ๊ฐ ์ปจํ ์ด๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์
- ํ๋ก์ธ์ค์ ๊ตฌํํ
- ํน์ ์ปจํ ์ด๋์์ ์๋ํ๋ ํ๋ก์ธ์ค๋ ๊ทธ ์ปจํ ์ด๋ ์์์๋ง ์์ธ์ค ๊ฐ๋ฅ
- ํน์ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋๋ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ์ปจํ ์ด๋์ ํ๋ก์ธ์ค์ ์ํฅ์ ์ค ์ ์์
- ๋คํธ์ํฌ์ ๊ตฌํํ
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ ์ด๋ ํ๋ ๋น IP ์ฃผ์๊ฐ ํ ๋น
- ํ์ผ์์คํ ์ ๊ตฌํํ
- ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ํ์ผ ์์คํ ์ ๊ตฌํํ
- ๋ฐ๋ผ์, ํด๋น ์ปจํ ์ด๋์์์ ๋ช ๋ น์ด๋ ํ์ผ ๋ฑ์ ์์ธ์ค๋ฅผ ์ ํ ๊ฐ๋ฅ
@ ๊ฐ์๋จธ์ ๊ณผ๋ ๋น์ทํ์ง๋ง ์กฐ๊ธ ๋ค๋ฅธ ๊ธฐ์ !
Docker ํน์ง
VM(Virtual Machine ; ๊ฐ์๋จธ์ )์ ๊ฒฉ๋ฆฌ์ฑ์ ์ค์ฌ์ผ๋ก ํ ๋ฐ๋ฉด, Docker์ ์ฅ์ ์ Container์ ๊ด์ ์์ ๋น ๋ฅด๊ณ , ๊ฐ๋ฐ์์ ์ฌ์ฉ์ ์ปค๋ฎค๋ํฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ด์ ์ ์ ๊ณต
์ฐธ๊ณ :Docker HUB -> ์ฌ๋ฌ image๋ฅผ ์ฐพ์๋ณผ ์ ์์ต๋๋ค.
Docker CLI(Command Line Interface)
์ฐธ๊ณ :Docker Docs -> CLI ๊ณต์๋ฌธ์๋ ๋ ์ค์!!
- ๋์ปค๋ฅผ ์ด์ฉํจ์ ์์ด ๋ช ๋ น์ด, ์ต์ ๋ฑ์ ํ์ธ ๊ฐ๋ฅ
- CLI๋ฟ ์๋๋ผ ์ฌ์ฉ๋ฒ๊ณผ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ ๋ฑ, Docker Docs์์ ํ์ธ ๊ฐ๋ฅ
- ์ฌ์ฉ๋ฒ : Docker CLI, Docker-Compose CLI, API Reference
- ํ๊ฒฝ ๋ฐ ๋น๋ ํ์ผ ๊ตฌ์ฑ : DockerFile, Docker-Compose File
- ๋ฐ๋์ ๊ณต์๋ฌธ์๋ ๋ผ๊ณ ์ด๋๋ก ํ ๊ฒ! ์ ํ์ ๋ํ ์ค๋ช ์๋ผ ์๊ฐํ๋ฉด ๋ฐ๋์ ๋ด์ผํ๋ ๊ฒ!
Docker Registry/Images/Container
Registry
Registry
- ๋์ปค ์ด๋ฏธ์ง๊ฐ ๊ด๋ฆฌ๋๋ ๊ณต๊ฐ
- ๊ธฐ๋ณธ์ ์ผ๋ก Docker HUB๋ฅผ ๊ธฐ๋ณธ ๋ ์ง์คํธ๋ฆฌ๋ก ์ง์
- ๋ ์ง์คํธ๋ฆฌ๋ Docker HUB, Private Docker HUB, ํ์ฌ ๋ด๋ถ ๋ ์ง์คํธ๋ฆฌ ๋ฑ์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
Repository
- ๋ ์ง์คํธ๋ฆฌ ๋ด์ ๋์ปค ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
- ์ด๋ฏธ์ง ์ด๋ฆ์ด ์ฌ์ฉ๋๊ธฐ๋
- GitHub์ ๋ ํฌ์งํ ๋ฆฌ์ ์ ์ฌ
Tag
- ๊ฐ์ ์ด๋ฏธ์ง๋ผ๋ ๋ฒ์ ๋ณ๋ก ๋ด๋ถ ๋ด์ฉ์ด ์กฐ๊ธ์ฉ ์์ด
- ์ฃผ๋ก ํด๋น ์ด๋ฏธ์ง์ ๋ฒ์ ์ ํํ ex) 1.0 , 2.0 ๋ฑ
- ๋ฐ๋ก ์ง์ ํ์ง ์๊ณ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์ต๊ทผ(latest) ํ๊ทธ๋ฅผ ๋ถ์ธ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ ์ง์คํธ๋ฆฌ๋ Registry_Account
/ Repository_Name
: Tag
ํํ๋ก ๋์ด์์ต๋๋ค.
์ถ๊ฐ) ๋ ์ง์คํธ๋ฆฌ-์ด๋ฏธ์ง-์ปจํ ์ด๋ ์ ๋๋์ด ์ฝ๊ฐ python์์ ํด๋์ค-ํจ์-์ธ์คํด์ค(๊ฐ์ฒด) ๋๋
Docker ๋ช ๋ น์ด ์์
docker image pull '๋ ์ง์คํธ๋ฆฌ์ด๋ฆ/๋ ํฌ์งํ ๋ฆฌ์ด๋ฆ:ํ๊ทธ๋ช
' # ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
docker image ls # ๊ฐ์ ธ์จ ์ด๋ฏธ์ง ๋ฆฌ์คํธ ์ถ๋ ฅ
docker container run --name '์ปจํ
์ด๋์ด๋ฆ' '๋ ์ง์คํธ๋ฆฌ์ด๋ฆ/๋ ํฌ์งํ ๋ฆฌ์ด๋ฆ:ํ๊ทธ๋ช
' COMMAND ARG..
# ์ด๋ฏธ์ง๋ฅผ ์คํํ๊ธฐ ์ํด ์ปจํ
์ด๋๋ฅผ ์คํ์ํค๋ ๊ฒ
docker container ps -a # ์ปจํ
์ด๋ ๋ฆฌ์คํธ ๋ณด์ฌ์ค(์คํ๋๋, ์ข
๋ฃ๋ ์ปจํ
์ด๋ ๋ชจ๋ ์ถ๋ ฅ)
docker container rm '์ปจํ
์ด๋์ด๋ฆ' # ์ปจํ
์ด๋๋ฅผ ์ง์๋๋ค.
docker image rm '๋ ์ง์คํธ๋ฆฌ์ด๋ฆ/๋ ํฌ์งํ ๋ฆฌ์ด๋ฆ:ํ๊ทธ๋ช
' # ์ด๋ฏธ์ง ์ญ์
์์ ๊ณผ์ ์ ํ๋ฒ์ ์คํํ๋ ์์
docker container run --name '์ปจํ
์ด๋์ด๋ฆ' --rm '๋ ์ง์คํธ๋ฆฌ์ด๋ฆ/๋ ํฌ์งํ ๋ฆฌ์ด๋ฆ:ํ๊ทธ๋ช
' COMMAND ARG..
์ปจํ
์ด๋๋ฅผ ์คํ(pull image๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์ ์์์ ์ด๋ฏธ์ง๋ฅผ pull ํด์จ ๋ค ์คํํฉ๋๋ค.
--rm : ์ปจํ
์ด๋๋ฅผ ์ผํ์ฑ
์ผ๋ก ์คํ, ์ปจํ
์ด๋๊ฐ ์ข
๋ฃ๋ ๋ (stop ๋ช
๋ น์ด๋ฅผ ์ค ๋) ์์์ ์ญ์ (remove)๊น์ง ๋ฉ๋๋ค.
Docker ์ปจํ ์ด๋์ ํ์ผ์ ๋ณต์ฌํ๊ธฐ(๋ก์ปฌ -> ์ปจํ ์ด๋)
๋ก์ปฌ์์ ์ปจํ
์ด๋๋ก ํ์ผ์ ๋ณต์ฌ(COPY)ํ๋ ์ด์
์์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋๊ตฌ, ํ๊ฒฝ์ด ๋์ปค ์ด๋ฏธ์ง ํ์ฅ์ ๊ตฌ์ฑ๋์ด์์ง๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด,
- ์น ์๋ฒ๋ ๋์ปค ์ปจํ ์ด๋๋ก ์คํ
- ์น ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ํ์ผ์ ๋ง๋ค๊ฑฐ๋, ๊ฐ์ ธ์จ ํ์ผ
์์ ๊ฐ์ ๊ฒฝ์ฐ์ ์ฅ์ ์
- ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒ์ ํธ์คํธ์ ๋ณ๊ฐ๋ก ํ์ ๊ฐ๋ฅ
- ๋ฌธ์ ๊ฐ ์๊ธด ์ปจํ ์ด๋์ ์๋ฒ๋ฅผ ์ข ๋ฃํ๊ณ ๋์ปค ์ด๋ฏธ์ง๋ก ์๋ฒ๋ฅผ ์ฌ๊ตฌ๋ํ ์ ์์ต๋๋ค.
๋ก์ปฌ์ ์๋ ํ์ผ๊ณผ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ CP(copy)์ Docker Volume ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
- CP(copy) : ํธ์คํธ(๋ก์ปฌ)์์ ์ปจํ ์ด๋ ํน์ ์ปจํ ์ด๋์์ ํธ์คํธ๋ก ํ์ผ์ ๋ณต์ฌ
- Volume : ํธ์คํธ์ ์ปจํ ์ด๋ ์ฌ์ด์ ์๋ก ๊ณต์ ํ๋ ๊ณต๊ฐ์ ๋ง์ดํธ
๋ช๊ฐ์ง ์์ฃผ ์ฐ์ด๋ ์ฝ๋ ์์
docker container run --name jayden --rm -p 818:80 httpd
์๋ฅผ ์ดํด๋ณด๋ฉด '์ปจํ
์ด๋๋ฅผ ์คํ, jayden ์ด๋ ์ด๋ฆ์ผ๋ก/ ๋ก์ปฌ์ 818 ํฌํธ, httpd์ 80 ํฌํธ๋ก ์๋ก ์ฐ๊ฒฐ(-p)'
httpd๋ ๋์ปค ํ๋ธ์์ ์ ๊ณตํ๋ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ค ์ค ํ๋๋ก 127.0.0.1:818์ผ๋ก ์น์๋ฒ๋ฅผ ์๋์์ผ์ฃผ๋ ์ด๋ฏธ์ง์
๋๋ค.
์์ ๊ฐ์ด ์น ์๋ฒ๋ฅผ ์๋์์ผ ์คํ
docker container cp ./ jayden:/usr/local/apache2/htdocs/
'์ปจํ
์ด๋์์ ์นดํผ๋ฅผ ์ํ, ./(๋ก์ปฌ ํ์ฌ ์์น)์์
jayden:/usr/local/apache2/htdocs/(์ปจํ
์ด๋ ๋ด ์์น)๋ก ํ์ผ ๋ณต์ฌ
์ฆ, ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ๋ค์ ์ปจํ
์ด๋์ ์ ์์น์ ๋ณต์ฌํด์ฃผ๋ ๋ช
๋ น์
๋๋ค.
(์ฃผ์: ๋ฐ๋์ ์นดํผํ ํ์ผ ์์น
๋ค์ ์นดํผํ ํ์ผ์ ๋ฐ์ ์์น
์์๋๋ก ์
๋ ฅํ ๊ฒ!)/usr/local/apache2/htdocs/
๋ httpd์์ ์ด ์์น์ ์น ํ์ผ์ ๋ฃ์ผ๋ฉด ๊ทธ ํ์ผ์ ์์ ์น ์ฃผ์์์ ๊ตฌ๋๋๊ฒ๋ ํด์ฃผ๋ ๊ฒ์
๋๋ค.
Docker ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
์ด๋ฏธ์ง๋ก ๋ง๋ค์ด๋์ผ๋ฉด ์ด์ ์ ์์ ํ๋ ๋ด์ฉ์ ๋ค์ ์ํํ์ง ์์๋ ๋๋ ์ ๊ณผ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋ฐฐํฌ๊ฐ ์ฉ์ดํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ข๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ 2๊ฐ์ง
- ๊ตฌ๋ํ Docker container ๋ฅผ ์ด๋ฏธ์ง๋ก ๋ง๋ค๊ธฐ
docker container commit '์ปจํ
์ด๋์ด๋ฆ' '๋ง๋ค ์ด๋ฏธ์ง ์ด๋ฆ'
- Docker Image ๋น๋๋ฅผ ํ ๋ ์ฌ์ฉํ๋ Dockerfile์ ๋ง๋๋ ๋ฐฉ๋ฒ
Docker Image๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ์ค๋ช ์ ๊ฒฉ์ธ Dockerfile์ ๋ง๋ค๊ณ ๊ทธ Dockerfile์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ฐฉ์์ ๋๋ค.
Dockerfile ๋ด์ฉ ์์
FROM httpd:2.4 # ๋ฒ ์ด์ค ์ด๋ฏธ์ง
WORKDIR /usr/local/apache2 # ์ปจํ
์ด๋์์ ์์
ํ ๊ณต๊ฐ
COPY ./ /usr/local/apache2/htdocs/ # ํ์ฌ ์์น์ ํ์ผ์ ๋ค์ ์ปจํ
์ด๋ ์์น์ ๋ณต์ฌ
์์ ๊ฐ์ ๋์ปคํ์ผ์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ช ๋ น์ด
docker build --tag '๋ง๋ค ์ด๋ฏธ์ง ์ด๋ฆ'
๋์ปค ํ์ผ์ด ์์นํ ๋๋ ํ ๋ฆฌ์์ ์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์์์ ๊ทธ ์์น์ ๋์ปคํ์ผ์ ๋ฐํ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]59.๋ฐฐํฌ(Heroku)์ ๋์๋ณด๋(Metabase) (0) | 2022.02.09 |
---|---|
[TIL]58.Flask (0) | 2022.02.08 |
[TIL]56. Section3_Sprint2_Chall (0) | 2022.02.03 |
[TIL]55. NoSQL (0) | 2022.01.28 |
[TIL]54. API (0) | 2022.01.27 |