개발/Server

docker compose 작성 방법 및 명령어 모음

leebera_ 2022. 5. 15. 03:22

docker-compose 파일 작성 문법

비슷하거나 같은 의미인 것은 주석이 한번만 달려있음

# docker-compose 버전 명시
version: "3.9"
​
# 생성할 서비스(컨테이너) 지정
services:
  # nginx란 이름의 서비스 생성
  nginx:
    # nginx:latest 이미지로 서비스 생성
    # DockerFile기반이 아니라면 아래 image의 주석을 해제하고 build와 그 하위의 context와 dockerfuile을 주석처리해야함
    #image: nginx:latest
    # nginx란 서비스를 실행하는 컨테이너의 이름 지정
    container_name: nginx
    # DockerFile기반으로 서비스를 생성하기 위한 build명령
    build:
      # DockerFile이 있는 경로 지정
      context: .
      # DockerFile 이름 지정(DockerFile이 아닌 다른 이름일 때 필요)
      dockerfile: DockerFile_nginx
    # port지정
    ports:
      # host의 80포트를 container의 80로 연결(container는 80포트를 listen)
      - "80:80"
    # container의 network지정
    networks:
      # bp_network를 이용
      bp_network:
        # 해당 네트워크에서의 주소를 172.30.0.2로 지정
        ipv4_address: 172.30.0.2
    # host의 파일 또는 디렉터리와 container의 파일 또는 디렉터리를 공유
    volumes:
      # 로컬:컨테이너
      - ~/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ~/nginx/html:/usr/share/nginx/html
    # container에 지정할 환경변수
    environment:
      # timezone환경변수 적용
      - TZ=Asia/Seoul
    # 재시작 정책 지정
    restart: "unless-stopped"
​
  mariadb:
    container_name: mariadb
    build:
      context: .
      dockerfile: DockerFile_mariadb
    ports:
      - "3306:3306"
    networks:
      bp_network:
        ipv4_address: 172.30.0.4
    volumes:
      - ~/mariadb/data:/var/lib/mysql
    environment:
      - TZ=Asia/Seoul
      # .env 파일에 작성되어있는 환경변수를 모두 적용
      - .env
    restart: "unless-stopped"
​
  node:
    container_name: nodejs
    build:
      context: .
      dockerfile: DockerFile_node
    ports:
      - "3000:3000"
    networks:
      bp_network:
        ipv4_address: 172.30.0.3
    volumes:
      - ~/nodejs/app:/usr/src/app
    environment:
      - TZ=Asia/Seoul
    restart: "unless-stopped"
​
# 생성할 network지정
networks:
  # bp_network란 이름의 network생성
  bp_network:
    # driver를 bridge로 적용
    driver: bridge
    # container의 고정 ip를 할당하기 위해 서브넷과 게이트웨이를 지정하기위한 블록
    ipam:
      driver: default
      # 서브넷과 게이트웨이 지정
      config:
        - subnet: 172.30.0.0/16
          gateway: 172.30.0.1
​

참고로 들여쓰기 시 탭을 이용하면 아래와 같은 에러가 발생하므로 주의

yaml: found character that cannot start any token

 

 

docker-compose 명령어

명령어들을 실행할 때 docker compose파일 위치에서 실행해야 함

 

생성

docker-compose up

docker-compose에 정의한 container, network, volume 생성

-d 옵션을 붙이면 백그라운드에서 실행 가능

 

삭제

docker-compose down

docker-compose로 만들어진 container, network, volume 삭제

--rmi all 옵션을 붙이면 docker-compose를 통해 생성된 이미지도 함께 삭제

 

실행, 정지, 재시작

docker-compose start
docker-compose stop
docker-compose restart

맨 뒤에 서비스명을 붙여 특정 서비스만 필요한 동작을 수행할 수 있음

 

상태 확인

docker-compose ps

docker-compose로 만들어진 container의 상태 확인

비슷한 명령어인 docker ps는 docker-compose외에도 docker를 통해 실행 중인 모든 컨테이너의 상태를 확인하는 명령어

 

로그 확인

docker-compose logs

docker-compose로 만들어진 모든 container의 log확인

 

컨테이너-호스트 간 파일 복사

컨테이너 이름이 필요한데 모를 경우 docker-compose ps로 확인

컨테이너에서 호스트로 복사

docekr cp 컨테이너이름:컨테이너경로 호스트경로

컨테이너 경로에 복사할 파일이나 폴더의 경로 입력

호스트에서 컨테이너로 복사

docekr cp 호스트경로 컨테이너이름:컨테이너경로

호스트 경로에 복사할 파일이나 폴더의 경로 입력

 

 


 

참고
 

Compose file version 3 reference

 

docs.docker.com

 

Overview of docker-compose CLI

 

docs.docker.com