[Docker] ๐Ÿ›  Docker-compose๋ฅผ ์•Œ์•„๋ณด์ž!!

ํ™ฉ๊ทœ๋นˆยท2022๋…„ 4์›” 24์ผ
0

CI/CD

๋ชฉ๋ก ๋ณด๊ธฐ
3/3

๐Ÿ’Ž ๊ฐœ์š”

docker์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ €๋ฒˆ์— ํ•˜์˜€๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” docker-compose์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. docker-compose๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒƒ์— ์“ฐ์ผ ์ˆ˜ ์žˆ์„์ง€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž!!

๐Ÿ’Ž Docker-compose

๐Ÿซ docker-compose๋ž€?

์ˆ˜์—…์‹œ๊ฐ„์— ๋ฐฐ์šด ๋‚ด์šฉ ๊ทธ๋Œ€๋กœ ๋งํ•ด๋ณด์ž๋ฉด interactive ๋ฐฉ๋ฒ• ๋˜๋Š” dockerfile๋กœ image๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฐ๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ docker-compose๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค!! ๋”ฐ๋ผ์„œ docker-compose๋Š” ๋‹ค์ˆ˜์˜ docker container๋“ค์„ ๊ทœ์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ž๋™ํ™” ๋„๊ตฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์— ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ์€ docker-compose.yml์ด๋ผ๋Š” ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ dockerfile์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ์ฒ˜๋Ÿผ ๋นŒ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. docker-compose ์‚ฌ์šฉํ•˜๋Š” 3๊ฐ€์ง€ ์ˆœ์„œ๋Š”

  1. dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ ํ™˜๊ฒฝ์„ ์ •์˜
  2. ์•ฑ์„ ๊ตฌ์„ฑํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ docker-compose.yml์— ์ •์˜ํ•˜์—ฌ ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ 
  3. docker-compose up์„ ์‹คํ–‰ํ•จ์œผ๋กœ์จ docker-compose๋ช…๋ น์ด ์ „์ฒด ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋„๋ก ํ•œ๋‹ค!

๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ ๊ณต์‹๋ฌธ์„œ์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์˜€๋‹ค!!
๐Ÿ‘‰ https://docs.docker.com/compose/

๐Ÿซ docker-compose ์„ค์น˜ ๋ฐฉ๋ฒ• ๋ฐ command

๐Ÿ‘‰ https://docs.docker.com/compose/install/

์œ„ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ docker-compose๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค!!
์ด ๋•Œ ๋‚˜๋Š” ์ˆ˜์—…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ec2 ubuntuํ™˜๊ฒฝ์—์„œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜์˜€์—ˆ๊ธฐ ๋•Œ๋ฌธ์— linuxํ™˜๊ฒฝ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

// ์„ค์น˜
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

// ๊ถŒํ•œ ๋ถ€์—ฌ
sudo chmod +x /usr/local/bin/docker-compose

// ์„ค์น˜ ํ™•์ธ
docker-compose --version

// ์‹คํ–‰ํ•˜๊ธฐ
// -d ๋ช…๋ น์–ด๋ฅผ ๋ถ™์ด๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
docker-compose up
docker-compose up -d 

//์‹คํ–‰ ์ข…๋ฃŒ
docker-compose down

๐Ÿ’Ž WordPress ์˜ˆ์ œ

๐Ÿซ wordpress

๐Ÿ‘‰ https://docs.docker.com/samples/wordpress/
docker ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด๋ฉด wordpress์— ๋Œ€ํ•œ ์˜ˆ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜์žˆ๋‹ค. ์ด๋Š” wordpress์™€ mySQL DB container๋ฅผ ๊ฐ๊ฐ ๋งŒ๋“ค๊ณ  ์ด๋“ค์„ ์—ฐ๋™ํ•˜๋Š” ์˜ˆ์ œ๋กœ docker-compose.yml ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์˜€์„ ๋•Œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!!

๋˜ํ•œ ์˜ˆ์ œ์—์„œ ์ฃผ์–ด์ง„ ํฌํŠธ ๋ฒˆํ˜ธ๋Š” 8000๋ฒˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ec2๋ฅผ ์‚ฌ์šฉํ•ด์„œ docker ์‹คํ–‰ํ•ด๋ณด๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด inbound rule์„ 8000๋ฒˆ์„ ์ถ”๊ฐ€ํ•˜์—ฌ

docker-compose up -d 

๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด๋„๋ก ํ•˜์ž!!

๐Ÿซ docker-compose.yml

version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

์œ„์˜ ๋‚ด์šฉ์ด docker-compose.yml ํŒŒ์ผ์ด๋ฉฐ ์ด๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ทธ๋Œ€๋กœ docker-compose up -d๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋ฉด ์ด์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€ wordpress์™€ mySQL์— ๋Œ€ํ•ด ๋‘๊ฐœ ์ƒ๊ธฐ๊ณ  ์ปจํ…Œ์ด๋„ˆ๋„ ๊ฐ๊ฐ ์ƒ๊ฒจ 8000๋ฒˆ์—์„œ์˜ wordpress ์‚ฌ์ดํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค!!

๐Ÿซ docker volume

์—ฌ๊ธฐ์„œ docker-compose.yml์˜ ํŒŒ์ผ์„ ์‚ด์ง ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž๋ฉด !! volumes์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์ž‘์„ฑ๋˜์–ด์žˆ๋‹ค.

์ด volume์€ db๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ํ•„์ˆ˜์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ˜ธ์ŠคํŠธ ๊ธฐ๊ณ„์˜ on-disk persistent filesystem์„ container์˜ in-memory virtual filesystem์— ๋งˆ์šดํŠธํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ฒŒํ•˜๋Š” ๊ฒƒ์ด๋‹ค!! ํ˜ธ์ŠคํŠธ ๊ธฐ๊ณ„์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜์–ด ๋‹ค์‹œ ๋™์ผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ๋„ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ธฐ๋Šฅ์ด๋‹ค!!

์‹ค์ œ๋กœ ์œ„ docker-compose.ymlํŒŒ์ผ์„ ์ด์šฉํ•œ wordpress์˜ˆ์ œ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด ์•ˆ์—์„œ ๊พธ๋ฏผ wordpress์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ํ˜ธ์ŠคํŠธ ๊ธฐ๊ณ„๋ฅผ ์ข…๋ฃŒํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ํ›„์— ์‹œ์ž‘์‹œ์ผฐ์„ ๋•Œ ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค!!

๐Ÿ’Ž ์ •๋ฆฌํ•˜๊ธฐ

docker-compose๋ฅผ wordpress์™€ ํ•จ๊ป˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค!! docker-compose๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž…๋ ฅํ•˜์—ฌ image์™€ container๋ฅผ ๋งŒ๋“œ๋Š” ์ผ์„ ์ค„์—ฌ ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ container๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์žŠ์ง€ ๋ง์ž!!
๋˜ํ•œ ์ด๋ฅผ ์ด์šฉํ•œ docker-compose.yml ํŒŒ์ผ์„ ํ†ตํ•ด volume์— ๋Œ€ํ•œ ๋‚ด์šฉ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋œ ์ดํ›„๋กœ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ๋Š” docker-volume๋„ ๊ผญ ๊ธฐ์–ตํ•˜์ž!!

์ด์ œ ๊ณง 5์›”์ด๋‹ค ๋ฒŒ์จ
ํ™”์ดํŒ…~!!

profile
์•ˆ๋…•ํ•˜์„ธ์šค

0๊ฐœ์˜ ๋Œ“๊ธ€