-
[Docker] docker-compose 작성하기!Docker 2024. 1. 16. 16:25728x90
Docker-compose란 무엇?
다중 컨테이너를 정의하고 실행하기 위한 기능입니다. YAML 파일을 사용하여 서비스를 구성합니다.
YAML 파일 정의 옵션
# yaml 파일 포맷의 버전입니다. docker compose마다 사용하는 yaml 포맷 버전이 있습니다. version: "3" # 생성될 컨테이너를 정의합니다. services: # 컨테이너 이름을 정의합니다. container_name: # 여기서 부터는 컨테이너의 옵션을 정의합니다. image: links: networks: restart: ports: volumes: environment: env_file:
image
컨체이너 생성 시 사용할 이미지를 정의합니다.links
컨테이너 간의 네트워크 연결을 설정합니다. 권장되지 않은 예전 방식이므로 networks 사용을 권장합니다.networks
컨테이너 간의 통신을 위한 네트워크 설정을 제공합니다.
컨테이너는 독립적인 환경에서 실행되기 때문에, 서로 다른 컨테이너 간에 통신을 하려면 이를 위한 네트워크 구성이 필요합니다.version: '3' services: webapp: image: nginx networks: - frontend database: image: postgres networks: - backend networks: frontend: backend:
- webapp 서비스는 frontend 네트워크에 속하도록 설정되었습니다.
- database 서비스는 backend 네트워크에 속하도록 설정되었습니다.
다음은 조금 더 상세한 예시입니다.
networks: frontend: driver: bridge ipam: driver: default config: - subnet: "172.16.1.0/24" backend: driver: bridge ipam: driver: default config: - subnet: "172.16.2.0/24"
이 예시에서는 frontend와 backend 두 개의 네트워크를 정의하고 있습니다. 각각의 네트워크에는 driver와 ipam (IP Address Management) 설정이 추가로 정의되어 있습니다.
- driver: 네트워크 드라이버를 지정합니다. 여기서는 기본값인 bridge를 사용하고 있습니다.
- ipam: IP 주소 관리를 설정합니다. 여기서는 각 네트워크의 서브넷을 설정하고 있습니다.
restart
컨테이너가 종료되었을 때 자동으로 다시 시작되는 방식을 설정합니다.version: '3' services: webapp: image: nginx restart: always
- no: 재시작을 하지 않음.
- always: 컨테이너가 종료되면 항상 다시 시작.
- unless-stopped: 사용자가 수동으로 중지하지 않는 한 항상 다시 시작.
- on-failure: 컨테이너가 비정상 종료되었을 때만 다시 시작. 추가적으로 --restart-max-retries 옵션을 사용하여 재시도 횟수를 설정할 수 있습니다.
ports
호스트 포트를 컨테이너 포트로 맵핑하는 옵션입니다.
호스트 포트로 들어오는 요청을 컨테이너 포트로 전달합니다.ports: - "호스트포트:컨테이너포트" # 여러 포트를 맵핑하는 예시 ports: - "8080:80" - "8443:443"
volumes
호스트와 컨테이너 간에 데이터를 공유하거나 영속적인 데이터를 저장하기 위한 설정을 제공합니다. 이를 통해 컨테이너가 종료되거나 삭제되더라도 데이터를 보존할 수 있습니다.version: '3' services: webapp: image: nginx volumes: - /path/on/host:/path/in/container
- /path/on/host: 호스트 시스템의 경로입니다.
- /path/in/container: 컨테이너 내부의 경로입니다.
다른 예시로, 볼륨을 Docker Compose 프로젝트 내의 상대 경로로 지정할 수도 있습니다.
version: '3' services: webapp: image: nginx volumes: - ./data:/usr/share/nginx/html
이렇게 하면 현재 Docker Compose 파일이 위치한 디렉터리 내의 data 폴더와 컨테이너 내부의 /usr/share/nginx/html 경로가 공유됩니다.
environment
컨테이너의 환경 변수를 설정합니다.environment: -PASSWORD=mysecretpassword
command
컨테이너가 시작될 때 실행될 명령을 지정합니다.command: ["echo", "Hello, Docker!"]
728x90반응형'Docker' 카테고리의 다른 글
[Docker] Dockerfile 작성하기! (0) 2024.01.15 [Docker] open /Users/사용자/.docker/buildx/activity/desktop-linux: permission denied 해결 방법 (mac) (0) 2024.01.10