- ๋ค๋ฅธ ์ด์์ฒด์ ์ฌ๋ ๋ํฌ ๋ฒ์ ผ์ ํต์ผ
- ๋ค๋ฅธ ์ปดํจํฐ ์์ ๋๋ค๋ฅธ ์ปดํจํฐ๋ฅผ ํค๋ ค๊ณ ํ๋ ๋ ์ด ๊ฑธ๋ฆฐ๋ค.
- ์ปค๋์ ์ปดํจํฐ ์ด์ ์ฒด์ ์ ํต์ฌ์ด ๋๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ผ๋ก, ์์คํ ์ ๋ชจ๋ ๊ฒ์ ์์ ํ ํต์ ํ๋ค. ์ด์ ์ฒด์ ์ ๋ค๋ฅธ ๋ถ๋ถ ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์ํ์ ํ์ํ ์ฌ๋ฌ ๊ฐ์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค. ํต์ฌ!!
- ๊ฐ๋ฐ/๋ฐฐํฌํ๊ฒฝ ํต์ผ
- ํ๋ก๊ทธ๋จ ๋ฏธ๋ฆฌ ์ค์น
- ๊ฐ๋ฒผ์ด ๊ฐ์์ปดํจํฐ
- ๋ฏธ๋ฆฌ ์ค์น๋ ๋์ปค๋ฅผ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ ๋ฌ ํ ์ ์๋ค.(๊ต์ฅํ ํจ์จ์ ์ด๋ค)
์ฐ๋ฆฌ๊ฐ ์๋ฒ๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด์๋ ํ๊ฒฝ(์๋ฒ๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด ํ์ํ ํ๋ก๊ทธ๋จ)์ด ๊ฐ์ถฐ์ ธ์ผ ํฉ๋๋ค.
ํ์ฌ์์ ์ ์ ์ด ๋ค์ด์์ ์, ๊ฐ์ด ์ข ์ฌํ๊ธฐ ์ํด์ ์ปดํจํฐ์ ํ๋ก๊ทธ๋จ ๋ฒ์ ผ์ด ์ผ์นํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฒ์ ผ๋ค์ ๋ง์ถ๊ธฐ ์ํด์๋ ๋ง์ถฐ์ผ ๋๋๊ฒ ํ๋๊ฐ์ง๊ฐ ์๋๋๋ค.(ex. Node.js, express, Nodemon, ๋ฑ๋ฑ)
๊ทธ๋์ ๋งค๋ฒ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ์ค์ด๊ธฐ ์ํด ๋์ปค์ ํ์ผ๋ค์ ๊ธฐ๋กํ๊ณ ๊ทธ ๊ธฐ๋กํ ๊ฒ์ ์ด๋ฏธ์ง๋ฒ ์ด์ค๋ก ๋ง๋ค์ด ๋ฐฐํฌํ์ฌ ์ ๋ณด๋ค ๋ชจ๋ ์ฌ๋๋ค์ด ํ์ ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ก์ต๋๋ค.์ด๊ฒ ์์ฆ Docker๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋๋ค.
์ปจํ ์ด๋๋ ๊ฐ์ํ ๊ธฐ์ ์ค ํ๋๋ก ๋ํ์ ์ผ๋ก LXC(Linux Container)๊ฐ ์์ต๋๋ค. ๊ธฐ์กด OS๋ฅผ ๊ฐ์ํ ์ํค๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์ปจํ ์ด๋๋ย OS๋ ๋ฒจ์ ๊ฐ์ํ๋ก ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ์์ผ ๋์ํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
ํ ์๋ฒ์ ์ฌ๋ฌ OS๋ฅผ ๊ฐ์ํ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ปจํ ์ด๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ์์ผ ๋์ํ๋ ๋ฐฉ๋ฒ์ ์ด๋ ํ ์ฐจ์ด์ ์ด ์์๊น์?
๊ธฐ์กด์ ์ฐ๋ฆฌ์๊ฒ ์ต์ํ ๊ฐ์ ๋จธ์ ๊ฐ์ ๊ฒฝ์ฐ์ Host ์์ ๊ฐ์ํ๋ฅผ ์ํค๊ธฐ ์ํ Hypervisor ์์ง ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ Guest OS๋ฅผ ์ฌ๋ ค ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฐ์ํ๋ ํ๋์จ์ด ์์ OS๊ฐ ์ฌ๋ผ๊ฐ๋ ํํ๋ก ๊ฑฐ์ ์๋ฒฝํ๊ฒ Host์ ๋ถ๋ฆฌ๋๋ค๊ณ ๋ด๋ ๋ฌด๋ฐฉํฉ๋๋ค. ๋ฐ๋ฉด์ ์ปจํ ์ด๋๋ Docker ์์ง ์์ Guest OS๋ฅผ ์ ์ธํ ๋ฐ์ด๋๋ฆฌ๋ง ์ฌ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค. ์ปจํ ์ด๋๋OS ๊ทธ๋ฆฌ๊ณ Docker ์์ง์์์ ๋ฐ๋ก ๋์ํ๋ฉฐ ์ปค๋์ ๊ณต์ ํฉ๋๋ค.
์ด์ ๊ฐ์ด ๋์ปค์๋ ์ถ๊ฐ์ ์ธ ์ด์์ฒด์ ๊ฐ ํ์ํ์ง ์๊ณ ๋ฐ๋ก ๋์ํ ์ ์์ด ๊ฐ์๋จธ์ ๋ณด๋ค ๋น ๋ฅด๊ณ ,์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
- Docker Image๋ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๋ ์คํํ์ผ, ์ค์ ๊ฐ ๋ค์ ๊ฐ์ง๊ณ ์๋ ๊ฒ
- Image๋ฅผ ์ปจํ ์ด๋์ ๋ด๊ณ ์คํ์ ์ํจ๋ค๋ฉด ํด๋น ํ๋ก์ธ์ค๊ฐ ๋์ํ๊ฒ ๋๋ ๊ฒ
์ด์ Docker๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ ์ฒซ์งธ๋ก ๋จผ์ ํ์ผ์ด ์์ด์ผ๊ฒ ์ฃ ?์ปจํ ์ด๋๋ฅผ ์คํํ๊ธฐ ์ ์ ๋จผ์ ํด์ค์ผ ํ ๊ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ์๊ธฐ ํ์ผ์ ํ์ผ ์ถ๊ฐํ์ฌ Dockerfile
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ง๋ค์ด์ค๋๋ค.
Dockerfile
ํ์ผ์ ๋ค์ด๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด์ค๋๋ค.
// 1-1. ์ด์์ฒด์ ๋ฐ ํ๋ก๊ทธ๋จ ์ค์นํ๊ธฐ.(ํ๋ํ๋ ์
๋ ฅํ๋ ๋ฐฉ์!)
FROM ubuntu:22.04
RUN sudo apt install nodejs
RUN sudo npm install -g yarn
// ์ฐฉํ ์ฌ๋์ด ๋ง๋ค์ด์ค ๋ฐฉ์.
// 1-2. ์ด์์ฒด์ ๋ฐ ํ๋ก๊ทธ๋จ ์ค์น(์ด๋ฏธ ๋ฆฌ๋
์ค, node, npm, yarn๊น์ง ๋ชจ๋ ๊น๋ ค์๋ ์ปดํจํฐ ๋ค์ด๋ก๋ํ๋ ๋ฐฉ์)
FROM node:14
// 2. ๋ด ์ปดํจํฐ์ ์๋ ํด๋๋ ํ์ผ์ ๋์ปค ์ปดํจํฐ ์์ผ๋ก ๋ณต์ฌํ๊ธฐ.
// COPY๋? ๋์ปค ๋ฐ๊นฅ์์๋ ๊ฒ์ ์์ชฝ์ผ๋ก ๋ณต์ฌํด์ฃ ~
// RUN mkdir myfolder => ์๋์์ COPYํ ๋,์๋์ผ๋ก ๋ง๋ค์ด์ฃผ๋ฏ๋ก ๊ตณ์ด ํ์์์!
COPY . /myfolder/
WORKDIR /myfolder/
RUN yarn install
// ๋์ปค ๋น๋ : ๋์ปค ์ ์ฅ ๋ฐ ์ต์ ํ => ๋์ปค ์ด๋ฏธ์ง : ๋์ปค ๋น๋๊ฐ ํ๋์ ์ด๋ฏธ์ง๋ก ์ ์ฅ ํ๊ฒ.
// 3. ๋์ปค ์์์ index.js ์คํ์ํค๊ธฐ.
// 01.
RUN node index.js
// 02. CMD ๋ช
๋ น์ด๋ ๊ทธ ์์ ์คํฌ๋ฆฝํธ๊น์ง ์ ์ฅ๋๋ค. ๊ทธ ์์ ๊ฒ๋ค์ ์คํผ์ํฌ๋
// ์ธ์ ์ฐ๋? ๊ทธ ์์ ๋ง๋ ํ๋ก๊ทธ๋จ๋ค์ ์คํ ์ํฌ๋ (CMD๊ฐ ๋ค์ด๊ฐ ๋ถ๋ถ๋ค์ ์ ์ฅ์ด ์๋๋ค.) =>์คํ ๋ช
๋ น์ด
// CMD ๋ ๋ง์ง๋ง์ ํ๋ฒ๋ง ์ธ์ ์๋ค. (COPY๋ ๋ฌด์ํ ์ธ ์ ์์)
// docker run ์ผ๋ก ์คํํ๋ค. => ๋์ฒด ๋ช
๋ น์ด
CMD yarn start:dev
// 1.bulid ->์ปดํจํฐ ๋ง๋ค์ด์ง(๋์ปค ์ด๋ฏธ์ง)
// 2.์ด๋ฏธ์ง ์คํ
FROM node:14
์ ํ๋ฉด node, npm, yarn์ด ๋ชจ๋ ์ค์น๋ ๋ฆฌ๋
์ค ์ปดํจํฐ๊ฐ ํ๋ ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
COPY ./index.js /index.js
๋ฅผ ํ๋ฉด index.js
ํ์ผ์ ์๋ ๋ชจ๋ ์์ค ์ฝ๋๋ฅผ ๊ฐ์ ์ปดํจํฐ ์์ index.js
ํ์ผ๋ก ๋ณต์ฌํ์ฌ ์ ์ฅํฉ๋๋ค.
Docker build๋?
- ๋์ปค ์ ์ฅ ๋ฐ ๊ทธ ์ ์ฅ ํ๊ฒ์ ์ต์ ํ ํ์ฌ processํ ํ ๊ฒ
์ด์ Docker build ํ๊ธฐ ์ํด ํฐ๋ฏธ๋์ ๋ค์ด๊ฐ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค๋๋ค.
// 1.
docker build //Dockerfile ์ ์๋ ๊ฒ์ ์ ์ฅํด์ค๋ค.
// 2.
docker images //๋น๋ ์๋ฃ ํ ์ด๋ฏธ์ง ์์ฑ๋ ID ํ์ธ
// 3.
docker run imagesID // ์๋ก์ด ์ปดํจํฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ด๋ฏธ์ง ์คํ
// 4.
docker ps // ํ์ฌ ์ผ์ ธ์๋ ์ด๋ฏธ์งID ์ํ
์ด๋ ๊ฒ ๋ง๋ค์ด ๋์ผ๋ฉด ์ธ์ ์ด๋์๋ ๊ฐ์ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
.gitignore
ย ํ์ผ๊ณผ ๋น์ทํ๊ฒ,ย .dockerignore
ย ํ์ผ์ ํ๋์ ๋๊ตฌ๋ก์จ,
์ ๋ง๋ก ํ์ํ Docker ๋น๋ ๋ด์ฉ์ ์ ์ ํ๋๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ํ์ผ์ ์ฌ์ฉํจ์ผ๋ก์จ, ์ด๋ค ํด๋์ ํ์ผ๋ค์ด ๋์ปค๋ฅผ ๋น๋ํ ๋์ ๋ฌด์๋๊ณ , ์์ธ์ฒ๋ฆฌ๊ฐ ๋ ์ง ๊ธฐ์ค์ ์ ํฉ๋๋ค
.dockerignore
ย ํ์ผ์ ํฌํจ๋ ํ์ผ๋ค๊ณผ ํด๋๋ค์,๋น๋๋ด์ฉ์ ํฌํจ๋์ง ์๊ฒ ๋์ด์ ๋์ปค ์๋ฒ์ ์
๋ก๋๊ฐ ๋์ง ์์๊ฒ์
๋๋ค.
์๋ฅผ ๋ค๋ฉด node_modules
์ ์๋ ํ์ผ๋ค์ ์ฉ๋๋ ํฌ๊ณ ๋ค์ ๋ค์ด๋ฐ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ค ๋นํจ์จ์ ์
๋๋ค.
์ด๋ฅผ .dockerignore
ํ์ผ์ ๋ฃ๊ฒ ๋๋ฉด ์๊ฐ์ด ํจ์จ์ ์ด๊ณ ์ฉ๋๋ ์ ์ด์ ธ ์ฉ๋๊ด๋ฆฌ๊ฐ ํธํด์ง ๊ฒ์
๋๋ค.
์ด์ ์ฐ๊ฒฐ์ ํ๊ณ postman ํ๋ก๊ทธ๋จ์์ ์คํ์ ์ํค๋ฉด ์ฐ๊ฒฐ์ด ์๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋์ปค ์ปดํจํฐ๋ก ํฌ์คํธ ๋งจ ํฌํธ๋ฒํธ ์ฐ๊ฒฐ์ด ์๋๋ ์ด์
localhost:3000 โ ๋ด์ปดํจํฐ์์ ์คํ๋๋ ํฌํธ๋ฒํธ
ํ์ง๋ง ๋์ปค์์ ์ด๊ฒ ๋๋ค๋ฉด ๋์ปค ์์ express
๊ฐ ์คํ์ค์ด๊ณ ๋์ปค๊ฐ ๊ฐ๋ก ๋ง๊ณ ์์ด์ ํฌ์คํธ๋งจ์์ ๊ธธ์
์์ด๋ฒ๋ ค ์ฐ๊ฒฐํ์ง ๋ชปํ๋ ๊ฒ์ด๋ค.๊ทธ๋ฌ๋ฏ๋ก ์๋ก์ด ๊ธธ์ ๋ด์ค์ผ ํ๋๋ฐ ๊ทธ๊ฒ์ด ํฌํธ ํฌ์๋ฉ
์ด๋ค!
ํฌํธ ํฌ์๋ฉ
์ผ๋ก ์๋ก์ด ๊ธธ์ ๋ด์ฃผ๋ ค๋ฉด ํฐ๋ฏธ๋์ ์๋ก์ด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ค์ผ ํฉ๋๋ค.!
docker run -p 2500:3000 imagesID
// 0.0.0:2500->3000/tcp ๊ฐ ์ผ์ง๋ค.
์ด์ ๋์ปค๋ฅผ ์ข ๋ฃํ๊ฑฐ๋ ์ข ๋ฃํ๊ณ ๋์ปค์ ์ปดํจํฐ ์ข ๋ฃ๋ ๋ชฉ๋ก๋ค์ด ์ปดํจํฐ ๋ฐ์คํฌํ์ ๋จ์์์ต๋๋ค.์ด๋ฅผ ๋ฐฉ์นํ๊ฒ ๋๋ฉด ์ฉ๋์ด ์ปค ์ปดํจํฐ ํ๋๋์คํฌ์ ๋ฌด๋ฆฌ๊ฐ ๊ฐ์๋ ์์ผ๋ ์์ฐ๋ ์ด๋ฏธ์ง๋ค์ ์ญ์ ํด์ฃผ๋๊ฒ ์ข๊ฒ ์ฃ ?
๊ฐ๋จํ ๋ช ๋ น์ด๋ถํฐ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
//์ข
๋ฃ ๋ฐฉ๋ฒ
docker ps // 1.ํ์ฌ ์๋ ์ํ (ID๊ฐ ๋์ค๋ฉด ์ผ์ง๊ฒ)
docker stop (containerID) // 2.ํ์ฌ ์คํ๋๊ณ ์๋ ๋์ปค ์ ์งํ๊ธฐ
docker ps // 3. ์ ์ง ๋๊ฑฐ ํ์ธํ๊ธฐ
//์ ์ง๋์ด ์๋ ์ปดํจํฐ ์ข
๋ฃ์ํค๋ ๋ฐฉ๋ฒ
// 1. ์ปจํ
์ด๋ID
docker ps -a // ์ ์ง๋ ์ปดํจํฐ ๋ชฉ๋ก
docker rm (containerID) // (์ปจ๋ฐ์ด๋ID) ์ญ์
docker ps -a -q // ์ ์ง๋ ์ปจํ
์ด๋ID ๋ชฉ๋ก
docker rm `docker ps -a -q` // ์ ์ง๋ ๋ชจ๋ ์ปจํ
์ด๋ ID ๋ชฉ๋ก ์ญ์ (๋ฐฑํฑ ์ฃผ์)
// 2. ์ด๋ฏธ์งID
docker rmi (imagesID)// ์ด๋ฏธ์งID ์ญ์
docker images -q // ์ ์ง๋ ์ด๋ฏธ์งID ๋ชฉ๋ก
docker rmi `docker images -q` // ์ ์ง๋ ์ด๋ฏธ์งID ์ ์ฒด ์ญ์
// 3. ์ ์ฒด ์ญ์
docker system prune -a // ์ ์ง๋ ๋ชจ๋ ์ปจํ
์ด๋,๋คํธ์ํฌ,์ด๋ฏธ์ง ์ญ์
docker container restart 'container id' // ์ ์ง๋ ์ปจํ
์ด๋ ์ฌ์์
์ฐธ๊ณ :
https://djangojeng-e.github.io/2020/07/28/TodoList-32%ED%8E%B8-dockerignore-%ED%8C%8C%EC%9D%BC/
https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd