Programming/Docker

[Docker] docker๋ž€? / docker ๋ช…๋ น์–ด

MOONCO 2021. 2. 25. 16:36

๐Ÿ‘‰ Docker๋ž€?

๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์–ธ์ œ ์–ด๋””์„œ๋“  ๋™์ผํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š”, ๊ฐ€์ƒํ™˜๊ฒฝ ํ”„๋กœ๊ทธ๋žจ

# ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ image๋ž€ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด, Docker Hub ํ™ˆํŽ˜์ด์ง€์— ์˜ฌ๋ ค ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•œ๋‹ค.

 

โญ๏ธ ํŠน์ง•

๋ฆฌ๋ˆ…์Šค์˜ namespace ๊ธฐ์ˆ ์„ ์ด์šฉํ•ด, ๊ธฐ์กด์˜ OS์˜ ์ปค๋„์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ์•ฑ์— ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋ถ„๋ฆฌํ•œ๋‹ค.

 

Docker ๊ตฌ์กฐ

์ปดํ“จํ„ฐ {
    ์šด์˜์ฒด์ œ(OS) {
        ๋„์ปค {
            ์ปจํ…Œ์ด๋„ˆ 1 { ... }
            ์ปจํ…Œ์ด๋„ˆ 2 { ... }
            ์ปจํ…Œ์ด๋„ˆ 3 { ... }
            ...
        }
    }
}

# ์ปดํ“จํ„ฐ -> os -> ๋„์ปค -> ์ปจํ…Œ์ด๋„ˆ

# ๋„์ปค๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐœ๋ฐœํ™˜๊ฒฝ์€ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ณ , ๊ด€๋ฆฌ๋˜์–ด์ง„๋‹ค.

 

๊ธฐ์กด ๊ฐ€์ƒ๋จธ์‹  ๊ตฌ์กฐ

์ปดํ“จํ„ฐ {
    ์šด์˜์ฒด์ œ(OS) {
        ๊ฐ€์ƒ ์šด์˜์ฒด์ œ(OS) 1 { ... }
        ๊ฐ€์ƒ ์šด์˜์ฒด์ œ(OS) 2 { ... }
        ๊ฐ€์ƒ ์šด์˜์ฒด์ œ(OS) 3 { ... }
        ...
    }
}

# docker์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, ์šด์˜์ฒด์ œ๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•˜๋ฏ€๋กœ, ์šฉ๋Ÿ‰์ด ํฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.

# ์ปดํ“จํ„ฐ -> os -> os -> ์•ฑ
 

[Docker] ๊ธฐ์กด์˜ VM๊ณผ Docker์˜ ๊ตฌ์กฐ ๋น„๊ต

ํ•˜์ดํผ ๋ฐ”์ด์ €๋ž€? [๊ฐ€์ƒํ™˜๊ฒฝ] ํ•˜์ดํผ๋ฐ”์ด์ €๋ž€? ํ•˜์ดํผ๋ฐ”์ด์ €๋ž€? ๊ฐ€์ƒ ๋จธ์‹  (Virtual Machine, VM)์„ ์ƒ์„ฑ, ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ํ•˜์ดํผ๋ฐ”์ด์ € ๊ธฐ๋Šฅ ํ•˜์ดํผ๋ฐ”์ด์ € ์šด์˜์ฒด์ œ์™€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž์›์„ ๋ถ„๋ฆฌํ•ด, VM

defineall.tistory.com

 

 

Docker ์™€ VM ์ฐจ์ด์ 

์ƒํ™ฉ ๊ธฐ์กด VM ์ด์šฉํ•œ ์•ฑ Docker ์ด์šฉํ•œ ์•ฑ
1๊ฐ€์ง€ ๊ธฐ๋Šฅ ๊ณ ์žฅ๋‚ฌ์„๋•Œ ์ „์ฒด ์„œ๋น„์Šค ์ด์šฉ๋ถˆ๊ฐ€ ๋‚˜๋จธ์ง€ ์„œ๋น„์Šค ์ด์šฉ๊ฐ€๋Šฅ
์ƒˆ๋กœ์šด ์•ฑ ๋งŒ๋“ค๋•Œ OS ์„ค์น˜ ( ์šฉ๋Ÿ‰ ํผ ) ์ปจํ…Œ์ด๋„ˆ ์„ค์น˜ ( bins/libs , app - ์šฉ๋Ÿ‰ ์ž‘์Œ )
๊ธฐ๋Šฅ์ด ๊ฐ™์€ ์˜ˆ๋น„ ์•ฑ ๋งŒ๋“ค๋•Œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ ๊ตฌ์„ฑ ๋„์ปค ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ด์šฉํ•ด ๊ฐ„๋‹จํžˆ ๊ตฌ์„ฑ

 


๐Ÿ‘‰ Docker ์‚ฌ์šฉ๋ฒ•

 

Docker ์„ค์น˜ํ•˜๊ธฐ

 

Docker Desktop overview

 

docs.docker.com

์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค, 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 Container Image Library | App Containerization

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

 

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>
๋ฐ˜์‘ํ˜•