hades

[Docker] ๋„์ปค ๊ธฐ์ดˆ ๋ณธ๋ฌธ

๐Ÿƒ๐Ÿป‍โ™‚๏ธ ๊ธฐ๋ณธํ›ˆ๋ จ/CICD

[Docker] ๋„์ปค ๊ธฐ์ดˆ

hades1 2024. 7. 17. 15:56

๋„์ปค๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์šด์šฉํ•œ๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€์ƒ๋จธ์‹ ์ฒ˜๋Ÿผ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ „๋ถ€ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ, ๊ฐ€์ƒ๋จธ์‹ ์ฒ˜๋Ÿผ ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๋ฆฌ๋ˆ…์Šค ์ปจํŠธ๋กค ๊ทธ๋ฃน์ด๋ž€ ํ”„๋กœ์„ธ์Šค๋กœ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค(CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ ๋Œ€์—ญ๋Œ€ ๋“ฑ)์„ ์ œํ•œํ•œ๋‹ค.

 

๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด Image๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ๋‹ค. github์— ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค.

 

Public Cloud๋Š” public registry, On-premises๋Š” private registry๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Registry์—์„œ Image๋ฅผ PULLํ•˜๊ณ , ๊ทธ Image๋กœ Container๋ฅผ ๋งŒ๋“ค์–ด Memory์—์„œ ์‹คํ–‰์‹œํ‚จ๋‹ค.

Container๋Š” ๊ฐ™์€ ์„ค์ •์œผ๋กœ ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.

 

Docker ์„ค์น˜

sudo apt update
sudo apt install docker.io

 

Docker Root Dir์˜ /var/lib/docker์— ์ด๋ฏธ์ง€์™€ ๋กœ๊ทธ ๋“ฑ ์žˆ๋‹ค.

 

Docker ์‹คํ–‰

sudo docker

Container๋งˆ๋‹ค ์„ค์ •์ด ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— IP๋„ ๋‹ค๋ฅด๋‹ค. ๋”ฐ๋ผ์„œ, Container๋งˆ๋‹ค IP๋ฅผ ํ™•์ธํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.

 

Docker hub์—์„œ image ๊ฒ€์ƒ‰

sudo docker search nginx

https://hub.docker.com/ ์—์„œ image๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

 

Docker hub์—์„œ image ๋‹ค์šด๋กœ๋“œ

sudo docker pull nginx

๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

 

Docker ์ •๋ณด ํ™•์ธ

sudo docker info

 

Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

sudo docker run -itd -p 80:80 --name=webapp nginx

-itd : interactive, terminal, background

-p : ์นผ๋ฆฌ ๋ฆฌ๋ˆ…์Šค 80 ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ nginx 80 ํฌํŠธ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ

--name=webapp : webapp์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ nginx ์‹คํ–‰

 

๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ์€ hash ๊ฐ’์œผ๋กœ ์ค‘๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฑฐ์˜ ์—†๋‹ค.

 

๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ •๋ณด

sudo docker ps

 

์ปจํ…Œ์ด๋„ˆ ์กฐ์‚ฌ

sudo docker inspect [CONTAINER ID]

Container๋Š” ๋‚ด๋ถ€ ip๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์ง€๋งŒ, Docker๋ฅผ ์‹คํ–‰ํ•œ ์ปดํ“จํ„ฐ์˜ IP๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ค‘์ง€

sudo docker stop [CONTAINER ID]

 

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์žฌ์‹œ์ž‘

sudo docker start [CONTAINER ID]

 

webapp์˜ ์ฝ˜์†” ์‹คํ–‰, ์ข…๋ฃŒ

sudo docker exec -it webapp bash
exit

 

์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์„ค์น˜๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

apt-get update
apt-get install vim

 

๊ฒฝ๋กœ์— ๋ณต์‚ฌ

sudo docker cp index.html [CONTAINER_ID]:/usr/share/nginx/html/index.html

 

๋ณ€๊ฒฝ์‚ฌํ•ญ ํ™•์ธ

sudo docker diff [CONTAINER ID]

 

๋ณ€๊ฒฝํ•œ Container๋ฅผ image๋กœ ์ €์žฅ

sudo docker commit -a "[DOCKER HUB NICKNAME]" webapp2 webapp_last:1.0

webapp2๋ฅผ webapp_last, TAG๊ฐ€ 1.0์ธ image๋กœ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

Docker ๋ณผ๋ฅจ ์ƒ์„ฑ ๋ฐ ํ™œ์šฉ

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์œผ๋กœ ์‚ฌ๋ผ์ง„ ๊ฒฝ์šฐ, ๋ชจ๋“  ์ •๋ณด๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ณผ๋ฅจ์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค.

sudo docker volume create vol_test1

sudo docker inspect vol_test1์„ ํ•˜๊ฒŒ ๋˜๋ฉด, Mountpoint๋ผ๋Š” ๊ฒƒ์ด ๋‚˜์˜ค๋Š”๋ฐ, ์ด ๊ฒฝ๋กœ์— ๋ณผ๋ฅจ๊ณผ ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ •๋ณด๋“ค์ด ์ €์žฅ๋œ๋‹ค.

 

sudo docker run -itd --name=webapp6 -p 86:80 -v vol_test1:/var/log nginx

nginx ์ปจํ…Œ์ด๋„ˆ์˜ /var/log์™€ vol_test1์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

sudo docker logs webapp6

webapp6์˜ ์ ‘์† ๊ธฐ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Docker ๋ณผ๋ฅจ์„ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์šด์˜

sudo docker volume create mysql_vol01
sudo docker run -idt --name=mysql01 -e MYSQL_DATABASE=TEST_DATABASE -e MYSQL_ROOT_PASSWORD=test -v mysql_vol01:/var/lib/mysql mysql:5.7

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์€ mysql01์ด๋‹ค.

TEST_DATABASE๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค.

๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” test์ด๋‹ค.

๋ณผ๋ฅจ์ธ mysql_vol01๊ณผ /var/lib/mysql์„ ์—ฐ๊ฒฐํ•œ๋‹ค. /var/lib/mysql์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

mysql 5.7๋ฒ„์ „์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ€์ ธ ์˜จ๋‹ค.

 

sudo docker exec -it mysql01 bash
mysql -u root -p

์ปจํ…Œ์ด๋„ˆ์˜ bash ์ฐฝ์—์„œ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์œ„์—์„œ ์„ค์ •ํ•œ test์ด๋‹ค. show databases; ๋ฅผ ํ•˜๋ฉด TEST_DATABASE๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

Docker ๋„คํŠธ์›Œํฌ ํ™•์ธ, ์ƒ์„ฑ ๋ฐ ํ™œ์šฉ

sudo docker network create net_test01

net_test01์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ผ์ข…์˜ ์„œ๋ธŒ๋„ท์„ ์ƒ์„ฑํ•œ๋‹ค.

 

sudo docker run -itd --name=webapp9 -p 89:80 --net=net_test01 nginx

--net์— net_test01์„ ์ „๋‹ฌํ•˜์—ฌ net_test01์— ์—ฐ๊ฒฐ๋œ nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. sudo docker inspect webapp9์„ ํ†ตํ•ด IP๋ถ€๋ถ„์„ ํ™•์ธํ•ด๋ณด๋ฉด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. --net์˜ default๋Š” bridge์ด๋ฉฐ, host๋กœ ์ „๋‹ฌ ์‹œ host์™€ ๊ฐ™์€ IP๋ฅผ ๊ณต์œ ํ•˜์ง€๋งŒ, ๋ณด์•ˆ ์ƒ์˜ ์œ„ํ—˜์ด ์žˆ๋‹ค.

 

Docker ๋ณผ๋ฅจ์„ ํ™œ์šฉํ•˜์—ฌ ์›นํŽ˜์ด์ง€ ๋ณ€๊ฒฝ

sudo docker run -itd --name=webapp3 -p 83:80 -v vol_test1:/usr/share/nginx/html nginx

/usr/share/nginx/html์€ nginx์˜ index.html ๋ณด๊ด€ ์žฅ์†Œ์ด๋‹ค. ์ด๋ฅผ ๋ณผ๋ฅจ๊ณผ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

๋ณผ๋ฅจ์— ์›ํ•˜๋Š” ๋Œ€๋กœ index.html์„ ๋งŒ๋“ค๊ณ  ์ €์žฅํ•˜๋ฉด, /usr/share/nginx/html์—๋„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋˜์–ด ์ €์žฅ๋œ๋‹ค.

 

Docker๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ตฌ์ถ•

sudo docker volume create vol01
sudo docker volume create vol02
sudo docker volume create vol03
sudo docker run -itd --name=webapp01 -v vol01:/usr/share/nginx/html -p 8001:80 nginx
sudo docker run -itd --name=webapp02 -v vol02:/usr/share/nginx/html -p 8002:80 nginx
sudo docker run -itd --name=webapp03 -v vol03:/usr/share/nginx/html -p 8003:80 nginx

Docker ๋ณผ๋ฅจ์„ ๋งŒ๋“ค๊ณ , ๊ทธ์— ๋งž๋Š” nginx ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

sudo apt update
sudo apt install nginx

๋ฆฌ๋ˆ…์Šค์— nginx๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

 

sudo service nginx start
sudo vim /etc/nginx/nginx.conf

nginx ์‹คํ–‰ ๋ฐ ์„ค์ •

 

์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

Dockerfile

๋„์ปค hub์—์„œ ์ž‘๋™์‹œํ‚ฌ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ๊ธฐ์ˆ ํ•œ ํŒŒ์ผ์ด๋‹ค.

๊ณต๊ฐœ๋œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ -> OS ์„ค์ •, ๋ฏธ๋“ค์›จ์–ด ์„ค์น˜ -> ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •

 

๋„์ปค ํŒŒ์ผ์—๋Š” ์ด๋ฏธ์ง€ ์ •๋ณด, ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •, ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ž‘๋™์‹œ์ผœ๋‘˜ ๋ฐ๋ชฌ ์‹คํ–‰ ๋“ฑ์ด ์žˆ๋‹ค.

 

FROM ubuntu:latest
LABEL email=admin@naver.com
CMD ["echo", "Hello Dockerfile"]

sudo docker pull ubuntu:latest

์„ค๋ช…

CMD

 

sudo docker build -t ubuntu:v1.0 .

Dockerfile(.)์„ ์‚ฌ์šฉํ•˜์—ฌ ubuntu:v1.0์œผ๋กœ ๋นŒ๋“œํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

FROM : ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ด

RUN : FROM์—์„œ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์Šคํฌ๋ฆฝํŠธ ํ˜น์€ ๋ช…๋ น์„ ์‹คํ–‰, RUN apt-get update && apt-get install -y -q nginx

COPY : ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ด๋ฏธ์ง€ ์•ˆ์— ๋ณต์‚ฌ

EXPOSE : ํ˜ธ์ŠคํŠธ์™€ ์—ฐ๊ฒฐํ•  ํฌํŠธ ๋ฒˆํ˜ธ ์„ค์ •

CMD : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด

 

ubuntu๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์—์„œ Nginx ์„œ๋ฒ„ ์ƒ์„ฑ

COPY์˜ ๊ฒฝ๋กœ๋Š” ๋ฒ„์ „์— ๋”ฐ๋ผ /var/www/html/ ๋˜๋Š” /usr/share/nginx/html/์ด๋‹ค.

 

alpine(๊ฐ„์†Œํ™”๋œ ๋ฆฌ๋ˆ…์Šค) ์„ค์น˜ 

 

sudo du -sh

์šฉ๋Ÿ‰ ํ™•์ธ

 

sudo docker rmi -f $(docker images -a -q)

๋ชจ๋“  ์ด๋ฏธ์ง€ ์‚ญ์ œ

 

Docker Compose

๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋„๊ตฌ

docker-compose.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , sudo docker-compose up -d

https://github.com/docker/awesome-compose/tree/master/official-documentation-samples/wordpress/

 

awesome-compose/official-documentation-samples/wordpress at master · docker/awesome-compose

Awesome Docker Compose samples. Contribute to docker/awesome-compose development by creating an account on GitHub.

github.com

 

sudo docker inspect [CONTAINER]๋ฅผ ์‹คํ–‰ํ•˜๊ณ , LogPath๋ฅผ ์ฐพ๋Š” ๊ฒƒ๊ณผ sudo docker logs [CONTAINER]๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.