본문 바로가기

CI-CD/Docker

Docker- Docker Compose

도커컴포즈란?

 도커 컴포즈를 통해서 동시에 여러개의 컨테이너를 생성하고 관리할 수 있다.

예컨데 Docker compose 없이 wordpress 컨테이너와 mysql 컨테이너 두개를 생성하고 두 컨테이너를 연결하기 위해선 두 개의 run 명령어를 작성해야한다.

$ docker run -d --name db mysql:8
$ docker run -d --name app -p8080:80 --link db:mysql wordpress:latest

 

이후 필요에 따라 각각의 컨테이너에서 exec 명령어를 사용해서 필요한 환경변수등을 설정해줘야한다.

$ docker exec -it db bash # mysql 컨테이너 진입
... 환경변수 설정
$ docker exec -it db app # wordpress 컨테이너 진입
... 환경변수 설정

 

매번 일일히 이러한 설정을 하기는 매우 귀찮기 때문에 이를 한번에 쉽게 처리하기 위해서 도커 컴포즈를 사용한다.

도커 컴포즈 파일로 컨테이너 생성하기

compose.yaml

services:
  db:
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.4-focal
    # If you really want to use MySQL, uncomment the following line
    #image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    image: wordpress:latest
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:

 도커 컴포즈를 사용하기 위해서는  시스템 구축에 필요한 설정을 담은 yaml 파일을 만들어 놓아야한다. compose.yml를 만들자.

위의 compose.yaml 파일에는 두개의 컨테이너(db, wordpress)에 대한 환경변수와 사용할 이미지, volume 마운트등에 대한 정보들이 들어있다.

 

특정 디렉토리에 yaml 파일이 있는 경우 up 명령어를 사용하는 경우 도커 컴포즈는 자동적으로 이 파일을 읽어서 컨테이너를 생성한다.

$ docker-compose up -d --build # 백그라운드로 yaml 파일로 부터 정보 읽어와 컨테이너 생성
$ docker-compose down -d # 백그라운드로 모든 컨테이너를 정지하고 삭제

결국 docker compose는 한번에 실행할 컨테이너들의 정보들을 모아둔 yaml 파일 하나만 있다면 한번에 여러개의 컨테이너를 실행, 관리할 수 있다.

한 디렉토리에 두개 이상의 yaml 파일이 존재하는 경우 up 명령어 실행하기

참고로 하나의 디렉토리에 두개 이상의 yaml 파일이 있는 경우, docker compose up 명령을 실행하는 경우 충돌이 발생한다.

compose.yaml, docker-compose.yaml 두개의 yaml 파일이 존재

이 경우 compose.yaml과 docker-compose.yaml 두개의 yaml 파일이 존재하여 충돌이 발생하였다. 

웬만하면 한 디렉토리에는 한 개의 yaml 파일만 놔두는 것이 좋겠지만, 이미 존재한다면 -f 옵션을 주어서 실행할 수 있다.

$ docker-compose -f [compose 파일 명]  up -d # 강제 실행
$ docker-compose -f [compose 파일 명1], -f [compose 파일 명2] ... up -d # 여러 개 실행

 

정상적으로 실행이 된 모습이다.

도커 컴포즈 명령어 정리

컴포즈로 컨테이너 생성

$ docker-compose up -d # 백그라운드 실행

 

이미지 빌드

$ docker-compose -f "compose.yml" up --build

도커 네트워크

bridge는 소프트웨어로 만들어진 이더넷 스위치이다. compose를 통해서 여러개의 컨테이너를 연결해 놓은 경우 각 컨테이너들은 bridge를 통해서 하나의 네트워크로 연결된다.

도커 컴포즈를 통해서 빌드를 하는 경우 해당 컴포즈 파일 내에서 빌드되는 컨테이너들끼리 공유할수 있는 네트워크를 따로 만들어준다.

docker network inspect 

'CI-CD > Docker' 카테고리의 다른 글

Docker- Network  (0) 2024.05.10
Docker- Volume  (0) 2024.04.21
Docker- Docker file  (0) 2024.04.16
Docker- redis 실행  (0) 2024.04.14
Docker- 명령어  (0) 2024.03.17