본문 바로가기
Docker/Docker

Docker Compose 구성

by 누워있는말티즈 2023. 9. 15.

개요

본 문서는 Dockerfile, docker-compose.yml, 도커 실행 명령 관련하여

  • 자주 사용하는
  • 특정 기능을 위해 필요한
  • 자주 안쓰지만 필요한

기능을 위한 명령어 등을 정리한 문서이다.


이 문서의 경우 wait 기능을 위해 2.1 버전을 이용했는데 보통은 3점대 쓴다.

Docker Compose

기본적으로 이미지는 개별 Dockerfile로 생성하는 게 사용하기 편하다.

Dockerfile의 volume, device 같은 연결 명령은 compose에서도 선언 가능하다.

 

mongodb, nginx 같은 이미지가 공개된 경우

version: '2.1' 
services: 
	mongodb: 
    	image: mongo:4.0 
        container_name: local_service_db 
        restart: always
        expose: 
        	- 27017 
        ports: 
        	- 27017:27017 
        tty: true
        volumes: 
        	- ./mongodb:/data/db 
        environment: 
            - MONGO_INITDB_ROOT_USERNAME=***** 
            - MONGO_INITDB_ROOT_PASSWORD=******** 
            - MONGO_INITDB_DATABASE=local_service_db 
    nginx_proxy: 
        image: nginx:1.21.5-alpine 
        container_name: nginx_proxy 
        ports: 
            - 80:80 
        volumes: 
            - ./proxy/nginx.conf:/etc/nginx/nginx.conf 
        networks:
            - dk_net

 

FastAPI 기반 API 서버에서 자주 사용하는 option

docker_image_name:
    image: registry.gitlab.com/{registry location}/{image name}:{tag}
    container_name: docker_container_name

    expose:
      - 7000
    ports:
      - 7000:7000
    restart: unless-stopped
      
    # for simulatanous container operation
    tty: true 
    volumes:
      - ./app:/usr/local.////////
      - ./config/config.ini:/db_api/config.ini
    
    networks:
      - docker_network_name

expose, ports : 개방 포트 지정 및 컨테이너 내부 포트와 시스템 포트 연결 || {내부}:{외부}

restart : 컨테이너 기능 장애 시 재시동

devices : 컨테이너의 device와 linux serial device 연결 || {내부}:{외부}

tty : 다중 컨테이너 이용을 위한 설정

networks : 컨테이너가 엮일 도커네트워크 선택

volumes : 컨테이너 내부 파일과 외부 파일 || {내부}:{외부}

  expose:
    - 7000
  ports:
    - 7000:7000
  restart: unless-stopped
  devices:
    - "/dev/ttyS1:/dev/ttyS1"
  tty: true
  networks:
    - docker_network_name
  volumes:
    - ./app:/usr/local.////////
    - ./config/config.ini:/db_api/config.ini

 

다른 컨테이너 wait

api 서버와 같이 먼저 무언가가 구동되어야 정상적으로 올라올 수 있는 컨테이너의 경우 지정한 컨테이너 기능이 먼저 기능하는 것을 확인하고 컨테이너를 올린다.

아래 예시의 경우 target api가 9000번 포트에서 작동하는 것을 보고 main.py를 실행한다.

  docker_image_name:
    image: registry.gitlab.com/{registry location}/{image name}:{tag}
    container_name: docker_container_name

    volumes:
      - ./app:/usr/local.////////
      - ./config/config.ini:/client/config.ini

    depends_on:
      {target_api}:
        condition: service_started

    command: sh -c "/wait && python3 -u main.py"

    environment:
      - WAIT_HOSTS={target_api}:{port}
      - WAIT_HOSTS_TIMEOUT=300
      - WAIT_SLEEP_INTERVAL=10
      - WAIT_HOSTS_CONNECT_TIMEOUT=30

    networks:
        - drimaes_net

 

networks

docker network create {network_name} -d {driver} 으로 선제적 네트워크 생성 필요

컨테이너 간 연결을 위한 docker network 지정

networks:
  docker_network_name:
    driver: bridge 
    external: true
반응형

'Docker > Docker' 카테고리의 다른 글

도커 이미지 tar 파일 생성  (0) 2024.02.08
Docker Hub 사용  (0) 2024.02.07
Docker Container 내에서 내/외부 IP 사용  (0) 2023.09.26
Dockerfile 작성  (0) 2023.09.14

댓글