본문 바로가기

IT/서버

Docker Compose를 이용하기

반응형

docker-compose.yml 파일을 통해 별도의 도커 명령어를 모르더라도 docker-compose up 명령어를 통해 한번에 원하는 환경을 만들 수 있다. 

 

 

위 그림과 같이 클라이언트인 웹 브라우저가 있고 워드프레이스인 웹서버와 mysql DB 서버가 존재한다고 생각하고 도커를 통해 구축해보자.

 

아래 주소에 있는 docker 명령어와 compose 파일을 참고해서 스터디하고자 한다.

https://gist.github.com/egoing/b62aa16573dd5c7c5da51fd429a5faa2

 

docker-compose.md

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

[Docker 명령어]

 

[Docker Compose]

먼저 아래 명령어를 통해 wordpress 네트워크를 생성한다. 

docker network create wordpress_net

그 다음 

docker \
run \
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \
    -e "MYSQL_ROOT_PASSWORD=123456" \
    -e "MYSQL_DATABASE=wordpress" \
    -e "MYSQL_USER=wordpress_user" \
    -e "MYSQL_PASSWORD=123456" \
    --network wordpress_net \
mysql:5.7

위 명령어를 통해 mysql 이미지를 다운받고 wordpress_net 네트워크 안에 실행시킨다. 

이때 로컬 db_data 폴더에 mysql 파일들이 저장됨으로 mysql을 재실행하더라도 기존의 데이터가 사라지는 일은 없을 것이다. 

docker \
    run \
    --name app \
    -v "$(pwd)/app_data:/var/www/html" \
    -e "WORDPRESS_DB_HOST=db" \
    -e "WORDPRESS_DB_USER=wordpress_user" \
    -e "WORDPRESS_DB_NAME=wordpress" \
    -e "WORDPRESS_DB_PASSWORD=123456" \
    -e "WORDPRESS_DEBUG=1" \
    -p 8080:80 \
    --network wordpress_net \
wordpress:latest

wordpress도 위 명령어로 실행하여 wordpress_net 존에 mysql과 wordpress가 실행되며 로컬에 app_data 폴더에 mysql 처럼 파일들이 저장된걸 확인할 수 있다. 

 

이제 wordpress를 실행한 8080포트로 웹서버에 접속하면 화면처럼 wordpress 설치 화면이 보일 것이다.

위와 같은 명령어를 매번 기억하고 세팅하기란 어렵고 도커를 모르는 개발자도 쉽게 위와 같은 환경을 세팅할 수 있게 Docker compose를 사용해보자 

세팅했던 컨포넌트와 네트워크 폴더 모두 삭제하자 (docker rm -f, docker network rm 명령어 사용)

 

서버에 docker-compose를 설치하자  

https://docs.docker.com/compose/install/

 

Install Docker Compose

 

docs.docker.com

리눅스 서버임으로 curl로 git에서 다운로드 받는다.

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

 

로컬에 docker-compose.yml 파일을 생성한 뒤 아래 내용으로 작성한다. 

version: "3.7"

services:
  db:
    image: mysql:5.7
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: 123456
  
  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: 123456 

 

docker-compose up 명령어을 실행하면 이전에 세팅한 환경처럼 wordpress와 db가 실행되는 걸 확인할 수 있다. 

 

docker-compose로 실행한 컨테이너를 중지하고 싶으면 docker-compose down을 입력하면 된다.

 

 

먼저 version으로 생성한 docker-compose.yml 파일의 버전을 명시하고 services 안에 만들고 싶은 컨테이너들을 명시해주면 된다. 

image에 생성하려는 이미지명과 버전을 명시하고 상위에 해당 컨테이너의 이름을 기재한다. 

그리고 volumes를 통해 볼륨 링크를 정의해준다.

 

서버의 접속 계정정보는 environment 지시어에 정의해서 사용할 수 있고 depends_on 지시어를 통해 app 서버가 db 서버에 의존함으로 db 서버 먼저 생성한 뒤 app 서버를 생성해서 연결해줄 수 있다. 

 

WORDPRESS_DB_HOST라는 환경 변수에 연결하려는 DB서버의 IP와 Port 정보를 기재해도 되지만 좀더 편하게 db라는 컨테이너 이름으로 명시할 수도 있다. 이 방법은 network라는 존을 만들어 app과 db를 넣어줌으로써 가능한 기능이다.

 

이때 docker 명령어의 -network 옵션을 통해 컨포넌트들을 연결해야 하지만 docker-compose는 이런 행위를 할 필요가 없다.

왜냐하면 docker-compose로 실행하는 것 자체가 하나의 네트워크들에서 컨포넌트를 실행한다는 의미이기 때문이다. 

 

 

참고동영상

https://www.youtube.com/watch?v=EK6iYRCIjYs 

 

반응형

'IT > 서버' 카테고리의 다른 글

MSA 아키텍처 스타일  (0) 2023.02.26
MSA 개념  (0) 2023.01.29
Docker Push (DockerHub, GitHub)  (0) 2022.02.14
Docker Commit & Build  (0) 2022.02.05
Docker 기본 개념  (0) 2022.02.05