๐ Docker๋?
๊ฐ๋ฐํ๊ฒฝ์ ์ธ์ ์ด๋์๋ ๋์ผํ๊ฒ ๊ตฌ์ถํ ์ ์๊ฒ ํด์ฃผ๋, ๊ฐ์ํ๊ฒฝ ํ๋ก๊ทธ๋จ
# ๊ฐ๋ฐํ๊ฒฝ์ image๋ ํ์ผ๋ก ๋ง๋ค์ด, Docker Hub ํํ์ด์ง์ ์ฌ๋ ค ์ฌ๋๋ค๊ณผ ๊ณต์ ํ๋ค.
โญ๏ธ ํน์ง
๋ฆฌ๋ ์ค์ namespace ๊ธฐ์ ์ ์ด์ฉํด, ๊ธฐ์กด์ OS์ ์ปค๋์ ์ฌ์ฉํ๋ฉด์, ์ฑ์ ํ์ํ ํ์ผ๋ง ๋ถ๋ฆฌํ๋ค.
Docker ๊ตฌ์กฐ
์ปดํจํฐ {
์ด์์ฒด์ (OS) {
๋์ปค {
์ปจํ
์ด๋ 1 { ... }
์ปจํ
์ด๋ 2 { ... }
์ปจํ
์ด๋ 3 { ... }
...
}
}
}
# ์ปดํจํฐ -> os -> ๋์ปค -> ์ปจํ
์ด๋
# ๋์ปค๋ก ๋ง๋ค์ด์ง ๊ฐ๋ฐํ๊ฒฝ์ ์ปจํ
์ด๋๋ผ๊ณ ๋ถ๋ฆฌ๊ณ , ๊ด๋ฆฌ๋์ด์ง๋ค.
๊ธฐ์กด ๊ฐ์๋จธ์ ๊ตฌ์กฐ
์ปดํจํฐ {
์ด์์ฒด์ (OS) {
๊ฐ์ ์ด์์ฒด์ (OS) 1 { ... }
๊ฐ์ ์ด์์ฒด์ (OS) 2 { ... }
๊ฐ์ ์ด์์ฒด์ (OS) 3 { ... }
...
}
}
# docker์๋ ๋ค๋ฅด๊ฒ, ์ด์์ฒด์ ๋ฅผ ๋ฐ๋ก ์ค์นํ๋ฏ๋ก, ์ฉ๋์ด ํฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋๊ฐ ๋๋ฆฌ๋ค.
# ์ปดํจํฐ -> os -> os -> ์ฑ
Docker ์ VM ์ฐจ์ด์
์ํฉ | ๊ธฐ์กด VM ์ด์ฉํ ์ฑ | Docker ์ด์ฉํ ์ฑ |
1๊ฐ์ง ๊ธฐ๋ฅ ๊ณ ์ฅ๋ฌ์๋ | ์ ์ฒด ์๋น์ค ์ด์ฉ๋ถ๊ฐ | ๋๋จธ์ง ์๋น์ค ์ด์ฉ๊ฐ๋ฅ |
์๋ก์ด ์ฑ ๋ง๋ค๋ | OS ์ค์น ( ์ฉ๋ ํผ ) | ์ปจํ ์ด๋ ์ค์น ( bins/libs , app - ์ฉ๋ ์์ ) |
๊ธฐ๋ฅ์ด ๊ฐ์ ์๋น ์ฑ ๋ง๋ค๋ | ์ฒ์๋ถํฐ ์๋ก ๊ตฌ์ฑ | ๋์ปค ์ด๋ฏธ์ง ํ์ผ ์ด์ฉํด ๊ฐ๋จํ ๊ตฌ์ฑ |
๐ Docker ์ฌ์ฉ๋ฒ
Docker ์ค์นํ๊ธฐ
์๋์ฐ, ๋ฆฌ๋ ์ค, MacOS ๋ง๋ค ์ค์น๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค.
๐ Docker Image๋? / ๋ช ๋ น์ด
Docker ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค๊ณ๋
Image ๊ฒ์
# centos image๋ฅผ ๊ฒ์ํ๋ค.
docker search centos
Image ๋ค์ด๋ก๋
# centos:latest(์ต์ ์
๋ฐ์ดํธ ๋ฒ์ ) image๋ฅผ ๋ค์ด๋ฐ๋๋ค
docker pull centos:latest
๋ค์ด๋ฐ์ Image ํ์ผ ๋ชฉ๋ก๋ณด๊ธฐ
docker images
image ์ญ์
docker rmi <์ด๋ฏธ์ง>
๐ ์ปจํ ์ด๋ ( Container )
๋์ปค๊ฐ ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ, ์ฑ
์ปจํ ์ด๋๋ ์๋ก ๋ ๋ฆฝ๋ ๊ณต๊ฐ์ ์ ์ฅ๋๊ณ ,
๊ณ ์ ํ IP๋ฅผ ๊ฐ์ง๋ค.
๊ฐ๋ฐํ๊ฒฝ(์ปจํ ์ด๋)์ ์์ฑํ๋ฉด์, ์ ์ํ๊ธฐ
docker run <์ต์
> <์ด๋ฏธ์ง> <๋ช
๋ น์ด>
# [ ์ต์
]
# -i : ์ฌ์ฉ์๊ฐ ์
์ถ๋ ฅ์ ํ ์ ์๋ ์ํ๋ก ํ๋ค
# -t : ์ปจํ
์ด๋ ์์์ ํฐ๋ฏธ๋ ํ๊ฒฝ์ ์ฌ์ฉํ๊ฒ ๋ค
# -d : ์ปจํ
์ด๋๋ฅผ ๋ฐ๋ชฌํ๋ก์ธ์ค ํํ๋ก ์คํ ( ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ )
# --name "์ด๋ฆ" : ์ปจํ
์ด๋์๊ฒ ๋ณ๋ช
์ ๋ถ์ฌ์, ์ฌ์ฉ์๊ฐ ํ์ฉํ๊ธฐ ํธํ๋๋ก ๋ง๋ ๋ค.
# -e "ํ๊ฒฝ๋ณ์": ์ปจํ
์ด๋์ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ๋ค.
# -p : host์ ์ปจํ
์ด๋๋ฅผ ํฌํธ๋ก ์ฐ๊ฒฐ. 80(ํธ์คํธ):80(์ปจํ
์ด๋)
# -v : host์ ํน์ ๊ฒฝ๋ก๋ฅผ ์ปจํ
์ด๋์ ํน์ ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐ(๋ง์ดํธ)ํด์ค๋ค.
# -w : Dockerfile์ workdir๋ฅผ ์ค์ ํ๋ค.
# [ ์ค๋ช
]
# ๋ช
๋ น์ด ์คํ์ด ์ข
๋ฃ๋๋ฉด, ์ปจํ
์ด๋๋ ๊ฐ์ด ์ข
๋ฃ (-d ์ต์
์ผ๋ก ์ข
๋ฃ์๋๊ฒ ํ ์ ์์)
# ์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ์ง์ ํด๋์ผ๋ฉด, ํ๊ทธ๋ก ์ปจํ
์ด๋ ์์ฑ์ด ๊ฐ๋ฅ
์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธํ๊ธฐ
docker ps -a
# -a : ์ค์ง๋์ด ์๋ ์ปจํ
์ด๋๋ ์ถ๋ ฅ
# -s : ์ปจํ
์ด๋์ ๋์คํฌ ์ฌ์ฉ๋๋ ์ถ๋ ฅ
# -f "์กฐ๊ฑด" : ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ถ๋ ฅ
์ปจํ ์ด๋ ์ค์งํ๊ธฐ
# ์ปจํ
์ด๋ : CONTAINER ID or ์ปจํ
์ด๋ ํ๊ทธ
docker stop <์ปจํ
์ด๋>
# -a : ๋ชจ๋ ์ปจํ
์ด๋ ์ข
๋ฃ
์ค์ง๋ ์ปจํ ์ด๋ ์์ํ๊ธฐ
docker start <์ปจํ
์ด๋>
์คํ์ค์ธ ์ปจํ ์ด๋ ์๋๋ก ๋ช ๋ น์ด ์คํ
docker exec <์ต์
> <์ปจํ
์ด๋> <๋ช
๋ น์ด>
# ์ต์
# -i : ์ฌ์ฉ์ ์
์ถ๋ ฅ ๋ฐ์
# -t : ํฐ๋ฏธ๋ ์ฌ์ฉ
์ปจํ ์ด๋ ์ญ์ ํ๊ธฐ
docker rm <์ปจํ
์ด๋>
๐ Dockerfile๋ก, Image ๋ง๋ค๊ธฐ
Dockerfile ์์ฑ
# package.json ํ์ผ๊ณผ ๋์ผํ ํด๋์ ๋ง๋ , Dockerfile ์์ฑ
# FROM : ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์
# node:12-alpine ์ด๋ฏธ์ง์์ ์์ ( ์์ผ๋ฉด ์๋๋ค์ด )
FROM node:12-alpine
# RUN : ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์ํํ ์ ๋ช
๋ น์ด
RUN apk add --no-cache python2 g++ make
# WORKDIR : ๋์ปค ์ด๋ฏธ์ง ์์ฑํ, ๋ช
๋ น์ด๊ฐ ์คํ๋ ๊ฒฝ๋ก ์ค์
WORKDIR /app
# COPY : host/. ๋๋ ํ ๋ฆฌ ๋ด์ฉ์, Container/. ๋๋ ํ ๋ฆฌ์ ์ถ๊ฐ
COPY . .
# yarn ์ด์ฉํด ํจํค์ง ์ค์น
RUN yarn install --production
# CMD : ์ด๋ฏธ์ง๋ก ๋ง๋ ์ปจํ
์ด๋์์ ์คํํ ๋ช
๋ น์ด ์ง์
CMD ["node", "src/index.js"]
# EXPOSE : ์ปจํ
์ด๋ ์ ์ ํฌํธ ์ค์
EXPOSE 3000
Image๋ง๋ค๊ธฐ ( Dockerfile ๋น๋ )
docker build -t getting-started .
# -t : ์ด๋ฏธ์ง์ ํ๊ทธ ์ถ๊ฐ ( getting-started )
# . : ํ์ฌ ๊ฒฝ๋ก์์ Dockerfile ์ฐพ๊ธฐ
๐ Image ๊ณต์ ํ๊ธฐ
Docker Hub ๊ฐ์
Docker Hub Repository ๋ง๋ค๊ธฐ
github์ ๋์ผํ๋ค.
1. ์ด๋ฆ ์ค์
2. Public ์ ํ
๋ช ๋ น์ฐฝ์์ Docker Hub ๋ก๊ทธ์ธํ๊ธฐ
docker login -u <์ฌ์ฉ์์ด๋ฆ>
์ ๋ก๋ ํ๊ธฐ์ํด, Image ํ๊ทธ ๋ณ๊ฒฝํ๊ธฐ
docker tag getting-started <์ฌ์ฉ์์ด๋ฆ>/<Repository>
Respository์ Image ์ ๋ก๋ํ๊ธฐ
# tagname์ ์ง์ ํ์ง ์์๋ ๋จ
docker push <์ฌ์ฉ์์ด๋ฆ>/<Repository>:tagname
๐ ๋ก๊ทธ๋ณด๊ธฐ
docker logs -f <์ปจํ
์ด๋ID>
๋ฐ์ํ