Commands/docker (doccker-compose)

[updated] docker-compose.yaml 알아보기

꼰대코더 2023. 12. 9. 00:22

 Docker Compose는 "여러 컨테이너로 구성된 애플리케이션을 손쉽게 정의·실행·관리하기 위한 도구" 라고 할 수 있습니다.

 

아래는 mysql를 사용하는 web 어플리케이션의 docker compose 의 샘플입니다.

services:
  web:
    build: ./dir
    image: webapp:tag
    restart: always
    depends_on:
      - db
    networks: 
      - service1
      
  db:
    image: mysql:8.0
    restart: always 
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=your_root_password
      - MYSQL_DATABASE=your_database_name
      - MYSQL_USER=your_username 
      - MYSQL_PASSWORD=your_user_password
    volumes:
      - ./data/conf.d:/etc/mysql/conf.d
      - ./data/logs:/logs
      - /usr/local/var/mysql:/var/lib/mysql 
    networks: 
      - service1
      
volumes:
  mysql_data:
  
networks: 
  service1

 

web:
db:

서비스명입니다.

build: ./dir

$ docker compose build 명령으로 Dockerfile 을 이미지로 생성할 시에 필요합니다.

위의 설정의 경우에는 ./dir/Dockerfile 이 존재해야 합니다.

만약 다른이름으로 Dockerfile 를 저장했다고 하면 아래와 같이 설정합니다.

build:
   context: ./dir
   dockerfile: 커스텀dockerfile명

db 의 image: mysql:8.0 처럼 이미 이미지가 있을 경우에는 필요하지 않습니다.

 

image: webapp:tag

docker 이미지명을 나타내고 tag에 버젼닝을 할 수 있습니다. (예: webapp:1.5 )

build설정이 없는 경우는 docker hub 상에 이미 존재하는 이미지를 지정합니다.

 

depends_on:

의존적인 container 를 지정합니다. 예를 들면 db 가 먼저 container화 되어야 하는 경우는 지정합니다.

 

networks:

각각 서비스에서 공통적인 network를 지정한다면 다른 컨테이들과 연결(IP가 아닌 서비스명) 할 수 있습니다.

이의 장점은 DB 와 연결할 경우에 DB 어드레스를 변할 수 있는 IP보다 서비스명으로 지정하면 편리합니다.

 

ports:

호스트의 포트:컨테이너의 포트 순입니다. 컨테이너의 포트와 호스트의 포트를 맵핑합니다.

 

environment:

컨테이너에서 사용할 환경변수를 설정합니다.

 

volumes:

호스트의 패스:컨테이너 내의 패스 순입니다.

영구적으로 사용할 화일을 컨테이너에서 사용할 시 컨테이너내의 패스를 호스트 패스와 맵핑합니다.

결국 호스트내에 화일이 영구적으로 저장됩니다. (컨터이너는 메모리상의 인스턴스이므로 stop되면 사라지기 때문입니다.)

 

volumes:
   mysql_data:
networks:
   service1

명시적으로 지정합니다. 

 

docker compose 명령

build
화일에 변화가 있을때 마다
docker-compose down 을 먼저 실행
$ docker-compose build
up
docker 들을 container 생성하여 start
$ docker-compose up -d
down 
docker 들을 stop 하여 제거
$ docker-compose down
exec
container 에 접속
$ docker-compose exec 서비스명 exec bash
logs -f 
서비스container의 로그를 계속해서 출력
$ docker-compose logs -f 서비스명

※ 최신 docker compose는 - 없이 docker compose 를 사용합니다.

 

다양한 docker-compose 의 샘플 보기